- 締切済み
プログラムの組み合わせ
一つ目 #include <Servo.h> #define PBS1 10 #define analogPin 0 Servo RCservo1; void setup() { RCservo1.attach(7); pinMode(PBS1,INPUT); } void loop() { int s1 = digitalRead(PBS1); if(s1 == LOW) { while(1) { RCservo1.write(90); delay(1000); RCservo1.write(140); delay(1000); RCservo1.write(40); delay(1000); RCservo1.write(180); delay(1000); RCservo1.write(0); delay(1000); RCservo1.write(180); delay(1000); RCservo1.write(30); break; } } } 二つ目 int Duration; float Distance; const int TRIG = 10; const int ECHO = 12; const int BEAT = 300; const int SPK = 2; void setup() { Serial.begin(9600); pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT); } void loop() { digitalWrite(TRIG,LOW); delayMicroseconds(10); digitalWrite(TRIG,HIGH); delayMicroseconds(10); digitalWrite(TRIG,LOW); Duration = pulseIn(ECHO,HIGH); if (Duration > 0) { Distance = Duration /2; Distance = Distance * 0.034; Serial.print(Distance); Serial.print("cm"); } if(Distance < 5) { tone(SPK, 523, BEAT); Serial.println("[C]"); }else if (Distance >= 5&& Distance < 10){ tone(SPK, 494, BEAT); Serial.println("[B]"); }else if (Distance >= 10&& Distance < 15){ tone(SPK, 440, BEAT); Serial.println("[A]"); }else if (Distance >= 15&& Distance < 20){ tone(SPK, 392, BEAT); Serial.println("[G]"); }else if (Distance >= 20&& Distance < 25){ tone(SPK, 349, BEAT); Serial.println("[F]"); }else if (Distance >= 25&& Distance < 30){ tone(SPK, 330, BEAT); Serial.println("[E]"); }else if (Distance >=30&& Distance < 35){ tone(SPK, 294, BEAT); Serial.println("[D]"); }else if (Distance >= 35&& Distance < 40){ tone(SPK, 262, BEAT); Serial.println("[c]"); } delay(1000); } 一つ目はサーボモータを動かすプログラムで 二つ目は超音波センサによる距離に応じて音階が変わるプログラムです これらのプログラムを組み合わせて 距離に応じてサーボモータを動かすプログラムを作りたいです もしよろしければプログラムを教えてください
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- oshiete_poo_V1
- ベストアンサー率42% (15/35)
1. 一つ目、2つ目それぞれのloop()を別の関数にする setup()は合体しておく 2. 一つ目 は6秒くらいかかり、二つ目 は1秒くらい待つので1つ目用にカウンタを用意する 3. 一つ目のPBS1による起動条件は取り合えず消す loop()中でdelay(1000)するので元の一つ目、2つ目中のdelayは適切に消す 4. loopの中で、次を記述する 二つ目の処理は毎回呼ぶ 一つ目の処理はカウンタの値によって該当する RCservo1.write(*)を呼ぶ様にする カウンタをインクリメント カウンタが7以上だったらカウンタを0に設定 delay(1000)する 何故Javaなのですか?