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);
}