Coche RC simple para principiantes (controlar Android por Bluetooth) (10 / 10 paso)

Paso 10: Software

El programa fue escrito en Arduino IDE 1.01.

#include "EEPROM.h"

#define D1 2 / / dirección de rotación del motor 1
#define M1 3 / PWM izquierda motor
#define D2 4 / / dirección de rotación del motor 2
#define M2 5 / PWM derecha motor
#define cuerno 13 / / adicional canal 1
#define autoOFF 2500 / / milisegundos después de que el robot detiene cuando la conexión

#define cmdL 'L' / / UART-comando para motor izquierdo
#define cmdR 'R' / / UART-comando para motor adecuado
#define cmdH 'H' / / UART-comando de canal adicional (por ejemplo cuerno)
#define cmdF 'F' / / UART-comando para el funcionamiento de EEPROM
#define cmdr 'r' / / UART-comando para el funcionamiento de EEPROM (leer)
#define cmdw 'w' / / UART-comando para el funcionamiento de EEPROM (escritura)

char incomingByte; datos de entrada

char L_Data [4]; datos de la matriz para el motor izquierdo
byte L_index = 0; Índice de la matriz L
char R_Data [4]; datos de la matriz para el motor derecho
byte R_index = 0; Índice de la matriz R
char H_Data [1]; datos de la matriz de canal adicional
byte H_index = 0; Índice de la matriz H
char F_Data [8]; datos de la matriz de EEPROM
byte F_index = 0; Índice de la matriz F
comando de Char; comando

currentTime largo sin firmar, lastTimeCommand, autoOFF;

void setup() {}
Serial.Begin(9600); inicialización de UART
pinMode (cuerno, salida); canal adicional
pinMode (D1, salida); salida para la rotación del motor
pinMode (D2, salida); salida para la rotación del motor
/ * EEPROM.write(0,255);
EEPROM.write(1,255);
EEPROM.write(2,255);
EEPROM.write(3,255); * /
timer_init(); temporizador software de inicialización
}

void timer_init() {}
uint8_t sw_autoOFF = EEPROM.read(0); leer EEPROM "está activada o no detener el coche cuando se pierde la conexión"
Si (sw_autoOFF == '1') {/ / si está activado
char var_Data [3];
var_Data [0] = EEPROM.read(1);
var_Data [1] = EEPROM.read(2);
var_Data [2] = EEPROM.read(3);
autoOFF = atoi (var_Data) * 100; autoOFF variable ms
}
else if (sw_autoOFF == '0') {}
autoOFF = 999999;
}
otra cosa if(sw_autoOFF == 255) {}
autoOFF = 2500; Si la EEPROM está en blanco, valor de dafault es 2,5 seg
}
currentTime = millis(); leer que el tiempo transcurrido desde el inicio de la aplicación
}

void loop() {}
Si (Serial.available() > 0) {/ / Si recibe datos del UART
incomingByte = Serial.read(); Raed bytes
if(incomingByte == cmdL) {/ / Si recibe datos para el motor izquierdo L
comando = cmdL; comando actual
memset(L_Data,0,sizeof(L_Data)); limpiar matriz
L_index = 0; Índice de reajuste de la matriz
}
otra cosa if(incomingByte == cmdR) {/ / Si recibe datos para el motor izquierdo R
comando = cmdR;
memset(R_Data,0,sizeof(R_Data));
R_index = 0;
}
otra cosa if(incomingByte == cmdH) {/ / Si recibe datos por canal adicional
comando = cmdH;
memset(H_Data,0,sizeof(H_Data));
H_index = 0;
}
otra cosa if(incomingByte == cmdF) {/ / Si recibe datos de op EEPROM
comando = cmdF;
memset(F_Data,0,sizeof(F_Data));
F_index = 0;
}
else if (incomingByte == '\r') comando = 'e'; final de línea
else if (incomingByte == '\t') comando = ' t '; final de línea para op EEPROM

Si (comando == cmdL & & incomingByte! = cmdL) {}
L_Data [L_index] = incomingByte; almacenar cada byte en la matriz
L_index ++; Índice de incremento de la matriz
}
else if (comando == cmdR & & incomingByte! = cmdR) {}
R_Data [R_index] = incomingByte;
R_index ++;
}
else if (comando == cmdH & & incomingByte! = cmdH) {}
H_Data [H_index] = incomingByte;
H_index ++;
}
else if (comando == cmdF & & incomingByte! = cmdF) {}
F_Data [F_index] = incomingByte;
F_index ++;
}
else if (comando == 'e') {/ / si tomamos el final de línea
Control4WD(atoi(L_Data),atoi(R_Data),atoi(H_Data));
Delay(10);
}
else if (comando == ' t ') {/ / si tomamos el extremo de la línea EEPROM
Flash_Op(F_Data[0],F_Data[1],F_Data[2],F_Data[3],F_Data[4]);
}
lastTimeCommand = millis(); leer que el tiempo transcurrido desde el inicio de la aplicación
}
if(Millis() > = (lastTimeCommand + autoOFF)) {/ / Comparar el tiempo actual con lastTimeCommand variable + autoOFF
Control4WD(0,0,0); parar el coche
}
}

