• 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
Złe działanie w pętli
#1
Panowie możecie okiem rzucić na poniższy kod coś namieszałem i za każdym razem kiedy podaje stan niski na ekspader3- wejście 4 to oprócz tego że w stan wysoki ustawia mi się ekspander1- wyjście nr 0 (czyli prawidłowo) to wyjście nr 1 także ustawia się w stan wysoki. (pomimo że na ekspader3- wejscie 5 stanu niskiego oczywiście nie ma) 


Kod:
#include <Wire.h>
#include "PCF8574.h"

PCF8574 expander1;
PCF8574 expander2;
PCF8574 expander3;
PCF8574 expander4;


int state = LOW;      // the current state of the output pin
int reading1;           // the current reading from the input pin
int reading2;
int previous = HIGH;    // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0;         // the last time the output pin was toggled
long debounce = 200;   // the debounce time, increase if the output flickers

void setup()
{
 
expander1.begin(0x38);
expander2.begin(0x3C);
expander3.begin(0x3E);
expander4.begin(0x3F);

expander1.pinMode(0, OUTPUT);
expander1.pinMode(1, OUTPUT);
expander1.pinMode(2, OUTPUT);
expander1.pinMode(3, OUTPUT);
expander1.pinMode(4, OUTPUT);
expander1.pinMode(5, OUTPUT);
expander1.pinMode(6, OUTPUT);
expander1.pinMode(7, OUTPUT);

expander2.pinMode(0, OUTPUT);
expander2.pinMode(1, OUTPUT);
expander2.pinMode(2, OUTPUT);
expander2.pinMode(3, OUTPUT);
expander2.pinMode(4, OUTPUT);
expander2.pinMode(5, OUTPUT);
expander2.pinMode(6, OUTPUT);
expander2.pinMode(7, OUTPUT);

expander3.pinMode(0, OUTPUT);
expander3.pinMode(1, OUTPUT);
expander3.pinMode(2, OUTPUT);
expander3.pinMode(3, OUTPUT);
expander3.pinMode(4, INPUT);
expander3.pullUp(4);
expander3.pinMode(5, INPUT);
expander3.pullUp(5);

}

void loop()
{
 reading1 = expander3.digitalRead(4);

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

   time = millis();    
 }
  expander1.digitalWrite(0, state);
   previous = reading1;

   

 reading2 = expander3.digitalRead(5);

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

   time = millis();    
 }
  expander1.digitalWrite(1, state);
   previous = reading2;
 }
 
Odpowiedź
#2
Zmienną state ustawiasz w obu ifach, a reakcją na nie jest zmiana stanu obu wyjść bo one są poza ifami. Albo dla każdego ifa/wejścia zrób osobną zmienną state0, state1, albo zmianę stanu wyjścia rób wewnątrz if.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości