Remote control (17 / 17 paso)

Paso 17: Actualizar :) Protocolo de comunicación serial

Porque la parte de conexión de mi código era no tan buena y visto que el coche reciba sólo 1 de 5 paquetes de datos que remoto enviar me tryd a hacer algún tipo de protocolo para el coche y el mando a distancia envían solicitudes y dan respuesta si los datos han sido completados o cosas así y también comprobar el estado de conexión e intente volver a conectar si desconecta.

En la parte de hardware que añadió 3 led del mando a distancia, uno indica el estado de la conexión y los otros 2 al enviar o recibir datos, los leds están conectados a los pines digitales 3

Lado remoto conectar la función:

 void connect(){ if(Serial.available() > 0){ byte first = Serial.read(); if(first == request_connect){ Serial.flush(); Serial.write(ok); connect_accepted = 1; } if (first == request_data && connect_accepted == 1){ connected = 1; connect_accepted = 0; Send_data(); } } } 

Receiver(Car) lado conectar la función:

 void connect(){ if(Serial.available() > 0){ if(Serial.read() == ok){ connected = 1; delay(10); Serial.write(request_data); Serial.flush(); } } else{ delay(100); Serial.write(request_connect); } } 

Como se puede ver el coche enviar el request_connect hasta el control remoto envía un "ok" luego los sistemas del coche la conexión y enviar la solicitud de datos. El control remoto sólo esperar la request_connect y eliminar el resto de datos en serie que pueden estar disponibles (porque el coche acaba de enviar request_data cada 100ms hasta que obtiene la autorización), enviar "ok" y conjuntos de connect_accepted, justo sólo cuando recibe la request_data establece la verdadera conexión y comienza envío de datos.

