помогите с программой очень срочно!
- Войдите на сайт для отправки комментариев
Чт, 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 то правильно работает, но зациклюется и уже другую кнопку не нажать...