void Control4WD (int mLeft, int mRight, uint8_t cuerno) {}

bool directionL, directionR; Dirección de rotación del motor L298N
valueL bytes, tasador; PWM M1, M2 (0-255)

Si (mLeft > 0) {}
valueL = mLeft;
directionL = 0;
}
else if (mLeft < 0) {}
valueL = 255 - abs(mLeft);
directionL = 1;
}
Else {}
directionL = 0;
valueL = 0;
}

Si (mRight > 0) {}
Tasador = mRight;
directionR = 0;
}
else if (mRight < 0) {}
Tasador = 255 - abs(mRight);
directionR = 1;
}
Else {}
directionR = 0;
Tasador = 0;
}

analogWrite (M1, valueL); ajustar la velocidad del motor izquierdo
analogWrite (M2, tasador); ajustar la velocidad del motor adecuado
digitalWrite (D1, directionL); establecer dirección de rotación del motor izquierda
digitalWrite (D2, directionR); establecer el sentido de rotación derecho motor

digitalWrite (cuerno, cuerno); canal adicional
}

void Flash_Op (char FCMD, uint8_t z1, z2 uint8_t, uint8_t z3, z4 de uint8_t) {}

if(FCMD == CMDR) {/ / si el comando de lectura de datos de EEPROM
Serial.Print("FData:"); enviar datos EEPROM
Serial.Write(EEPROM.Read(0)); leer valor de la memoria con dirección 0 e imprimir a UART
Serial.Write(EEPROM.Read(1));
Serial.Write(EEPROM.Read(2));
Serial.Write(EEPROM.Read(3));
Serial.Print("\r\n"); marcar el final de la transmisión de datos EEPROM
}
otra cosa if(FCMD == cmdw) {/ / si los datos EEPROM escriben comando
EEPROM.write(0,z1); registro de Z1 a la memoria con dirección 0
EEPROM.write(1,z2);
EEPROM.write(2,z3);
EEPROM.write(3,z4);
timer_init(); reinicializar el temporizador
Serial.Print("FWOK\r\n"); Enviar un mensaje de que los datos con éxito es escribir EEPROM
}

El código utiliza una librería para trabajar con memoria EEPROM AVR. Placa Arduino por USART del módulo Bluetooth recibe datos listos para el motor izquierdo y derecho. Se realizan todos los cálculos básicos en la aplicación de Android.

La estructura del proyecto en Eclipse se puede ver en la imagen superior.

Puede descargar el código fuente para el Arduino y el proyecto para Eclipse
Descargar Aplicación APK para dispositivos Android

La versión de software más reciente puede encontrarse en esta página Video de demostración del modo de volante virtual (versión 1.2 y superiores):

P.D. Perdón por mi mala Inglés

Artículos Relacionados

CxemCAR 1 - coche de RC de Control Android por Bluetooth

CxemCAR 1 - coche de RC de Control Android por Bluetooth

