05-03-2018, 20:53
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;
}