05-01-2020, 14:31
Witam. O arduino dowiedziałem się 3 tygodnie temu i od tamtego momentu uczę się programować. Do tamtego momentu nie miałem styczności z jakimkolwiek językiem programowania. Małymi kroczkami postanowiłem zbudować system alarmowy. Wzorując się na tym poradniku https://forbot.pl/blog/kurs-arduino-ii-k...wy-id18341. Pojawił się pierwszy problem.
kod:
#include <Keypad.h>
int diodaZielona = 13;
int diodaZulta = 12;
int diodaCzerwona = 11;
const byte ROWS = 4;
const byte COLS = 4;
byte rowPins[ROWS] = {9, 8, 7 ,6 };
byte colPins[COLS] = {5, 4, 3, 2};
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
int stanAlarmu = 1;
void setup() {
pinMode(diodaZielona, OUTPUT);
pinMode(diodaZulta, OUTPUT);
pinMode(diodaCzerwona, OUTPUT);
}
void loop() {
char klawisz = 0;
switch(stanAlarmu) { //Wykonywanie akcji odpowiedniej dla danego stanu
case 1:
digitalWrite(diodaZielona, HIGH);
digitalWrite(diodaZulta, LOW);
digitalWrite(diodaCzerwona, LOW);
klawisz = klawiatura.getKey();
if (klawisz == 'A') { // aktywacja alarmu
stanAlarmu = 2; // przechodzi do case 2
}
break;
case 2:
digitalWrite(diodaZielona, LOW);
digitalWrite(diodaZulta, HIGH);
digitalWrite(diodaCzerwona, LOW);
if (klawisz == 'B') { // dezaktywacja alarmu
stanAlarmu = 1; // przechodzi do case 1
}
break;
}
}
Naciskając przycisk A alarm przechodzi do case2. Dodając funkcję if (klawisz == 'B') { stanAlarmu = 1; } w case2 chciałem aby po naciśnięciu przycisku B alarm się dezaktywował i przeszedł do case1, niestety tak się nie dzieje.
O ile po naciśnięciu przycisku A alarm rzeczywiście przechodzi do case2 ( świeci żółta dioda), tak po naciśnięciu B nic się nie dzieje. Żółta dioda nadal się świeci, a powinna świecić się zielona.
Proszę o pomoc w rozwiązaniu tego problemu.
kod:
#include <Keypad.h>
int diodaZielona = 13;
int diodaZulta = 12;
int diodaCzerwona = 11;
const byte ROWS = 4;
const byte COLS = 4;
byte rowPins[ROWS] = {9, 8, 7 ,6 };
byte colPins[COLS] = {5, 4, 3, 2};
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
int stanAlarmu = 1;
void setup() {
pinMode(diodaZielona, OUTPUT);
pinMode(diodaZulta, OUTPUT);
pinMode(diodaCzerwona, OUTPUT);
}
void loop() {
char klawisz = 0;
switch(stanAlarmu) { //Wykonywanie akcji odpowiedniej dla danego stanu
case 1:
digitalWrite(diodaZielona, HIGH);
digitalWrite(diodaZulta, LOW);
digitalWrite(diodaCzerwona, LOW);
klawisz = klawiatura.getKey();
if (klawisz == 'A') { // aktywacja alarmu
stanAlarmu = 2; // przechodzi do case 2
}
break;
case 2:
digitalWrite(diodaZielona, LOW);
digitalWrite(diodaZulta, HIGH);
digitalWrite(diodaCzerwona, LOW);
if (klawisz == 'B') { // dezaktywacja alarmu
stanAlarmu = 1; // przechodzi do case 1
}
break;
}
}
Naciskając przycisk A alarm przechodzi do case2. Dodając funkcję if (klawisz == 'B') { stanAlarmu = 1; } w case2 chciałem aby po naciśnięciu przycisku B alarm się dezaktywował i przeszedł do case1, niestety tak się nie dzieje.
O ile po naciśnięciu przycisku A alarm rzeczywiście przechodzi do case2 ( świeci żółta dioda), tak po naciśnięciu B nic się nie dzieje. Żółta dioda nadal się świeci, a powinna świecić się zielona.
Proszę o pomoc w rozwiązaniu tego problemu.