Hola a todos, tengo un problema con la comunicacion I2C al momento de enviar datos de dos canales analógicos
procedentes de los ARDUINOS UNO al MEGA el cual se encargara de mandarlos por el puerto serie a la pc.
Consiste en que la funcion Wire.read() solo lee 7 bits, y las lecturas que realizo con los arduinos UNO son de 10 bits (la resolucion del adc) entonces he tenido que emplear la funcion map para convertir esos valores entre 0 y 127, pero el problema es que pierdo resolución en las medidas. Alguien sabra como puede mandar un valor entre 0 y 1023 utilizando la libreria Wire sin tener que utilizar la funcion map para la conversión ?
las lecturas que realizo con los arduinos UNO son de 10 bits (la resolucion del adc) entonces he tenido que emplear la funcion map para convertir esos valores entre 0 y 127
Porque convertir usando map? Esa es una mala idea desde todo punto de vista.
Una cosa es lo que I2C envia con cada byte y otra es que puede enviar muchos bytes y entonces no pierdes resolución, pero no lo sabrías.
El dato de 10 bits de un ADC se descompone en dos bytes, un LSB (byte menos significativo) y un MSB (byte mas significativo).
Asi que olvida el map.. esa solución no va por buen camino.
supongamos que valor sea un unsigned int
usigned int valor;
// luego en el loop
valor = analogRead(A0); // olvida cambiarlo a 5v y todo eso. Solo transmites el valor
byte lsb = valor & 0xff; // esto enmascara el byte menos significativo o LSB
byte msb=(valor>>8) & 0xff; // se desplaza 8 bits y luego se hace un AND con la mascara 0xFF y te queda el MSB