Ардуино скетч не перезапускается при отключении питания.

Тема в разделе "Arduino & Shields", создана пользователем AnvarR, 17 мар 2020.

  1. AnvarR

    AnvarR Нуб

    Здравствуйте.
    У меня arduino uno wavgat r3.
    При первом автономном запуске скетч отрабатывает нормально.
    Но после отключения питания похоже сохраняется предыдущее состояние скетча и не перезагружается.
    Кто знает как можно его перзагрузить?
     
  2. KindMan

    KindMan Гуру

    Кто нибудь, что нибудь понял, или это я не проснулся ещё?
     
  3. Daniil

    Daniil Гуру

    Выложите код и подробнее распишите, пожалуйста, почему вы решили, что он не работает?
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А что такое первый автономный запуск ? А что было до него ? Возможно ваш скетч что-то записывает во флешь-память. А после запуска считывает это и уходит в какой-то цикл без обращений к периферии, что и воспринимается как "неработа". Выкладывайте скетч. Ясновидцев всех давно спалили на кострах.
     
    Последнее редактирование: 17 мар 2020
  5. AnvarR

    AnvarR Нуб

    Первый в смысле после устновки скетча по 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);
    }
     
    Так вот при первом запуске машинка поворачивает направо и при выявлении препятствия останавливается.
    При выключении и влючении притания уже ничего не делает а стоит на месте.
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Я не Филин. Это он коды в момент "дешифрует". А если убрать препятствие, всё равно не шаволится ? Видимо у вас в коде логический тупик при "просыпании" машины перед препятствием. Смотрите начало цикла. Не нравятся мне ваши else If.
    Может просто If ?
     
    Последнее редактирование: 17 мар 2020
  7. parovoZZ

    parovoZZ Гуру

    Нет, 8-ми битки так не умеют. У них нет второго банка памяти. Так что это всё выдумки.
     
  8. с этой китайской поделкой может творится всё что угодно.