Ya añadí la mayoría de los datos , añadí también un juegos más, "Race 07".
Para usar un cuadro de mando, servos, led o cualquier otra forma de mostrar los datos por hardware os pongo un ejemplo en Arduino.
En mi caso este ejemplo lo hice con servos ( Los típicos de coches RC "Radio control" a 5V).
Código: Seleccionar todo
/*
Añadí toda las linea de comentario
el codigo lo explico para los que no entienden muy bien como "funciona" y que es cada "cosa", un buen codigo sin sus comentarios, no es un codigo completo ;)
Comentarios del codigo por : Alfonso carmona
*/
//Seccion de includes
#include <Servo.h>; //incluimos la libreria Servos.h
//Definimos las variables que vamos a utilizar de forma "Global"
int rpm; //variable tipo int
int Speed; //variable tipo int
Servo Speedserv; //variable de la clase Servo (obtiene las propiedades de la clase)
Servo Rpmserv; //variable de la clase Servo
Servo Aguaserv; //variable de la clase servo
Servo Oilserv; //variable de la clase servo
char comandos; // variable tipo char "caracter"
int serv = false; //variable tipo int, en otros lenguajes podriamos decir que seria una variable de tipo booleam ( true o false)
int PinFuel = 2;
//Funcion "setup", esta funcion es la que inicia las "opciones" de arduino, tales como los pines que queremos de "entrada", "salida", parametros a definir..etc..
void setup(){
Rpmserv.attach(3); //Le decimos que pin seleccionamos para el control
Speedserv.attach(9); //igual que el anterior
Aguaserv.attach(5); //igual que el anterior
Oilserv.attach(6); //igual que el anterior
pinMode(PinFuel, OUTPUT); //Ponemos el PinFuel "2" Como salida
Serial.begin(9600); //velocidad del puerto serie
}
//funcion "loop" de arduino, esta funcion se ejecuta continuamente , podemos decir que la funcion loop, es un "bucle infinito".
void loop()
{
if(serv == false) // añadimos una sentencia "IF", solo se ejecuta una vez, ya que una vez entre en "if", el valor de la variable "serv" pasara a ser "true"
{
//todo este codigo dentro del "if" es un teste de los componentes "cuadro de mando, servos, led...etc"
digitalWrite(PinFuel, HIGH);//enciende el led
delay(50);
Rpmserv.write(175); //indicamo a la variable de clase "Servo" , con su metodo "write" que nos ponga el servo en la posicion ["175"(hablamos en grados)]
delay(1); // con el metodo o funcion "delay()" le indicamos que para el proceso durante 1 milisegundo
Speedserv.write(175); // al igual que la primera variable de la clase "Servo" indicamos con la funcion o metodo "write", que nos ponga el servo en la posicion ["175" (hablamos en grados)]
delay(1); //otra vez ejecutamos la funcion o metodo "delay()"
digitalWrite(PinFuel, LOW); //apaga el led
serv = true; //cambiamos el valor de la variable serv, a true
} //cerramos la sentencia if
while(Serial.available() > 0) // sentencia "while"( quiere decir "mientras"), en este caso, "mientras", Serial.available() no sea igual a "0" ( podriamos decir, que el while se ejecutara siempre que contenga datos
{
comandos = Serial.read(); // lee un caracter "char" y lo guarda en la variable comandos
if (comandos == 'S' ) Read_Speed(); //sentencia "if", si la variable "comandos" es igual "==" a "S", ejecuta la funcion Read_Speed();
if (comandos == 'R') Read_Rpm(); //sentencia "if", si la variable "comandos" es igual "==" a "R", ejecuta la funcion Read_Rpm();
if (comandos == 'A') Read_Agua(); //sentencia "if", si la variable "comandos" es igual "==" a "A", ejecuta la funcion Read_Agua();
if (comandos == 'O') Read_Oil(); //sentencia "if", si la variable "comandos" es igual "==" a "O", ejecuta la funcion Read_Oil();
if (comandos == 'F') Read_Fuel(); //sentencia "if", si la variable "comandos" es igual "==" a "F", ejecuta la funcion Read_Fuel();
//if (comandos == 'G') Read_Gear(); //sentencia "if", si la variable "comandos" es igual "==" a "G", ejecuta la funcion Read_Gear();
} //fin de la sentencia "while"
} //fin de la funcion "loop"
void Read_Fuel()
{
delay(2); //parada de 2 milesimas
int active = Serial.read() - 48; //lee del Serial
if(active == 1) //en caso de que el valor sea igual a 1
{
digitalWrite(PinFuel, HIGH); //encendemos el led de reserva
}
else //en caso contrario
{
digitalWrite(PinFuel, LOW); //apagamos el led
}
}//fin de la funcion Read_Fuel()
void Read_Speed() //funcion Read_Speed() esta funcion es la encargada de recoger los datos de "Speed",( la velocidad) y lo procesa
{
delay(2); //delay de 2 milesimas
int Speed100 = Serial.read() - 48; // lee el primer caracter "char"
delay(2); //delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Speed2 = Serial.read() - 48;// lee el segundo caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Speed1 = Serial.read()- 48;// lee el tercer caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Speed = 100*Speed100 + 10*Speed2 + Speed1; //hacemos un calculo con los datos recogidos, y los guardamos en la variable "Speed"
int cal2 = map(Speed, 0, 200, 170, 0); //funcion o metodo "map" los parametros para esta funcion o metodo son : map(Valor, Valor_minimo, valor_maximo, Servo_minimo, Servo_maximo), el resultado de dicha funcion o metodo, es calcular, en que posicion tiene que estar el "servo", calculando el "valor maximo que recibira" por el valor maximo del servo "175 grados en nuestro caso" para saber mas de esta funcion o metodo, busquen en la web de arduino
Speedserv.write(cal2); // con la funcion o metodo write, añadimos el resultado que nos dio la funcion o metodo "map"( dando por resultado un valor de 0 a 170 grados)
} //fin de la funcion Read_Speed()
void Read_Rpm() //funcion Read_Rpm() esta funcion es la encargada de recoger los datos de "Rpm",( las Revoluciones por minutos) y lo procesa
{
delay(2); //delay de 2 milesimas
int Rpm1 = Serial.read() - 48; // lee el primer caracter "char"
delay(2); //delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Rpm2= Serial.read() - 48;// lee el segundo caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Rpm3 = Serial.read()- 48;// lee el tercer caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Rpm = 1000*Rpm1 + 100*Rpm2 +10 Rpm3; //hacemos un calculo con los datos recogidos, y los guardamos en la variable "rpm"
int cal2 = map(Rpm, 0, 8000, 170, 0); //funcion o metodo "map" los parametros para esta funcion o metodo son : map(Valor, Valor_minimo, valor_maximo, Servo_minimo, Servo_maximo), el resultado de dicha funcion o metodo, es calcular, en que posicion tiene que estar el "servo", calculando el "valor maximo que recibira" por el valor maximo del servo "175 grados en nuestro caso" para saber mas de esta funcion o metodo, busquen en la web de arduino
Rpmserv.write(cal2); // con la funcion o metodo write, añadimos el resultado que nos dio la funcion o metodo "map"( dando por resultado un valor de 0 a 170 grados)
} //fin de la funcion Read_Rpm()
void Read_Agua() //funcion Read_Agua() esta funcion es la encargada de recoger los datos de "Agua",( Temperatura ) y lo procesa
{
delay(2); //delay de 2 milesimas
int Agua1 = Serial.read() - 48; // lee el primer caracter "char"
delay(2); //delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Agua2= Serial.read() - 48;// lee el segundo caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Agua3 = Serial.read()- 48;// lee el tercer caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Agua = 100*Agua1 + 10*Agua2 + Agua3; //hacemos un calculo con los datos recogidos, y los guardamos en la variable "Agua"
int cal2 = map(Agua, 0, 130, 170, 0); //funcion o metodo "map" los parametros para esta funcion o metodo son : map(Valor, Valor_minimo, valor_maximo, Servo_minimo, Servo_maximo), el resultado de dicha funcion o metodo, es calcular, en que posicion tiene que estar el "servo", calculando el "valor maximo que recibira" por el valor maximo del servo "175 grados en nuestro caso" para saber mas de esta funcion o metodo, busquen en la web de arduino
Aguaserv.write(cal2); // con la funcion o metodo write, añadimos el resultado que nos dio la funcion o metodo "map"( dando por resultado un valor de 0 a 170 grados)
} //fin de la funcion Read_Agua()
void Read_Oil() //funcion Read_Oil() esta funcion es la encargada de recoger los datos de "Oil",( Temperatura) y lo procesa
{
delay(2); //delay de 2 milesimas
int Oil1 = Serial.read() - 48; // lee el primer caracter "char"
delay(2); //delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Oil2= Serial.read() - 48;// lee el segundo caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Oil3 = Serial.read()- 48;// lee el tercer caracter "char"
delay(2);//delay, ya lo explicamos, paramos el proceso durtante 2 milisegundo
int Oil = 100*Oil1 + 10*Oil2 + Oil3; //hacemos un calculo con los datos recogidos, y los guardamos en la variable "Oil"
int cal2 = map(Oil, 0, 130, 170, 0); //funcion o metodo "map" los parametros para esta funcion o metodo son : map(Valor, Valor_minimo, valor_maximo, Servo_minimo, Servo_maximo), el resultado de dicha funcion o metodo, es calcular, en que posicion tiene que estar el "servo", calculando el "valor maximo que recibira" por el valor maximo del servo "175 grados en nuestro caso" para saber mas de esta funcion o metodo, busquen en la web de arduino
Oilserv.write(cal2); // con la funcion o metodo write, añadimos el resultado que nos dio la funcion o metodo "map"( dando por resultado un valor de 0 a 170 grados)
} //fin de la funcion Read_Oil()
Saludos, Alfonso.