Bonjour,
Je voudrais lire les ports d'un PCF8574 après l'activation d’une interruption reçue par l’Arduino.
Sans utiliser d’interruption, pas de problème avec ce code pour lire la valeur du registre :
Wire.requestFrom(addresse_PCF,1);
if(Wire.available())
data =Wire.read();
data <<4 ;
Serial.println(data,BIN);
Par contre dès que je passe le port du PCF8574 à HIGH en branchant une résistance de pull up, je n’arrive plus à lire les valeurs du registre : Quoi qu’il se passe, sur les ports (je presse et relâche des boutons) , la valeur lue est 11111111
Il est écrit dans sa datasheet que ce circuit est seulement "quasi" birectionnel.
Le terme "quasi" est important.
Il existe des bibliothèques pour gérer ce produit mais cela relève plutôt de l'acharnement térapeutique.
Il est préférable d'oublier ce composant antedilivien et de passer à des composants modernes bien plus simples à utiliser comme le MCP23017 ou sa version SPI MCP23S17.
Bonjour,
Ce que je veux faire : lire l'état de 4 boutons poussoirs chacun connecté sur un pin du PCF8574.
Je voudrais utiliser le mécanisme d'interruption du PCF8574 : en cas de modification d'une de ses entrées (si un bouton est pressé), il passe sa sortie dédiées aux interruptions à LOW (si j'ai bien compris la doc)
Cette sortie est l'entrée d'une carte arduino qui gère les interruption.
Mais je n'arrive plus à avoir l'info de quelle entrée du PCF8574 change d'état dès que j'utilise les interruptions
Mais le code basique ne fonctionne plus dès que je mets un pullup sur la sortie des interruption du PCF8574 comme le préconise la doc
la carte est une Uno
Le schéma arrive d'ici peu avec le code
En attachement le schéma qui fonctionne et la sortie.
Le code :
#include <Wire.h>
byte addresse_PCF = 0x39;
byte data ;
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
Wire.requestFrom(addresse_PCF,1);
if(Wire.available()){
data =Wire.read();
data <<4 ;
Serial.println(data,BIN);
delay(2000);
}
}
pour faire le tour de la question, il y a une 3ème méthode, c'est faire le pooling du fil d'interruption sans avoir recours à une interruption de l'arduino