Здравствуйте. У меня arduino uno wavgat r3. При первом автономном запуске скетч отрабатывает нормально. Но после отключения питания похоже сохраняется предыдущее состояние скетча и не перезагружается. Кто знает как можно его перзагрузить?
А что такое первый автономный запуск ? А что было до него ? Возможно ваш скетч что-то записывает во флешь-память. А после запуска считывает это и уходит в какой-то цикл без обращений к периферии, что и воспринимается как "неработа". Выкладывайте скетч. Ясновидцев всех давно спалили на кострах.
Первый в смысле после устновки скетча по USB. Автономный в смысле питание от батарейки. Код (C++): int ENA = 2; int IN1 = 3; int IN2 = 8; int IN3 = 5; int IN4 = 6; int ENB = 7; const int trigPin = 9; const int echoPin = 4; long duration, cm; int drive=0;//0-right,1-left,3-forward,4-back,5-stop void setup() { Serial.begin(9600); pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); pinMode (LED, OUTPUT); drive=0; delay(3000); } void loop() { cm = checkDistance(); if (cm < 80 && drive==0) { drive=1; Serial.println(cm); } if(drive==5){ stopCar(); Serial.println(drive); } else if(drive==0){ turnRight(); Serial.println(cm); Serial.println(drive); } else if(drive==1){ turnLeft(); delay(50); drive=5; } } long checkDistance() { // Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше // Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH: //digitalWrite(trigPin, LOW); //delayMicroseconds(1); digitalWrite(trigPin, HIGH); delayMicroseconds(2); digitalWrite(trigPin, LOW); // Считываем данные с ультразвукового датчика: значение HIGH, которое // зависит от длительности (в микросекундах) между отправкой // акустической волны и ее обратном приеме на эхолокаторе. pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); // преобразование времени в расстояние cm = (duration / 2) / 29.1; return cm; } void forwardCar() { digitalWrite (IN4, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); analogWrite(ENA, 255); analogWrite(ENB, 255); } void turnLeft() { digitalWrite (IN4, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN1, HIGH); analogWrite(ENA, 255); analogWrite(ENB, 255); } void turnRight() { digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); digitalWrite (IN1, LOW); digitalWrite (IN2, HIGH); analogWrite(ENA, 255); analogWrite(ENB, 255); } void backCar() { digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); analogWrite(ENA, 255); analogWrite(ENB, 255); } void stopCar() { analogWrite(ENA, 0); analogWrite(ENB, 0); } Так вот при первом запуске машинка поворачивает направо и при выявлении препятствия останавливается. При выключении и влючении притания уже ничего не делает а стоит на месте.
Я не Филин. Это он коды в момент "дешифрует". А если убрать препятствие, всё равно не шаволится ? Видимо у вас в коде логический тупик при "просыпании" машины перед препятствием. Смотрите начало цикла. Не нравятся мне ваши else If. Может просто If ?