Obsługa wyjścia przez dwa porty

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
omnixcrs
Młodszy majsterkowicz
Posty: 14
Rejestracja: 24 paź 2015, 18:28

Obsługa wyjścia przez dwa porty

Post autor: omnixcrs » 9 kwie 2018, 15:07

Panowie i Panie, proszę o pomoc z kodem programu bo już nie wiem co źle robię.
Dysponuję płytką arduino yun + ekspander PCF8574, komunikacja IC2 - tu wszystko działa ok.
i teraz tak:
Mam podpiętego leda pod wyjście ekspandera. Napisałem kod do zaplalnia tego leda przy użyciu przycisku zwierającego do masy w taki sposób że jak nacisnę raz to zapalam leda, a jak nacisnę drugi raz to go gaszę i tu wszyto również działa bez problemu. Chciałem jednak dodać do tego coś takiego że po pojawieniu się stanu HIGH na wejściu nr 13 Led się zapala, a po zniknięciu tego stanu gasi. i napisałem drugi kod niestety coś chyba schrzaniłem bo po podaniu HIGH na 13 led się zapala ale po zniknięciu HIGH z 13 nie gaśnie. Rzucie okiem czy coś robię nie tak. z góry dzięki:

Kod pierwszy bez obsługi portu 13, który działa:

Kod: Zaznacz cały

reading = expander3.digitalRead(4);

  if (reading == LOW && previous == HIGH && millis() - time > debounce) 
  {
     if (state == LOW)
      state = HIGH;
    else
      state = LOW;

    time = millis();    
  }

  
   expander1.digitalWrite(0, state);
    previous = reading;
drugi kod:

Kod: Zaznacz cały

reading = expander3.digitalRead(4);

  if (digitalRead(13) == HIGH || reading == LOW && previous == HIGH && millis() - time > debounce) 
  {
     if (state == LOW || digitalRead(13) == HIGH)
      state = HIGH;
    else
      state = LOW;

    time = millis();    
  }

  
   expander1.digitalWrite(0, state);
    previous = reading;
[/code]

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


kaczakat
Młodszy majsterkowicz
Posty: 26
Rejestracja: 8 wrz 2017, 15:01

Re: Obsługa wyjścia przez dwa porty

Post autor: kaczakat » 11 kwie 2018, 00:23

Nie ustawi nigdy w tym ifie state=LOW, powinieneś to rozbić.

Kod: Zaznacz cały

static byte sterowaniez13=0; //dodaj ją jako globalną zmienną/flagę w szkicu przed setup() lub static w loop
if (digitalRead(13) == HIGH || reading == LOW && previous == HIGH && millis() - time > debounce) 
 {
    if (state == LOW || digitalRead(13) == HIGH)
     state = HIGH;

    sterowaniez13=1;
   time = millis();    
 }

if(sterowaniez13||digitalRead(13) == LOW) //było sterowanie z pinu 13, ale zostało zmienione na 0 to zmien state na 0
{
sterowaniez13=0; 
state = LOW; 
} 
  expander1.digitalWrite(0, state);
   previous = reading;
ODPOWIEDZ

Strony partnerskie: