помогите с программой очень срочно!
- Войдите на сайт для отправки комментариев
Чт, 27/03/2014 - 01:57
Итак, у меня Arduino mini, к ней вставил ir управление, 2 моторчика через l293d и 3 сенсора линии.
Проблема в том, что код, как не писал, доходя до условия сенсора линии, работает совсем не правильно!
моторы или оба крутятся, или только один, непонятно почему.
Вот код:
#include <IRremote.h> int RECV_PIN = 5; int i = 0; int led = 13; int in1 = 2; int in2 = 3; int in3 = 4; int ml1 = 6; int ml2 = 7; int mr1 = 8; int mr2 = 9; int marker = 10; int invalue1; int invalue2; int invalue3; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { pinMode(in1, INPUT); pinMode(in2, INPUT); pinMode(in3, INPUT); pinMode(ml1, OUTPUT); pinMode(ml2, OUTPUT); pinMode(mr1, OUTPUT); pinMode(mr2, OUTPUT); pinMode(led, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { if (results.value==0xFF02FD) { digitalWrite(ml1, LOW); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, LOW); digitalWrite(led, LOW); } if (results.value==0xFF629D){ digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW); digitalWrite(led, HIGH); } if (results.value==0xFFA857){ digitalWrite(ml1, LOW); digitalWrite(ml2, HIGH); digitalWrite(mr1, LOW); digitalWrite(mr2, HIGH); digitalWrite(led, HIGH); } if (results.value==0xFF22DD){ digitalWrite(ml1, LOW); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW); digitalWrite(led, HIGH); delay(500); digitalWrite(mr1, LOW); } if (results.value==0xFFC23D){ digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, LOW); digitalWrite(led, HIGH); delay(500); digitalWrite(ml1, LOW); } if (results.value==0xFF30CF) { invalue1 = digitalRead(in1); invalue2 = digitalRead(in2); invalue3 = digitalRead(in3); if(invalue1==1 && invalue3==1) { digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW);} if(invalue3!=1) { digitalWrite(ml1, LOW); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW);} if(invalue1!=1) { digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, LOW);} } if (results.value==0xFF6897) { while(i<4) { digitalWrite(marker, HIGH); digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW); delay(500); digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, HIGH); delay(550); i++; } digitalWrite(ml1, LOW); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, LOW); digitalWrite(marker, LOW); i=0; } irrecv.resume(); } }
кстати если просто без тех всех if заливать, то работает правильно. также пробывал коды кнопок писать через case, та самая картина.
Этот урывок сам работает, а вместе с общей прогой - нет
invalue1 = digitalRead(in1); invalue2 = digitalRead(in2); invalue3 = digitalRead(in3); if(invalue1==1 && invalue3==1) { digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW);} if(invalue3!=1) { digitalWrite(ml1, LOW); digitalWrite(ml2, LOW); digitalWrite(mr1, HIGH); digitalWrite(mr2, LOW);} if(invalue1!=1) { digitalWrite(ml1, HIGH); digitalWrite(ml2, LOW); digitalWrite(mr1, LOW); digitalWrite(mr2, LOW);} }
Я подредактировал Ваш пост, но вообще см. ссылку:
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
спасибо, только зарегистрировался, незнал еще как.
ну что, может кто-то знает, почему не работает??
кстати если писать через while то правильно работает, но зациклюется и уже другую кнопку не нажать...