Witam serdecznie
Ostatnio postanowiłem uruchomić jeden z ekspanderów portów IO, konkretnie
PCF8574
I napotkałem ciekawy problem
4 pierwsze piny mam zdefiniowane jako wejścia pozostałe cztery jako wyjścia
o ile co do wyjść nie mam zastrzeżeń, działają prawidłowo o tyle wejścia pomimo że panuje na nich stan niski są odczytywane jako logiczne "1"
Przez stan niski mam na myśli ok 0,6V względem masy
Sygnał na wejścia podawany jest przez optoizolatory PC817
obsługa wejść i wyjść obrabiana jest teraz w dwóch funkcjach, w sumie z racji problemów z odczytem wejść, raczej testowych...
co ciekawe podpięcie sygnałów pod piny na płytce arduino i zmiana w programie tylko miejsca odczytu wejść (z expandera na płytę) i wszystko działa ok...
Jakieś pomysły?
Ostatnio postanowiłem uruchomić jeden z ekspanderów portów IO, konkretnie
PCF8574
I napotkałem ciekawy problem
4 pierwsze piny mam zdefiniowane jako wejścia pozostałe cztery jako wyjścia
,// expander I/O
Serial.println(" PCF8574...");
flap.pinMode(P0, OUTPUT, LOW);
flap.pinMode(P1, OUTPUT, LOW);
flap.pinMode(P2, OUTPUT, LOW);
flap.pinMode(P3, OUTPUT, LOW);
flap.pinMode(P4, INPUT_PULLUP);
flap.pinMode(P5, INPUT_PULLUP);
flap.pinMode(P6, INPUT_PULLUP);
flap.pinMode(P7, INPUT_PULLUP);
flap.begin();
Serial.println("Done ;-)"); o ile co do wyjść nie mam zastrzeżeń, działają prawidłowo o tyle wejścia pomimo że panuje na nich stan niski są odczytywane jako logiczne "1"
Przez stan niski mam na myśli ok 0,6V względem masy
Sygnał na wejścia podawany jest przez optoizolatory PC817
obsługa wejść i wyjść obrabiana jest teraz w dwóch funkcjach, w sumie z racji problemów z odczytem wejść, raczej testowych...
void wyrzucenie_skrzyni()
{
if ((flap.digitalRead(P0) == 1 || flap.digitalRead(P1) == 1) && flap_ruch == 1)
{
// czekamy na dotarcie flapa na pozycję
if ((digitalRead(6) == 0 && flap.digitalRead(P1) == 0) ||(digitalRead(7) == 0 && flap.digitalRead(P0) == 0))
{
flap.digitalWrite(P0, LOW);
flap.digitalWrite(P1, LOW);
flap_ruch = 0;
flap_time = 0;
}
}
else
{
//flap nie ma zgody na ruch, ale na sterowaniu cos jest..
flap.digitalWrite(P0, LOW);
flap.digitalWrite(P1, LOW);
flap_ruch = 0;
}
if (digitalRead(6) == 1 && digitalRead(7) == 1 && flap.digitalRead(P0) == 0 && flap.digitalRead(P1) == 0)
{
Serial.println("Brak pozycji Flapsa...");
Serial.println("a wiec prewencyjnie flaps w dol...");
flap.digitalWrite(P1, HIGH);
flap_ruch = 1;
}
}
if (millis() - time_stamp > 1000)
{
time_stamp = millis();
uptime();
if (flap_time >= 3)
{
if (digitalRead(6) == 0 && flap.digitalRead(P0) == 0) //flap w górze, więc opusc
{
Serial.println("Opuszczam flapsa...");
flap.digitalWrite(P1, HIGH);
flap_ruch = 1;
}
if (digitalRead(7) == 0 && flap.digitalRead(P1) == 0) //flap na dole, wiec podnies
{
Serial.println("Podnoszę flapsa...");
flap.digitalWrite(P0, HIGH);
flap_ruch = 1;
}
} else flap_time++;
}co ciekawe podpięcie sygnałów pod piny na płytce arduino i zmiana w programie tylko miejsca odczytu wejść (z expandera na płytę) i wszystko działa ok...
Jakieś pomysły?