Wpis z mikrobloga

Elo Mircy, ostatnio wróciłem do #arduino i chciałem sobie poćwiczyć. Założenia pierwszego programu miały być takie: chwilowe przyciśnięcie tact switcha powoduje zaświecenie diód w pętli, a ponowne jego wciśnięcie powoduje ich wyłączenie. Co prawda po wciśnięciu switcha diody się zapalają jedna po drugiej, ale po powtórnym przesterowaniu nic się nie dzieje. Oto kod:

bool przycisk=0;

void setup() {
// put your setup code here, to run once:
for(int i=1;i<=4;i++)
{
pinMode(i,OUTPUT);
}
pinMode(5,INPUT_PULLUP);
}

void loop()
{
// put your main code here, to run repeatedly:
if(digitalRead(5)==LOW)
{
przycisk=!przycisk;
delay(500);
}
else if(digitalRead(5)==LOW && przycisk!=0)
{
przycisk=0;
delay(500);
}
while(przycisk!=0)
{
for(int i=1;i<=4;i++)
{
if(i==2 || i==3 || i==4)
{
digitalWrite(i,HIGH);
digitalWrite(i-1,LOW);
delay(1000);
}
else
{
digitalWrite(1,HIGH);
digitalWrite(4,LOW);
delay(1000);
}
}
}
}

Może mi ktoś wyjaśnić w którym miejscu zrobiłem błąd? Będę wdzięczny. #programowanie #informatyka
  • 3
@EgzeQTroll: łooo paniee :)

Po pierwsze - warunki w if jest zawsze prawdziwy, kiedy warunek w else if jest prawdziwy, więc do else ifa nigdy nie wejdzie.

Po drugie - w pętli while(przycisk != 0) nigdy nie zmieniasz zmiennej przycisk, więc jak raz tam wejdziesz to kręcisz się tam w nieskończoność.

Po trzecie - chyba nie bardzo rozumiesz jak program się ma wykonać:) Narysuj sobię tabelkę:
nr_kroku; nr linijki; wartość zmiennej