|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
T Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

49D.- Leer pulsadores en Bus I2C. Encender LED. Adaptador a Bus I2C, el PCF8574.

- En el tutorial anterior vimos como con el adaptador de bus I2C PCF8574 podemos encender 8 LED.

- Ahora vamos a utilizar el PCF8574 para leer el estado de tres pulsadores.

- La ventaja que tiene el Bus I2C es que con solamente dos cables de datos (y dos de alimentación) podemos enviar muchas señales tanto de entrada como de salida.

- Por ejemplo supongamos que tenemos tres módulos PDF8574, con solo los 4 cables ponemos controlar 32 elementos, pulsadores, LED,... Cada módulo tendrá una dirección configurada mediante los tres puentes amarillos.

______________________________________________________
- Módulo conversor de 8 bits a I2C.

- Tarjeta adaptadoras de 8 conexiones a I2C que contiene al chip PCF8574. Esta tarjeta tiene un precio menor a 2 € y es la opción preferida.

- Tiene 8 terminales amarillos (P0 ... P7) para las conexiones de entrada/salida. Dos conexiones de salida SDA y SCL, además de la alimentación Vcc y Gnd.

______________________________________________________
- Consultar la dirección I2C de la tarjeta.

- Además tiene tres puentes para establecer su dirección I2C, ya que los dispositivos que se conectan a este bus deben tener una dirección propia y que no coincida con la de otro dispositivo del bus.

- Lo más conveniente es conocer la dirección que tiene, para ello conectamos esta tarjeta al Arduino: Vcc, Gnd, SDA y SCL [Por ahora no es necesario conectar el teclado]

- Y cargamos este programa. Ponemos el Serial Monitor a 115200. Consultamos el Serial Monitor. Nos indicará la dirección que tiene actualmente configurada la tarjeta.

Código para ver direcciones I2C
#include <Wire.h>

void setup() {
  Serial.begin (115200);

  // Leonardo: wait for serial port to connect
  while (!Serial)
    {
    }

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
 
  Wire.begin();
  for (byte i = 1; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}

- En este caso la dirección que tiene la tarjeta I2C es 0x38.

 

- Si cambias los puentes y reinicias el Serial Monitor, verás que cambia la dirección.

______________________________________________________
- Conexión del módulo conversor de 8 bits a I2C a los 3 pulsadores y al Arduino.

- Podemos tomar las conexiones del Bus I2C (SCL y SDA) de arriba o de abajo, según indico en la imagen. El código funcionará igual.

- No le he puesto resistencia limitadora a los LED, si quieres puedes poner una común. No se suele averiar el Arduino a pesar de estar un tiempo funcionando sin la resistencia limitadora, pero siempre es conveniente ponerla.

- Observa que con solo dos cables SDA y SCL se controla 3 pulsadores. Con un solo módulo PCF8574 podríamos poner 8 pulsadores. En este caso los pulsadores están en P0, P1 y P2.

______________________________________________________
- Código para el Arduino.

Código para las aplicación de los pulsadores.
#include <Wire.h>
#define direccion_PFC8574 0x38

int LED2 = 2;
int LED3 = 3;
int LED4 = 4;

void setup(){
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);

Wire.begin();
Serial.begin(9600);
}

void loop() {
byte cual;
cual = Leer(direccion_PFC8574);

if(bitRead(cual,0))
digitalWrite(LED2, LOW);
else
digitalWrite(LED2, HIGH);

if(bitRead(cual,1))
digitalWrite(LED3, LOW);
else
digitalWrite(LED3, HIGH); 

if(bitRead(cual,2))
digitalWrite(LED4, LOW);
else
digitalWrite(LED4, HIGH);

delay(100);
}

byte Leer(int direccion) {
byte LeeDato = 0xff;
Wire.requestFrom(direccion,1);
if(Wire.available()){
LeeDato = Wire.read();
}
return LeeDato;
}

______________________________________________________
- Comentarios.

- Observa que solo necesita la librería Wire, que viene por defecto en el IDE del Arduino, es la que utiliza I2C.

- La dirección de este módulo I2C es 0x38, está indicada en el código.

- A modo de resumen indico la manera de Leer y Escribir en el Bus I2C

Leer - Escribir
#include <Wire.h>
#define direccion_PFC8574 0x38

Escribir(direccion_PFC8574, 0xff);

void Escribir(int direccion, byte dato) {
Wire.beginTransmission(direccion);
Wire.write(dato);
Wire.endTransmission();
delay(5);
}

byte Leer(int direccion) {
byte LeeDato = 0xff;
Wire.requestFrom(direccion,1);
if(Wire.available()){
LeeDato = Wire.read();
return LeeDato;
}

- Aclaraciones.

Si queremos ver cómo evoluciona el dato leído según el pulsador, escribimos:

byte cual;
cual = Leer(direccion_PFC8574);
Serial.println(cual);

La variable cual es un byte de la forma 00000010

pero el Serial.println la muestra en decimal, en este caso sería el 2.

Si por alguna razón quisieramos convertir un byte, cual en número entero pondríamos:

int entero = (int) cual;

Si quisiéramos obtener el inverso de cual, es decir tenemos 00000010 y queremos 11111101, pondríamos

cual = ~cual;

______________________________________________________
- Propuesta.

- Utiliza más pulsadores y LED.

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información