Función de conexión lado remoto

 void communication(){ if (connected){digitalWrite(ledConnected,HIGH);} //light up the connec led else {digitalWrite(ledConnected, LOW);} if (running){ //running, you can set it to false when you make some setins in the remote menus if(!connected){ last_time_recived = millis(); connect(); } if(connected){ if (Serial.available() > 0){ int first_byte = Serial.read(); lcd.setCursor(0,5); //debug lcd.print(first_byte); //debug switch (first_byte) { case request_data: last_time_recived = millis(); Send_data(); digitalWrite(ledSend, HIGH); //light up the send led break; case incomming: last_time_recived = millis(); Recive_data(); digitalWrite(ledRecive, HIGH); //light up the receive led break; case recived_ok: //case you get a recive ok feedback send request data last_time_recived = millis(); Serial.write(request_data); break; case err_max_packet_overflow: //case the car say you send too many bytes last_time_recived = millis(); Serial.flush(); lcd.setCursor(0,5); //debug lcd.print("RRerr_max_packet"); //debug Send_data(); break; case err_data_overflow: //case the car say you send too many values last_time_recived = millis(); Serial.flush(); lcd.setCursor(0,6); //debug lcd.print("RRerr_data_"); //debug Send_data(); break; default: Serial.flush(); } } } } } 

El receptor communication() es casi lo mismo, voy a poner todo el código en un archivo.

Send_data() lado remoto

 void Send_data(){ Serial.write(incomming); // send a head's up so the car can go to recive_data() Serial.write(nr_data_send); //nr of data to send (if more it will send a too many values error) Serial.write(throttle); // sending the values Serial.write(break_); Serial.write(stear); Serial.write(EEPROMReadInt(76)); // read from the eprom the value Serial.write(EEPROMReadInt(72)); } 

Receive_data() lado remoto

 void Recive_data(){ if(Serial.available() > 0){ while (Serial.available() > 0) { packets[Cur_Packet_Index++] = Serial.read(); //saveing the data in an array the array must be delay(2); //long enough to store all the data if (Cur_Packet_Index >= MaxPacketNum){ //send too many byte error Serial.write(err_max_packet_overflow); Serial.flush(); lcd.setCursor(0,5); //debug lcd.print("err_max_packet"); //debug Cur_Packet_Index = 0; break; } } if(packets[0] != Cur_Packet_Index - 1){ //send too many values error Serial.write(err_data_overflow); Serial.flush(); lcd.setCursor(0,6); //debug lcd.print("err_data_"); //debug } else{ //save the values if no error car_bat_motor = packets[1]; car_bat_controler = packets[2]; RPM = packets[3]; last_time_recived = millis(); // set the time reference for time out connection Serial.write(recived_ok); } Cur_Packet_Index = 0; } } 

Os pongo aquí el control remoto y los archivos del coche, actualizados y también a los archivos de la comunicación para el receptor que un mando a distancia y usted puede encontrar todos ellos en google drive aquí

Artículos Relacionados

Remote Controlled Arduino Car

Remote Controlled Arduino Car

Siempre me gustó ir a campamentos, etc. donde hay muchos de mis amigos, siempre me ha gustado tener muchos amigos y un día como estaba buscando por youtube para control remoto de coches, y cómo se hacían, me di cuenta que podía hacer uno para mi de l
Instalar y configurar Linux Infrared Remote Control (LIRC) Daemon

Instalar y configurar Linux Infrared Remote Control (LIRC) Daemon

IntroducciónDemonio LIRC decodifica señales infrarrojas (IR). Al recibir una señal de infrarrojos, el daemon genera un Suceso específico de LIRC. Clientes como irexec daemon y XBMC/KODI estos eventos LIRC y responden en consecuencia.Ámbito de aplicac
Tiras de LED de Phone Remote-Controlled inalámbrico: RasPi con conductor Fadecandy con WS2811/WS2812 direccionable LED tiras con TouchOSC Smartphone App con el Iphone o el Droid

Tiras de LED de Phone Remote-Controlled inalámbrico: RasPi con conductor Fadecandy con WS2811/WS2812 direccionable LED tiras con TouchOSC Smartphone App con el Iphone o el Droid

Aquí va un resumen de diseño cada vez más amplia de mi último proyecto. A continuación, un vídeo que he subido mostrando algunas funciones:La progresión de la idea original fue algo como lo siguiente:Tira de LED direccionable (s siempre queremos más
La cosquillita de nariz estornuda-Ray Remote-Controlled

La cosquillita de nariz estornuda-Ray Remote-Controlled

¿Sabe usted que edad esposas ' cuento sobre cómo al estornudar, que significa alguien está pensando? Al parecer, la mayoría de la gente no. No darse cuenta que, así que hice este proyecto. :)Recientemente le di mi primer demo como fabricante de promo
Arduino semáforo regulador w/Remote Control

Arduino semáforo regulador w/Remote Control

tuve un semáforo que yo estaba acabado.  La izquierda lo único que hacer era construir el controlador para los patrones de señal de la luz.  Para darle un toque incorporé un control remoto.  También fue la oportunidad perfecta para poder probar un Ar
Lego Technic Remote Control Off Roader Version 2

Lego Technic Remote Control Off Roader Version 2

Como prometió, su finalmente aquí. El carro de lego azul off roader V2!TheFoofinator ya modificado originalmente el camión todoterreno technic lego azul (número 8435), con funciones de la energía del conjunto de bulldozer, para permitir el control re
Instalar Linux Infrared Remote Control (LIRC) paquete

Instalar Linux Infrared Remote Control (LIRC) paquete

IntroducciónControl remoto infrarrojo de Linux (LIRC) es un conjunto de programas que controla el hardware de interfaz de infrarrojos de la Raspberry Pi. El paquete debian de lirc proporciona un número de programas:IRcat - cadenas de impresión pulsan
Pantalla táctil barra de sonido IR Remote Control

Pantalla táctil barra de sonido IR Remote Control

Mi hijo tiene Cambridge Audio Sound bar con un control remoto perro masticado! Lo dicho quisiera probar y hacer un control remoto nuevo!He probado este instructable (encendido-apagado y silencio) en mi TV Samsung y funciona bien, todavía tengo que pr
Verificar y depurar Linux Infrared Remote Control (LIRC) demonio configuraciones

Verificar y depurar Linux Infrared Remote Control (LIRC) demonio configuraciones

IntroducciónDespués el demonio LIRC capacitación para reconocer las señales de mi unidad de control remoto de infrarrojos (IR) y configurar cliente LIRC para responder en consecuencia a veces cosas no ocurren como se esperaba cuando hace clic en la u
Aplicación Remote Control del ventilador

Aplicación Remote Control del ventilador

Se trata de una aplicación android que hice para controlar mi ventilador. Guardados de perder el control para él, así que pensé en hacer una aplicación, ya que casi nunca pierdo mi teléfono. Lo siguiente podría ser uso control nada del teléfono que t
Knex Remote control 4WD "Off Roadster"

Knex Remote control 4WD "Off Roadster"

Hola soy nuevo con este KVG de R/C coche. Voy a publicar suficientes fotos para ustedes chicos y chicas publicarlo así que si usted quiere construir, mod, o mejorarlo ir adelante, me encantaría ver lo que puede hacer que! Algunas de las característic
Control remoto vía GSM/GPRS SMS(Arduino)

Control remoto vía GSM/GPRS SMS(Arduino)

control remoto, especialmente cuando este no ethernet o Wifi en el exterior, ha sido una cosas muy profundas en el pasado. Cuando era un niño, siempre imagen que yo tengo un equipo que puede controlar todos los electrodomésticos. Ahora, esto se convi
Steampunk Retro Control de remoto (también conocido como ' el ladrillo')

Steampunk Retro Control de remoto (también conocido como ' el ladrillo')

Más mandos a distancia más o menos el mismo aspecto, sirven un propósito... podrían ser demasiado buena.  Esto es para mi sistema de sonido Steampunk.  No he visto ningún mando de steampunk en la web (googlear 'steampunk remote control' - virtual exi
Controlar tus amigos usando el poder de la neurociencia (Control remoto humano parte II)

Controlar tus amigos usando el poder de la neurociencia (Control remoto humano parte II)

En este Instructable, usaremos una unidad Mindwave Mobile EEG (electroencefalograma), un fiel Arduino UNO, un TENS (estimulación eléctrica transcutánea del nervio) unidad y un simple relé para controlar remotamente un súbdito humano con nuestras ment