Prove di lettura trasmissione con PCF8574

Una buona giornata ragazzi,

sono qui per chiedervi cortesemente un aiuto,

spiego il mio problema, e cosa vorrei fare.

allego schema ed il programma,

con questo programma riesco ad leggere la pressione del pulsante (solo la prima volta) che accende un led,

poi ovviamente i bait cambiano di stato ed non riesco più a leggere il pulsante,

domanda:

e possibile leggere solo i primi 4 bait?

se si cortesemente mi potrete dare qualche indicazione sul come fare.

Mille grazie a chi mi può aiutare.

#include "Arduino.h"
#include <Wire.h>
#define PCF8574 0x20

const byte led_1 = 0xEF;
const byte led_2 = 0xDF;
const byte led_3 = 0xBF;
const byte led_4 = 0x7F;

const byte pul_1 = 0xFE;
const byte pul_2 = 0xFD;
const byte pul_3 = 0xFB;
const byte pul_4 = 0xF7;

byte tasto;
volatile byte counter = 0;
bool rstpcf;
unsigned long oldtasto;

void reset_INT_pcf();
void statotasto();
void leggitasto();

void setup() {
	Wire.begin();
	Serial.begin(9600);

	reset_INT_pcf();
	attachInterrupt(0, statotasto, FALLING);
}

void loop() {
	leggitasto();
	delay(100);
}
void leggitasto() {
	if (counter == 1) {
		if (millis() - oldtasto >= 300) {
			Wire.beginTransmission(PCF8574);
			Wire.requestFrom(PCF8574, 1);
			if (Wire.available())
				tasto = Wire.read();
			rstpcf = true;

			delay(100);
			Serial.print("Tasto usato ");
			Serial.println(tasto, HEX);

			switch (tasto) {
			Serial.println("OK");
		case pul_1:
			Wire.write(led_1);
			break;
		case pul_2:
			Wire.write(led_2);
			break;
		case pul_3:
			Wire.write(led_3);
			break;
		case pul_4:
			Wire.write(led_4);
			break;
			}
			oldtasto = millis();
			Wire.endTransmission();
		}
	} else if (rstpcf == true) {
		counter = 0;
		reset_INT_pcf();
		rstpcf = false;
		Serial.println("OK2");
	}

}
void reset_INT_pcf() {
	Wire.beginTransmission(PCF8574);
	Wire.requestFrom(PCF8574, 1);
	if (Wire.available()) {
		tasto = Wire.read();
		Wire.write(0xFF);
		Wire.endTransmission();
		tasto = 0;
	}
}
void statotasto() {
	counter++;
}type or paste code here

No ma puoi nascondere i 4 bit che non ti servono, fai una AND di bit con 0x0F
tasto=tasto & 0x0F; // azzera i bit da 7,6,5,4

Scusa non ho capito una cosa, ma leggi lo stato dei pulsanti solo se premi un pulsante collegato al pin 0 e gestito da interrupt ??

Ciao nid69ita
Grazie di avermi risposto,
ho fato come mi hai suggerito ed ora funziona, riesco a leggere tutti i pulsanti,
anche se ho dovuto aumentare il delay, perché si impiantava e non capisco il motivo.

Scusa non ho capito una cosa, ma leggi lo stato dei pulsanti solo se premi un pulsante collegato al pin 0 e gestito da interrupt

si leggo i pulsanti con interrupt sul pin INT del PCF
ma se hai altri suggerimenti son ben lieto di seguirli
mille grazie per il tempo che mi dedichi.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.