Wire
Contenido
Descripción
La librería Wire.h le permite comunicarse con dispositivos I2C. Usa dos lines: SDA (línea de datos) y SCL (línea de reloj).
Nota: A partir de Arduino 1.0, la biblioteca hereda de la clase Stream, lo que la hace compatible con otras bibliotecas de lectura/escritura. Debido a esto, send() y receive() han sido reemplazados por read() y write().
Placas aplicables
Arduino | Pin SDA | Pin SCL |
---|---|---|
UNO, Ethernet | A4 | A5 |
MEGA | 20 | 21 |
Leonardo | 2 | 3 |
Debido | 20 | 21 |
Sintaxis
Métodos
- Wirebegin()
- Inicie la libreria Wire y únase al bus I2C como maestro o esclavo. Esto normalmente debería llamarse solo una vez.
- Wire.beginTrasnmission()
- Comience una transmisión al dispositivo esclavo I2C con la dirección dada. Posteriormente, coloque los bytes de cola para la transmisión con la función write() y transmítalos llamando a endTransmission().
- Wire.read()
- Wire.write()
- Wire.send()
- Envía datos de un dispositivo esclavo en respuesta a una solicitud de un maestro, o pone en cola los bytes para la transmisión de un dispositivo maestro a esclavo.
- Wire.end()
Advertencias
Hay versiones de 7 y 8 bits de direcciones I2C. 7 bits identifican el dispositivo, y el octavo bit determina si se está escribiendo o leyendo. La libreria Wire usa direcciones de 7 bits en todo momento. Si tiene una hoja de datos o un código de muestra que usa una dirección de 8 bits, querrá soltar el bit bajo (es decir, desplazar el valor un bit hacia la derecha), obteniendo una dirección entre 0 y 127. Sin embargo, las direcciones de 0 a 7 no se usan porque están reservados, por lo que la primera dirección que se puede usar es 8. Tenga en cuenta que se necesita una resistencia de pull-up al conectar los pines SDA/SCL.
Ejemplo
#include <Wire.h> byte valor = 0 ; void setup () { Wire.begin(); //unirse al bus i2c (dirección opcional para el maestro) } void loop ( ) { Wire.beginTransmission(44); //transmitir al dispositivo N° 44 (0x2c) //la dirección del dispositivo se especifica en la hoja de datos Cableado.write(byte (0x00));// envía un byte de instrucción Wire.write(valor); //envía el valor del potenciómetro Byte Wire.endTransmission(); //deja de transmitir val ++; //incrementa el valor if (valor == 64){ //si se alcanza la posición 64 (max) valor = 0 ; //comienza desde el valor más bajo } delay(500) ; }