Entradas analógicas múltiples en el pin A0 (ESP nodemcu) con PCF8574

0

Estoy intentando leer varios valores analógicos en una entrada analógica en el nodemcu.

Como sensores estoy usando dos potenciómetros que están conectados a GND a través de un expansor de E / S de 8 bits PCF8574.

Con el código que se muestra a continuación, obtengo para ambos sensores el mismo valor. Por lo tanto, si cambio el valor de Poti 1, el valor de Poti 2 (que se muestra en el monitor de serie) también cambiará.

¿Qué estoy haciendo mal? Cualquier ayuda es apreciada.

#include<Wire.h>#defineanalogPinA0voidsetup(){Serial.begin(9600);Wire.begin();}voidloop(){measurePotis();delay(1000);}//MeasureSoilMoisturevoidmeasurePotis(){Wire.beginTransmission(0x027);Wire.write(0b01111111);Wire.endTransmission();intsensorValue;sensorValue=analogRead(analogPin);Serial.println("Poti 1: "+String(sensorValue));

  delay(1000);

  Wire.beginTransmission(0x027);
  Wire.write(0b11101111);
  Wire.endTransmission();

  sensorValue = analogRead(analogPin);
  Serial.println("Water Poti 2: "+String(sensorValue));
}
    
pregunta Lukas

2 respuestas

2

Como se muestra claramente en la hoja de datos (ver figura 2), el PCF8574 un expansor de puerto digital . Como ha descubierto, este dispositivo no tiene capacidad para cambiar las señales analógicas.

Necesitará un conmutador o multiplexor analógico para este propósito.

    
respondido por el B Pete
0

¡Creo que has mezclado MS bit con LS bit!

Cuando envías un byte al expansor de IO, el bit MS del byte que envías corresponde a P7 y no a P0 como probablemente piensas.

Entonces, cuando envía 0b01111111, establece P7 en LOW y todos los demás en HIGH y cuando envía 0b11101111, configura P4 en LOW y todos los demás en HIGH.

En su lugar, debe usar 0b11111110 y 0b11110111 para el potenciómetro 1 y 2, respectivamente.

    
respondido por el nickagian

Lea otras preguntas en las etiquetas