Ребят не судите строго если мой код не аккуратно написан Объясняю В терминале почему-то 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); } }
Я честно попытался проследить, но нереал… когда встретил ещё и goto... Назовите переменные более понятно, согласно тому, чего они делают… и очень много их… разбейте ещё на функции. А что должно быть и при каких условиях? Когда на ИК приходит какой-то сигнал?
Когда я нажимаю на кнопки в функции budil кроме bud не чего не меняется и z выдает тот который был указан при его объявлении
Тут ошибок больше, чем строк. Для начала поставь breakэи в switch который в loop. Потом будем дальше смотреть
учитесь структурировать код. использовать функции и циклы, избегать переходов по метке. А так, как пишете вы - ничего длиннее блинка писать не следует
Доделал и все робит Код (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); } }
А не сам будильник нужно включить сразу после включения самой ардуино тк millis работает сразу после включения arduino Подскажите как это исправить?