Не пашет часть кода

Тема в разделе "Arduino & Shields", создана пользователем jonihh, 16 авг 2018.

  1. jonihh

    jonihh Нуб

    Электронная часть работает, всё проверено, а вот код - нет.
    Код:

    Код (C++):
    #include <SoftwareSerial.h>



    int channel;
    int channel2;
    byte Speedmotor;
    int diapazonSpeed;
    byte iz;
    byte a;
    byte b;

    int max1, max2, min1, min2, maxa1, maxa2, mina1, mina2;

    //const int ledPin =  ;      // номер выхода, подключенного к светодиоду
    //int ledState = LOW;             // этой переменной устанавливаем состояние светодиода
    //long previousMillis = 0;        // храним время последнего переключения светодиода
    //long interval = 400;

    void setup() {
      Serial.begin(9600);
      pinMode(3, INPUT);
      pinMode(5, INPUT);
      pinMode(8, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(A1, OUTPUT);
      pinMode(A2, OUTPUT);
      pinMode(A3, OUTPUT);
      pinMode(A4, OUTPUT);
    //  pinMode(ledPin, OUTPUT);
      a=1;
      max1=1890  ; //вверх верхний предел
      min1=1510  ; //вверх нижний предел
      max2=1490  ; //вниз верхний предел
      min2=1215  ; //вниз нижний предел
      maxa1=1820  ; //правый стик (лево-право) правый предел
      mina1=1520  ; //правый минимум
      maxa2=1500  ; //левый минимум
      mina2=1245  ; //левый предел
    }

    void loop() {
    //получаем данные с приемника
    channel=pulseIn(3,HIGH);
    channel2=pulseIn(5,HIGH);

    //мониторим данные

      Serial.print(channel);
      Serial.print(" - ");
      Serial.print(channel2);
      Serial.print(" - ");
      Serial.print(Speedmotor);
      Serial.print(" - ");
      Serial.print(diapazonSpeed);
      Serial.print(" - ");
      Serial.print(b);
      Serial.print(" - ");
      Serial.println(iz);


    //управление мотором


    if (channel>min1) {  //ход вперед
      digitalWrite(7, LOW);          //7 HIGH назад
      digitalWrite(8, HIGH);         //8 HIGH вперед
      Speedmotor=(channel-min1)/1.5;
      analogWrite(6, Speedmotor);
      if (Speedmotor<160 && Speedmotor>0){
      diapazonSpeed=2;
    }
    if (Speedmotor<255 && Speedmotor>160){
      diapazonSpeed=3;
    }
    }

    if (channel>(max1-10)) {  //ход вперед max
      digitalWrite(7, LOW);        
      digitalWrite(8, HIGH);
      Speedmotor=254;
      analogWrite(6, Speedmotor);
      if (Speedmotor<160 && Speedmotor>0){
      diapazonSpeed=2;
    }
    if (Speedmotor<255 && Speedmotor>160){
      diapazonSpeed=3;
    }
    }
    if (channel<max2) { //ход назад
      digitalWrite(8,LOW);
      digitalWrite(7,HIGH);
      Speedmotor=((max2-channel)/1.083);
      analogWrite(6, Speedmotor);
      if (Speedmotor<160 && Speedmotor>0){
      diapazonSpeed=2;
    }
    if (Speedmotor<255 && Speedmotor>160){
      diapazonSpeed=3;
    }
    }
    if (channel<(min2+10)) { //ход назад max
      digitalWrite(8,LOW);
      digitalWrite(7,HIGH);
      Speedmotor=254;
      analogWrite(6, Speedmotor);
      if (Speedmotor<160 && Speedmotor>0){
      diapazonSpeed=2;
    }
    if (Speedmotor<255 && Speedmotor>160){
      diapazonSpeed=3;
    }
    }

    if (min1>channel && channel>max2 || channel<1100) { //на месте
      Speedmotor=0;
      digitalWrite(7,LOW);
      digitalWrite(8,LOW);
      analogWrite(6, Speedmotor);
      diapazonSpeed=1;

    }


    //поворотники

    //unsigned long currentMillis = millis();
    //if (min1<channel2 || max2>channel2) {
    //  if(currentMillis - previousMillis > interval) {
    //    // сохраняем время последнего переключения
    //    previousMillis = currentMillis;
    //
    //    // если светодиод не горит, то зажигаем, и наоборот
    //    if (ledState == LOW)
    //      ledState = HIGH;
    //    else
    //      ledState = LOW;
    //    
    //    digitalWrite(ledPin, ledState);
    //  }
    //  if (mina1>channel2>maxa2){
    //    digitalWrite(ledPin, LOW);
    //  }
    //}

      //звук

       if (diapazonSpeed != iz){      //Проверяем, не меняется ли скорость
          iz=diapazonSpeed;    
          if (diapazonSpeed=1) {      //Если на месте играем первый трек
          digitalWrite(A1, HIGH);     //Открываем транзистор
          delay(100);                 //Время необходимое для срабатывания модуля
          digitalWrite(A1, LOW);      //Закрываем транзистор
          b=1;                        //переменная для проверки работы данной части кода
         }
       
          if (diapazonSpeed=2) {      //Если движение малой скорости, то
            if (a=1){                 //Если скорость повысилась, то играем следующий трек (малая скорость)
            digitalWrite(A2, HIGH);                  //a2 повышение
            delay(100);                                //a3 понижение
            digitalWrite(A2, LOW);
            b=2;                      //переменная для проверки работы данной части кода
            }
            if (a!=1){                //Если скорость понизилась, то играем предыдущий трек (малая скорость)
            digitalWrite(A3, HIGH);
            delay(100);
            digitalWrite(A3, LOW);
            a=1;
            b=3;                      //переменная для проверки работы данной части кода
            }
       
         }
          if (diapazonSpeed=3) {      //Если движение большей скорости, то играем следующий трек (большая скорость)
          digitalWrite(A2, HIGH);
          delay(100);
          digitalWrite(A2, LOW);
          a=2;
          b=2;                        //переменная для проверки работы данной части кода
         }
       
    //     if (diapazonSpeed=4) {
    //      digitalWrite(A4, HIGH);
    //      delay(100);
    //      digitalWrite(A4, LOW);
    //     }
       
       
       }
     
    }
    Данные мониторинга по порядку
    1) Верные значения приемника (канал ELEV)
    2) Верные значения приемника (канал AILE)
    3) значение Speedmotor, тоже верное
    4) значение diapazonSpeed=3, это неверно.
    5) Значение b=2, это неверно.
    6) Значение iz=3, это неверно.


    Подскажите где копать
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Для того чтобы они были верными, нужно объявить из значения. В скетче я этого не вижу. Ткните носом если ошибаюсь.
     
  3. jonihh

    jonihh Нуб

    Переделал byte на int и всё заработало

    int channel;
    int channel2;
    int Speedmotor;
    int diapazonSpeed;
    int iz;
    int a;
    int b;
     
  4. parovoZZ

    parovoZZ Гуру

    А это, переменные обязательно все делать глобальными?
     
  5. NikitOS

    NikitOS Король шутов Администратор

    Почему нет?
     
    Mitrandir нравится это.
  6. parovoZZ

    parovoZZ Гуру