РЕШЕНО Помогите разобраться с отрезком кода!

Тема в разделе "Arduino & Shields", создана пользователем Avage, 13 ноя 2019.

  1. Avage

    Avage Нерд

    Ребят не судите строго если мой код не аккуратно написан
    Объясняю
    В терминале почему-то r выдает 0 и z не принимает ни какие значение кроме того что указана при ее объявления.z должен принимать значение в функции void budil. А r в 156 строке.
    Вот код
    Код (C++):
    #include "IRremote.h"
    int PERIOD=4705;
    uint32_t timer = 0;
    IRrecv irrecv(4);
    decode_results results;
    int t=0,i,j=0,l,k,e,n=0,z=1,a[5],r=0,w=0,y=0;
    bool bud=0,d=0;
    void setup() {
      Serial.begin(9600);
      irrecv.enableIRIn();
      k=255;
      j=5;
      e=15;
      digitalWrite(j,OUTPUT);
    }
    void budil(){
      if ( irrecv.decode( &results )) {
          switch(results.value){
          case 0xFF6897:
            z=0;
            break;
          case 0xFF30CF:
            z=1;
            break;
          case 0xFF18E7:
            z=2;
            break;
          case 0xFF7A85:
            z=3;
            break;
          case 0xFF10EF:
            z=4;
            break;
          case 0xFF38C7:
            z=5;
            break;
          case 0xFF5AA5:
            z=6;
            break;
          case 0xFF42BD:
            z=7;
            break;
          case 0xFF4AB5:
            z=8;
            break;
          case 0xFF52AD:
            z=9;
            break;              
          case 0xFFC23D:
            bud = !bud;
            break;        
        }
         irrecv.resume();  
       }
    }
    void prov(){
        if ( irrecv.decode( &results )) {
            switch(results.value){
          case 0xFF6897:
            t=0;
            break;
          case 0xFF30CF:
            t=1;
            break;
          case 0xFF18E7:
            t=2;
            break;
          case 0xFF7A85:
            t=3;
            break;
          case 0xFF10EF:
            t=4;
            break;
          case 0xFF38C7:
            t=5;
            break;
          case 0xFF5AA5:
            t=6;
            break;
          case 0xFF42BD:
            t=7;
            break;
          case 0xFFC23D:
            bud = !bud;
            if(bud==1){
            n=0;    
            r=0;
            }
            break;
          case 0xFF906F:
            t=9;
            d = !d;  
          case 0xFFE01F:
            k-=10;
            break;
          case 0xFFA857:
            k+=10;
            break;
          case 0xFF22DD:
            t--;
            break;
          case 0xFF02FD:
            t++;
            break;
          case 0xFAA25D:
            e-=5;
            break;
          case 0xFFE21D:
            e+=5;
            break;
          case 0xFF629D:
            e=15;
            break;  
        }
           irrecv.resume();
      }
      if(e<5){
        e=5;
      }
      if(e>50){
        e=50;
      }
      if(k>255){
        k=255;
      }
      if(k<0){
        k=1;
      }
      if(t==8){
        t=0;
      }
      if(t==-1){
        t=7;
      }
      if (bud == 1){
        t=8;
      }
    }
    void loop() {
    prov();
    if(t==8){
       budil();
       Serial.print("z = ");
       Serial.println(z);
       a[n]=z;
       ++n;
       if(n==4){
          bud=0;
       }
       analogWrite(j,100);
       delay(50);
       prov();
       analogWrite(j,0);
    }
    if(t==9){
      switch(n){
      case 0:
        r = a[0];
      case 1:
        r = 10*a[0]+a[1];
      case 2:
        r = 100*a[0]+10*a[1]+a[2];
      case 3:
        r = 1000*a[0]+100*a[1]+10*a[2]+a[3];
    }
      Serial.print("r = ");
      Serial.println(r);
      i=0;
    e:
      if(millis()>=r/**60*1000*/){
       z:
      if(millis()-timer>=PERIOD+r){
       if(i!=255){
       if(i==0){
       digitalWrite(j,1);
       delay(500);
       digitalWrite(j,0);
       }
       analogWrite(j,i);
       i++;
      }
      else {
        t=0;
      }
      timer += PERIOD;
      }
      prov();
      if(t==9){
        goto z;
      }
      }
      prov();
      if(t==9){
        goto e;
      }
    }
      if(t==0){
        digitalWrite(j,0);
        Serial.println(t);
        delay(25);
      }

      if(t==1){
        for(i=0;i<=k;i++){  
           prov();
          Serial.println(t);
          if(t!=1){
             break;
           }
          analogWrite(j,i);
          if(i==k){
            for(i=k;i>=0;i--){
             prov();
              Serial.println(t);
              if(t!=1){
                break;
              }

              analogWrite(j,i);
            }
          }
        }
      }
        if(t==2){
        for(i=0;i<=k;i++){
          prov();
          Serial.println(t);
          if(t!=2){
             break;
           }
         
          analogWrite(j,i);
          delay(e);
          if(i==k){
            for(i=k;i>=0;i--){
              prov();
              Serial.println(t);
              if(t!=2){
                break;
              }
              analogWrite(j,i);
              delay(e);
            }
          }
        }
      }
      if(t==3){
        prov();
        Serial.println(t);
        analogWrite(j,k);
        delay(e);
        digitalWrite(j,0);
        delay(e);
      }
      if(t==4){
        prov();
        Serial.println(t);
        analogWrite(j,100);
      }
      if(t==5){
        prov();
        Serial.println(t);
        analogWrite(j,170);
      }
      if(t==6){
        prov();
        Serial.println(t);
        analogWrite(j,255);
      }
    if(t==7){
      prov();
        Serial.println(t);
        analogWrite(j,k);
    }
    }
     
     
  2. Avage

    Avage Нерд

    Вот r
     
  3. KindMan

    KindMan Гик

    Я честно попытался проследить, но нереал… когда встретил ещё и goto...
    Назовите переменные более понятно, согласно тому, чего они делают… и очень много их… разбейте ещё на функции.
    А что должно быть и при каких условиях? Когда на ИК приходит какой-то сигнал?
     
    parovoZZ нравится это.
  4. Avage

    Avage Нерд

    Когда я нажимаю на кнопки в функции budil кроме bud не чего не меняется и z выдает тот который был указан при его объявлении
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Тут ошибок больше, чем строк.

    Для начала поставь breakэи в switch который в loop.

    Потом будем дальше смотреть
     
    Daniil, parovoZZ и DetSimen нравится это.
  6. b707

    b707 Гуру

    у вас еще и переменные и метки совпадают... это такой метод. чтоб максимально запутать код?
     
    Daniil нравится это.
  7. Avage

    Avage Нерд

    Нет ну я новичок в arduino по этому сори пишу как могу)
     
  8. b707

    b707 Гуру

    да бесполезно. Это никогда не заработает
     
  9. b707

    b707 Гуру

    учитесь структурировать код. использовать функции и циклы, избегать переходов по метке.
    А так, как пишете вы - ничего длиннее блинка писать не следует
     
    issaom нравится это.
  10. Avage

    Avage Нерд

    Поправил но вроде нечего не изменилось
     
  11. Avage

    Avage Нерд

    С r Разобрался все робит осталось разобраться с z
     
  12. Avage

    Avage Нерд

    Доделал и все робит
    Код (C++):
    #include "IRremote.h"
    int PERIOD=4705;
    uint32_t timer = 0;
    IRrecv irrecv(4);
    decode_results results;
    int t=0,i,j=0,l,k,e,n=0,z=10,a[5],r=0,w=0,y=0;
    bool bud=0,d=0;
    void setup() {
      Serial.begin(9600);
      irrecv.enableIRIn();
      k=255;
      j=5;
      e=15;
      digitalWrite(j,OUTPUT);
    }
    void budil(){
      if ( irrecv.decode( &results )) {
          switch(results.value){
          case 0xFF6897:
            z=0;
            break;
          case 0xFF30CF:
            z=1;
            break;
          case 0xFF18E7:
            z=2;
            break;
          case 0xFF7A85:
            z=3;
            break;
          case 0xFF10EF:
            z=4;
            break;
          case 0xFF38C7:
            z=5;
            break;
          case 0xFF5AA5:
            z=6;
            break;
          case 0xFF42BD:
            z=7;
            break;
          case 0xFF4AB5:
            z=8;
            break;
          case 0xFF52AD:
            z=9;
            break;              
          case 0xFFC23D:
            bud = !bud;
            break;        
        }
         irrecv.resume();  
       }
    }
    void prov(){
        if ( irrecv.decode( &results )) {
            switch(results.value){
          case 0xFF6897:
            t=0;
            break;
          case 0xFF30CF:
            t=1;
            break;
          case 0xFF18E7:
            t=2;
            break;
          case 0xFF7A85:
            t=3;
            break;
          case 0xFF10EF:
            t=4;
            break;
          case 0xFF38C7:
            t=5;
            break;
          case 0xFF5AA5:
            t=6;
            break;
          case 0xFF42BD:
            t=7;
            break;
          case 0xFFC23D:
            bud = !bud;
            if(bud==1){
            n=0;    
            }
            break;
          case 0xFF906F:
            t=9;
            d = !d;  
          case 0xFFE01F:
            k-=10;
            break;
          case 0xFFA857:
            k+=10;
            break;
          case 0xFF22DD:
            t--;
            break;
          case 0xFF02FD:
            t++;
            break;
          case 0xFAA25D:
            e-=5;
            break;
          case 0xFFE21D:
            e+=5;
            break;
          case 0xFF629D:
            e=15;
            break;  
        }
           irrecv.resume();
      }
      if(e<5){
        e=5;
      }
      if(e>50){
        e=50;
      }
      if(k>255){
        k=255;
      }
      if(k<0){
        k=1;
      }
      if(t==8){
        t=0;
      }
      if(t==-1){
        t=7;
      }
      if (bud == 1){
        t=8;
      }
    }
    void loop() {
    prov();
    if(t==8){
    j:
       budil();
       if(z==10 && bud == 1){
        goto j;
       }
       if(bud == 1){
       Serial.print("z = ");
       Serial.println(z);
       a[n]=z;
       ++n;
       }
       if(n==4){
          bud=0;
       }
       analogWrite(j,100);
       delay(25);
       prov();
       analogWrite(j,0);  
       z=10;
    }
    if(t==9){
      switch(n-1){
      case 0:
        r = a[0];
        break;
      case 1:
        r = 10*a[0]+a[1];
        break;
      case 2:
        r = 100*a[0]+10*a[1]+a[2];
        break;
      case 3:
        r = 1000*a[0]+100*a[1]+10*a[2]+a[3];
        break;
    }
      Serial.print("r = ");
      Serial.println(r);
      i=0;
      digitalWrite(j,1);
       delay(500);
       digitalWrite(j,0);
    e:  

      if(millis()>=r*1000*60){
       z:
      if(millis()-timer>=PERIOD+r*1000*60){
       if(i!=255){
       if(i==0){

       }
       analogWrite(j,i);
       i++;
      }
      timer += PERIOD;
      }
      prov();
      if(t==9){
        goto z;
      }
      }
      prov();
      if(t==9){
        goto e;
      }
    }
      if(t==0){
        digitalWrite(j,0);
        Serial.println(t);
        delay(25);
      }

      if(t==1){
        for(i=0;i<=k;i++){  
           prov();
          Serial.println(t);
          if(t!=1){
             break;
           }
          analogWrite(j,i);
          if(i==k){
            for(i=k;i>=0;i--){
             prov();
              Serial.println(t);
              if(t!=1){
                break;
              }

              analogWrite(j,i);
            }
          }
        }
      }
        if(t==2){
        for(i=0;i<=k;i++){
          prov();
          Serial.println(t);
          if(t!=2){
             break;
           }
         
          analogWrite(j,i);
          delay(e);
          if(i==k){
            for(i=k;i>=0;i--){
              prov();
              Serial.println(t);
              if(t!=2){
                break;
              }
              analogWrite(j,i);
              delay(e);
            }
          }
        }
      }
      if(t==3){
        prov();
        Serial.println(t);
        analogWrite(j,k);
        delay(e);
        digitalWrite(j,0);
        delay(e);
      }
      if(t==4){
        prov();
        Serial.println(t);
        analogWrite(j,100);
      }
      if(t==5){
        prov();
        Serial.println(t);
        analogWrite(j,170);
      }
      if(t==6){
        prov();
        Serial.println(t);
        analogWrite(j,255);
      }
    if(t==7){
      prov();
        Serial.println(t);
        analogWrite(j,k);
    }
    }
     
  13. Asper Daffy

    Asper Daffy Иксперд

    Чёта ржу
     
    DetSimen и parovoZZ нравится это.
  14. Avage

    Avage Нерд

    А не сам будильник нужно включить сразу после включения самой ардуино тк millis работает сразу после включения arduino
    Подскажите как это исправить?