programa-arduino.ino
Presento aquí el código en Arduino para su fácil acceso
//El número de pin en que esperaremos leer los valores de voltaje
#define pin_ADC_A 4
#define pin_ADC_B 15
//Usaremos short que es una estructura de 16 bits
int lectura_ADC_A = 0b0;
int lectura_ADC_B = 0b0;
int resta_ADC = 0b0;
//Estas serán las variables que enviaremos por medio del serial
byte num_codificado_primero = 0b0;
byte num_codificado_segundo = 0b0;
void setup() {
Serial.begin(921600);
}
void loop() {
//Inicializamos los valores de nuestros bytes
//Podemos poner el etiquetado del primero byte de una vez
num_codificado_primero = 0b10000000;
num_codificado_segundo = 0b00000000;
lectura_ADC_A = analogRead(pin_ADC_A);
lectura_ADC_B = analogRead(pin_ADC_B);
resta_ADC = lectura_ADC_A - lectura_ADC_B;
//Recordemos que resta_ADC es un número de 16 bits
//Nosotros trabajamos con dos bytes separados
//Por esto tenemos que recorrer el entero 8 bits
//Así tenemos acceso a la cola de desbordamiento 1111 (ó 0000)
//Aquí estamos sumamos el segundo bit, donde va el signo
//Por eso aplicamos una máscara lógica & 0b0100
num_codificado_primero += ((resta_ADC >> 8) & 0b01000000);
num_codificado_segundo += ((resta_ADC >> 8) & 0b01000000);
//Aplicando otra máscara lógica sumamos los 6 bits
//Tenemos que recorrer 6 lugares para sumar al primer byte
// ssss_xxxx_xxxx_xxxx -> ssss_xxxx_xxxx_xxxx
// isxx_xxxx -> is_xxxx_xx
num_codificado_primero += ((resta_ADC >> 6) & 0b00111111);
//Tenemos que recorrer 0 lugares para sumar al primer byte
// ssss_xxxx_xxxx_xxxx -> ssss_xxxx_xxyy_yyyy
// isxx_xxxx -> isxx_xxxx
num_codificado_segundo += (resta_ADC & 0b00111111);
Serial.write(num_codificado_primero);
Serial.write(num_codificado_segundo);
}