este es un proyecto de código abierto del coche del RC con control de teléfono Android a través de Bluetooth. El controlador se utiliza con Micro net: FEZ Panda II, pero puede utilizar cualquier controlador funciona con Micro net base (Netduino, de l
Programar tu Arduino con un dispositivo Android por Bluetooth

Programar tu Arduino con un dispositivo Android por Bluetooth

Hola mundo, en este Instructable quiero mostrarle, cómo programar tu Arduino Uno con tu dispositivo Android por Bluetooth. Es muy sencillo y tan barato. También nos permite programar el Arduino donde nunca queremos sobre bluetooth inalámbrico... Así
¿Montaña de punto simple - para principiantes

¿Montaña de punto simple - para principiantes

necesita una montaña para su bebida? Uno de estos posavasos punto simple, son fáciles y divertidas para hacer!Paso 1: Lo que usted necesita Lo que tienes que hacer una montaña. 1. cualquier tipo de hilado. 2. algunas agujas (no importa que tamaño uti
Mod de voltaje Nerf Rapidstike increíblemente simple para principiantes 9V

Mod de voltaje Nerf Rapidstike increíblemente simple para principiantes 9V

tan primero apagado antes de empezar esto dejó me haz colocado un par de cosas.1. esto no es un mod de batería de litio ion/poly no trustfires o cosas como que son necesarios.2. no soldar, cortar, o desarme de la pistola es necesario. Y como resultad
Bolsa del lazo simple (para principiantes)

Bolsa del lazo simple (para principiantes)

esto es una bolsa pequeña decidí hacer porque necesitaba algo para regalo de San Valentín de mi señora. Es muy sencillo de hacer y me tomó menos de una hora de principio a fin.Paso 1: materiales Necesitarás lo siguiente:-Algún tipo de tela (yo usé un
Un proyecto de Arduino para principiantes: Tri color por un LED de color Bi

Un proyecto de Arduino para principiantes: Tri color por un LED de color Bi

Hola y Bienvenidos a mi instructable 7. Esta vez estoy jugando con mi nuevo duemilanove TRduino. En realidad es un clon de Arduino por Thinnkware y con ATMega 328.Arduino es un programador muy bueno y es también abrir fuente (la cosa que me encanta d
Arduino desde Android por Bluetooth

Arduino desde Android por Bluetooth

Como mi primer instructivo, me gustaría mostrar cómo conectar a un arduino para la entrada-salida de un dispositivo android rápidamente y fácilmente.Para los siguientes pasos necesitaremos:Un dispositivo compatible con arduinoUn bluetooth HC-05, HC-0
Hacer escudo de evaluación Amarino para experimentos de Android-Arduino-Bluetooth

Hacer escudo de evaluación Amarino para experimentos de Android-Arduino-Bluetooth

este artículo le muestra los pasos para realizar la evaluación de Amarino escudo diseñado y producido por www.buildcircuit.com. El escudo presentado en este artículo es una réplica de un escudo publicado en buildcircuit, excepto que el interruptor de
Frambuesa de Pi de Robot controlado por Bluetooth

Frambuesa de Pi de Robot controlado por Bluetooth

este tutorial se basa en un Instructable anterior -Robustezas del edificio con Raspberry Pi y PythonEl objetivo es presentar un ejemplo de cómo configurar una conexión Bluetooth en serie con Arduino para controlar un robot de Raspberry Pi. Pero permi
Conectar Arduino Uno con Android via Bluetooth

Conectar Arduino Uno con Android via Bluetooth

En este proyecto un módulo Bluetooth serial se utiliza para crear una conexión entre Arduino Uno y una aplicación para Android que he creado con MIT App Inventor.Arduino escucha los comandos a la luz algunos LED o mostrar su estado. Además, una inter
Robot controlado por Android para principiantes (A Z)

Robot controlado por Android para principiantes (A Z)

¿Te gustan los Robots? ¿Eres nuevo en robótica? ¿Es usted pensando en construir un Robot desde cero? Si es así, este instructables es para usted. En este instructables voy a mostrarles cómo pueden construir un robot desde cero, también te muestro cóm
Arduino para principiantes, ahora con datos de trazado, controlado por Android, No codificación requerida, No requiere de soldadura.

Arduino para principiantes, ahora con datos de trazado, controlado por Android, No codificación requerida, No requiere de soldadura.

IntroductionEste instructable muestra que cómo puede leer y escribir los pines digitales de tu Arduino Uno y leer los valores de los pines analógicos todo controlado desde tu móvil Android sin hacer cualquier codificación. Este proyecto es plug and p
Hacer una aplicación Android para controlar por Bluetooth un Arduino controlar su casa mediante RF, con AppInventor

Hacer una aplicación Android para controlar por Bluetooth un Arduino controlar su casa mediante RF, con AppInventor

Sé que el título es un buen bocado, pero es exactamente lo que es.Hace algún tiempo, hice un instructivo que describe un circuito alrededor de un atmega328 (o un 'Arduino') que era disuadir a ladrones simulando ser en casa.Poco a poco ese sistema en
Solo clic encendido/apagado de tu móvil Android usando Arduino y pfodApp. Arduino para principiantes

Solo clic encendido/apagado de tu móvil Android usando Arduino y pfodApp. Arduino para principiantes

IntroducciónEste instructable muestra cómo puede cambiar un Arduino y la salida de tu móvil Android con tan solo un clic en el icono de pfodApp . Añadir un relé impulsado por esta salida para cambiar el hardware real. No hay codificación Android se r