- 締切済み
アルディーノのプログラムについて
アルディーノのプログラムについてです。 アルディーノのプログラムについてです。 現在はトグルスイッチをON、センサーOFFでモーターが動きだし、センサーがONになるとそこからプラスで3.2秒モーターが動きその後停止し、またセンサーがOFFになるとモーターが動き出すと言うプログラムの動作を確認出来ています。この動作にモーターとセンサーをもう一つ加え、同じ動作をさせたいです。トグルスイッチは共通で、モーターの動きは対応しているセンサーによって独立させたいです。そこでプログラムを作ったのですが、このプログラムだと片方ずつしかモーターが動きません uint32_t time=3201; byte dir=2; byte pul=3; byte dir2=8; byte pul2=9; byte tgl_sw=6; byte sensor=7; byte sensor2=10; word wait_us=2500 ;//2500us*2*200→フルステップで約1RPS void setup() { pinMode(dir,OUTPUT); pinMode(pul,OUTPUT); digitalWrite(dir,HIGH); pinMode(dir2,OUTPUT); pinMode(pul2,OUTPUT);// digitalWrite(dir2,HIGH); pinMode(tgl_sw,INPUT_PULLUP);//※LOWでON pinMode(sensor,INPUT); pinMode(sensor2,INPUT);//※ } } void loop() { if(digitalRead(tgl_sw)==LOW && digitalRead(sensor)==HIGH) delay(2000); time=millis(); while(millis()-time<3200) {//センサがオンになってから1500msまで if(digitalRead(tgl_sw))return; digitalWrite(pul,HIGH);//回す delayMicroseconds(wait_us); digitalWrite(pul,LOW); delayMicroseconds(wait_us); if(digitalRead(sensor)==HIGH)time=millis();//センサがオフなら更新 } {if(digitalRead(tgl_sw)==LOW && digitalRead(sensor2)==HIGH) delay(2000); time=millis(); while(millis()-time<3200) {//センサがオンになってから1500msまで if(digitalRead(tgl_sw))return; digitalWrite(pul2,HIGH);//回す delayMicroseconds(wait_us); digitalWrite(pul2,LOW); delayMicroseconds(wait_us); if(digitalRead(sensor2)==HIGH)time=millis();//センサがオフなら更新 //停止 } } } 修正点を教えていただけるとありがたいです。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BuriBuri4
- ベストアンサー率28% (150/525)
片方づつしか処理してないんだから片方づつしか動かなくて当然。 ループを一個に統合して並行動作するようにしないと。 布団の中で書いてるので具体的な修正方法は次の人に任せた。 あと、if () はその後の文を取るから1文しかなければ{}は要らない。delay(2000)が真の時の実行文になります、バグの元なので{}付けた方が良いとは思う。
- hahaha8635
- ベストアンサー率22% (800/3610)
回路図がないとわからん setupの // digitalWrite(dir2,HIGH); コメント化されてるけどいいの? http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=97 if (pinFiveInput < 500) { // 動作A } else { // 動作B } if分の{} があってないように見えるが 改行して スカスカにして書いた方が 全体を見やすくできるんだが if(digitalRead(tgl_sw)==LOW && digitalRead(sensor)==HIGH) の 実行式がない ”{” がない 入れると "}"がない ので全体がおかしい if(digitalRead(tgl_sw))return; で loop 抜けてるので トグルスイッチをONの時以降は何も実行されてない