Paso 3: Algoritmo para la recepción y transmisión de datos
Para transmitir datos, he escrito dos funciones para llevar a cabo este proceso, son: send_data(int num) y completion_Scan().
He asignado las variables con el código correspondiente a mi mesa para los 2 primeros escenarios llamado derecha e izquierda. Este ejemplo nos centraremos solamente en comunicar que la pelota está en el lado izquierdo o derecho. Cuando se determina la ubicación de la bola, el valor se envía a la función send_data donde el entero se divide en una matriz y los valores high(1) pulsado o low(0). Cuando se pulsan todos los valores, la función completion_Scan() se llama y solo sale cuando se envía una señal de terminación de la Arduino original que recibió el mensaje.
pseudo código:
int right=10100; int left = 10010; if (ball is on left side){ send_data(right); completion_Scan(); } if (ball is on the right side){ send_data(left); completion_Scan(); }
Cuando se llama send_Data, el entero pasado es picado en una matriz de 5 bits mediante el algoritmo siguiente:
int send_data(int num){ data[4] = num % 10; data[3] = (num % 100 - data[4])/10; data[2] = (num % 1000 - data[3] - data[4])/100; data[1] = (num % 10000 - data[2] - data[3] - data[4])/1000; data[0] = (num % 100000 - data[1] - data[2] - data[3] - data[4])/10000;
Utilizando el modulo función, he creado un algoritmo para almacenar los bits individuales en una posición de selección única llamada datos. Por ejemplo, si se envía 10100 send_data, datos [4] almacenará el resto de 10100 dividido por 10.
datos [4] = (10100 mod 10) = 0;
datos [3] = ((10100 mod 100) - 0) / 10 = 0
datos [2] = 1
datos [1] = 0
datos [0] = 1
La matriz de todos los datos es procesada a través de una declaración "a favor" y cuando se detecta un valor de 1, una señal de alto es pulsada a través del cable de 200ms. Por el contrario, cuando se detecta un valor de 0, baja de la señal es pulsada a través del cable para la misma cantidad de tiempo.
for (y=0; y<5; y++){ //send high or low if (data[y]==1){ turn PC5 HIGH } else{ turn PC5 LOW } delay(200); }
Para recibir datos, Arduino receptor está siempre esperando una señal alta inicial. Inmediatamente después que se detecta, el mensaje se almacena en un array de una manera similar. El código final recibido se compara para determinar la salida deseada.
He incluido el código completo para Mechbot y EVShield. La única diferencia es que he incluido Serial.prints para la depuración, botones para enviar o terminar la comunicación y un LED que parpadea durante la transmisión. Nota: puede descargar ambos archivos o haga clic derecho y seleccionar "abrir en Nueva pestaña" para ver el código de.