26-04-2020, 19:19
Kod:
#include<PCF8574.h>
//#include <AccelStepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
PCF8574 ex1;
PCF8574 ex2;
void setup()
{
lcd.init();
lcd.clear();
lcd.backlight();
ex1.begin(0x3F); //IC1
ex1.pinMode(0, INPUT);
ex1.pinMode(1, INPUT);
ex1.pinMode(2, INPUT);
ex1.pinMode(3, INPUT);
ex1.pinMode(4, INPUT);
ex1.pinMode(5, INPUT);
ex1.pinMode(6, INPUT);
ex1.pinMode(7, INPUT);
ex2.begin(0x20); //IC2
ex2.pinMode(0, OUTPUT); //Led1
ex2.pinMode(1, OUTPUT); //Led2
ex2.pinMode(2, INPUT); //SW1
ex2.pinMode(3, INPUT); //SW2
ex2.pinMode(4, INPUT);
ex2.pinMode(5, INPUT);
ex2.pinMode(6, INPUT);
ex2.pinMode(7, INPUT);
}
void loop()
{
if(ex2.digitalRead(2),LOW)
//if(ex2.digitalRead(2),HIGH) //test1
{
lcd.setCursor (1, 0);
lcd.print("SW1 active");
ex2.digitalWrite(0,HIGH);
}
else
{
lcd.setCursor (1, 0);
lcd.print("SW1 no active");
ex2.digitalWrite(0,LOW);
}
if(ex2.digitalRead(3),LOW)
//if(ex2.digitalRead(3),HIGH) //test1
{
lcd.setCursor (1, 1);
lcd.print("SW2 active");
ex2.digitalWrite(1,HIGH);
}
else
{
lcd.setCursor (1, 1);
lcd.print("SW2 no active");
ex2.digitalWrite(1,LOW);
}
//ex2.blink(0,5,1000); //test2
//ex2.blink(1,5,500); //test2
}
Witam wszystkim
Postanowiłem skorzystać / zapoznać się z bliska z ekspanderem PCF8574, zabrakło pinów w UNO
Przedstawiam szkic w wersji uproszczonej i schemat, w pełni oddają problem:
Założenia układu:
- SW1 i SW2 spoczynkowo (zwarte styki 2 i 1) podaje +5V na P2 i P3 IC2(EX2),
- po naciśnięciu SW1 lub SW2 ma zostać podane zasilanie odpowiednia na Led1 lub Led2,
oraz zmienić komunikat na LCD,
- nie istnieje fizyczna możliwość naciśnięcia równocześnie SW1 i SW2,
(są to wyłączniki krańcowe uruchamiane jedną dźwignią) ,
Napotkany problem:
po wgraniu załączonego kodu, układ nie reaguje na zmianę stanu SW1 lub SW2;
Led1 i Led2 wygaszone,
LCD wyświetla "SW1 no active" i "SW2 no active".
Co próbowałem wykonać:
- dodawałem w kodzie podciągnięcia na wejściach ekspandera,
- próbowałem z R6 i R5 = 22k,
- podmieniałem IC,
w/w nie przyniosły zamierzonego efektu,
- wykonałem test1 (linia 40 i 54),
przy test1; Led1 i Led2 świecą, LCD "SW1 active" i "SW2 active",
- wykonałem test2 (linia 66 i 67),
przy test2 Led1 i Led2 mrugają prawidłowo.
Dodatkowe informacje:
- IC2 (IC2 ex1 schemat) to PCF8574N natomiast nie widoczny na schemacie IC1 (ex1) tp PCF8574A,
nie ma pomyłki w adresowaniu
- jeżeli wymusiłem załączenie Led1 i / lub Led2 natężenie w obwodzie każdej było I=3mA
Gdzieś popełniam błąd, ale jestem już w pętli - brak pomysłu
Proszę o podpowiedź gdzie popełniam błąd.
Pzdr