Witam wszystkich
Pisząc i ucząc się programować natrafiłem na problem z prawidłowym działaniem programu mimo że kompiluje się poprawnie. Mianowicie w ostatniej funkcji IF (zgaś diody po naciśnięciu przycisków) nie działa tak jak należy i nie bardzo wiem czemu nie działa. Proszę o pomoc w ustaleniu co zrobiłem źle
Funkcja powinna działać w ten sposób:
IF ((naciśniętyKlawisz1 lub (OR) naciśniętyKlawisz2) i (AND) (świeciLed1 lub (OR) świeciLed2))
zgaś Led 1 oraz Led2
Pisząc i ucząc się programować natrafiłem na problem z prawidłowym działaniem programu mimo że kompiluje się poprawnie. Mianowicie w ostatniej funkcji IF (zgaś diody po naciśnięciu przycisków) nie działa tak jak należy i nie bardzo wiem czemu nie działa. Proszę o pomoc w ustaleniu co zrobiłem źle
Funkcja powinna działać w ten sposób:
IF ((naciśniętyKlawisz1 lub (OR) naciśniętyKlawisz2) i (AND) (świeciLed1 lub (OR) świeciLed2))
zgaś Led 1 oraz Led2
Kod:
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 12;
const int ledPin2 = 13;
unsigned long aktualnyCzas = 0;
unsigned long czasDrgania = 0;
unsigned long czasLED1 = 0;
unsigned long czasLED2 = 0;
int delayTime = 15;
void setup() {
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode (buttonPin1, INPUT_PULLUP);
pinMode (buttonPin2, INPUT_PULLUP);
}
void loop() {
aktualnyCzas = millis();
// zapal LED1
if (isButtonPressed(buttonPin1) && (digitalRead(ledPin2) == LOW)) { // jak przycisk-1 zostal wcisniety i LED2 nie swieci to zapal LED1
digitalWrite(12, HIGH);
czasLED1 = millis();
}
else if (aktualnyCzas - czasLED1 >= 8000UL){
czasLED1 = aktualnyCzas;
digitalWrite(12, LOW);
}
// zapal LED2
if (isButtonPressed(buttonPin2) && (digitalRead(ledPin1) == LOW)){ // jak przycisk-1 zostal wcisniety i LED2 nie swieci to zapal LED2
digitalWrite(13, HIGH);
czasLED2 = millis();
}
else if (aktualnyCzas - czasLED2 >= 8000UL){
czasLED2 = aktualnyCzas;
digitalWrite(13, LOW);
}
// zgas LEDy po nacisnieciu przyciskow
if (((isButtonPressed(buttonPin1)) || (isButtonPressed(buttonPin2))) && ((digitalRead(ledPin1) == HIGH) || (digitalRead(ledPin2) == HIGH))) {
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
}
bool isButtonPressed (int button) { // likwidacja drgania stykow dla wszystkich przycisków
if (digitalRead(button) == LOW) {
czasDrgania = millis();
if (aktualnyCzas - czasDrgania >=15UL){
czasDrgania = aktualnyCzas;
}
if (digitalRead(button) == LOW) {
return true;
}
}
return false;
}