wind catさんに質問があります。 この前の件はありがとうございました。 この前頂いたプログラムを試して見たところ、距離に応じてLEDの色は付きましたが、シリアルモニタに測定値が表示されませんでした。 教授によると、 測定値(プログラムで測った超音波センサーから障害物までの距離の値)と 実測値(実際に定規等で測った超音波センサーから障害物までの値)が必要とのことです。 シリアルモニタに数値を表示させるプログラムをこの前頂いたプログラムの中に作って頂きたいです。また、新しく入れ込んだ場合、配線の場所は変わってしまうでしょうか?その場合新しい配線図を作って頂きたいです<(_ _)> 頂いたプログラム⤵︎ ︎ // センサーのピン番号設定 #define trig1 9 #define echo1 8 #define trig2 11 #define echo2 10 // LEDのピン番号設定 #define L1g 2 #define L1y 3 #define L1r 4 #define L2g 5 #define L2y 6 #define L2r 7 #define speedOfSound 0.034 // 音速 (cm/μs) typedef struct { byte trig; byte echo; byte lp[3]; byte led; } chData; chData cp[2] = { {trig1, echo1, {L1g, L1y, L1r}, L1r}, {trig2, echo2, {L2g, L2y, L2r}, L2r} }; float dist[2]; unsigned long tm; byte brink=0; void setup() { pinMode(trig1, OUTPUT); pinMode(echo1, INPUT); pinMode(trig2, OUTPUT); pinMode(echo2, INPUT); for (byte i = L1g; i <= L2r; i++) { pinMode(i, OUTPUT); } tm=millis(); } void loop() { byte i; for (i = 0; i < 2; i++) { dist[i] = measDist(i); setLED(i,dist[i]); } if(millis()-tm >= 500){ brink = !brink; tm=millis(); } delay(100); // 0.1秒待機 } //距離測定 float measDist(byte ch) { float v; digitalWrite(cp[ch].trig, LOW); delayMicroseconds(2); digitalWrite(cp[ch].trig, HIGH); delayMicroseconds(10); digitalWrite(cp[ch].trig, LOW); v = pulseIn(cp[ch].echo, HIGH); return (v * speedOfSound) / 2; } //LEDのON/OFF void selLED(byte ch, byte color,byte sw=1) { //color: 0=G 1=Y 2=R digitalWrite(cp[ch].led, LOW); digitalWrite(cp[ch].lp[color], sw); cp[ch].led = cp[ch].lp[color]; } //distに対するLEDの制御 void setLED(byte ch,float dist) { if (dist > 150) { // 緑色のLEDを点灯 selLED(ch, 0); } else if (dist > 50) { // 黄色のLEDを点灯 selLED(ch, 1); } else if (dist > 30) { // 赤色のLEDを点滅 selLED(ch, 2,brink); } else{ // 赤色のLEDを点灯 selLED(ch, 2); } }
プログラミング