Собрал платформу на базе ArduinoUNO+ шилд на 6 реле + 2 двигателя от стеклоподъемников + р/у Futaba 10. Создал скетч платформа классно ездит в перед и назад но разворачиваться не хочет. Продолжает двигаться вперед и назад. Программ прилогается int pin_in_1 = 11; int pin_in_2 = 12; unsigned long in_1; unsigned long in_2; int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; void setup() { Serial.begin(9600); pinMode(pin_in_1, INPUT); pinMode(pin_in_2, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); } void loop() { in_2 = pulseIn(pin_in_2, INPUT); in_1 = pulseIn(pin_in_1, INPUT); //движение вперед назад if (in_1<14200) // Если значение менее 14200 едем вперед { digitalWrite(led2, HIGH); digitalWrite(led4, HIGH); } else if (in_1>14420) { digitalWrite(led2, LOW); digitalWrite(led4, LOW); } delay(100); if (in_1>14800) // Если значение больше 14800 едем назад { digitalWrite(led3, HIGH); digitalWrite(led1, HIGH); } else if (in_1>14420) { digitalWrite(led3, LOW); digitalWrite(led1, LOW); } delay(100); //повороты if (in_2>14100) // Если значение больше 14100 поворот в право { digitalWrite(led1, HIGH); digitalWrite(led4, HIGH); } else { digitalWrite(led1, LOW); digitalWrite(led4, LOW); } delay(100); if (in_2>14600) // Если значение больше 14600 поворот в лево { digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); } else { digitalWrite(led2, LOW); digitalWrite(led3, LOW); } delay(100); }
Вот тут случаем не напутали? if (in_2>14100) if (in_2>14600) Чтобы узнать, чем на самом деле занимается программа, следует вставлять отладочный вывод в последовательный порт интересующих переменных в нужных ветках программы.
Я выводил значение переменных на экран in_1 и in_2 значение in_1 14800 позиция вперед 14400 средняя позиция 14100 позиция назад значение in_2 14800 позиция вправо 14400 средняя позиция 14100 позиция влево функцию IFя изменил теперь скетч выглядит так. if (in_1<14400 && in_1>14100) // Если значение менее 14200 едем вперед { digitalWrite(led2, HIGH); digitalWrite(led4, HIGH); } else if (in_1>14420) { digitalWrite(led2, LOW); digitalWrite(led4, LOW); } delay(100); if (in_1>14500 && in_1<14900) // Если значение больше 14800 едем назад { digitalWrite(led3, HIGH); digitalWrite(led1, HIGH); } else //if (in_1>14420) { digitalWrite(led3, LOW); digitalWrite(led1, LOW); } delay(100); //повороты if (in_2<14300 && in_2>13900) // Если значение больше 14100 поворот в право { digitalWrite(led1, HIGH); digitalWrite(led4, HIGH); } else { digitalWrite(led1, LOW); digitalWrite(led4, LOW); } delay(100); if (in_2>14400 && in_2<14900) // Если значение больше 14600 поворот в лево { digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); } else { digitalWrite(led2, LOW); digitalWrite(led3, LOW); } delay(100); Serial.println(in_2);
а попробуйте так Код (Text): //движение if (in_1>14700 && in_1<14900 && in_2>14300 && in_2<14500) // едем назад { digitalWrite(led2, LOW); digitalWrite(led4, LOW); digitalWrite(led3, HIGH); digitalWrite(led1, HIGH); } if (in_1>14300 && in_1<14500 && in_2>14300 && in_2<14500) // stop { digitalWrite(led2, LOW); digitalWrite(led4, LOW); digitalWrite(led3, LOW); digitalWrite(led1, LOW); } if (in_1>14000 && in_1<14200 && in_2>14300 && in_2<14500) // едем вперед { digitalWrite(led2, HIGH); digitalWrite(led4, HIGH); digitalWrite(led3, LOW); digitalWrite(led1, LOW); } //повороты if (in_1>14300 && in_1<14500 && in_2>14000 && in_2<14200) //поворот вправо { digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led1, LOW); digitalWrite(led4, LOW); } if (in_1>14300 && in_1<14500 && in_2>14700 && in_2<14900) // поворот влево { digitalWrite(led1, HIGH); digitalWrite(led4, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); }