• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Funkcja IF i operatory logiczne
#1
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

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;

}
 
Odpowiedź
  


Wiadomości w tym wątku
Funkcja IF i operatory logiczne - przez Arpl - 13-01-2022, 20:18
RE: Funkcja IF i operatory logiczne - przez Arpl - 14-01-2022, 21:50
RE: Funkcja IF i operatory logiczne - przez kaczakat - 14-01-2022, 23:57
RE: Funkcja IF i operatory logiczne - przez Arpl - 16-01-2022, 21:46
RE: Funkcja IF i operatory logiczne - przez Arpl - 17-01-2022, 21:24

Skocz do:


Przeglądający: 1 gości