#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // (RS, E, D4, D5, D6, D7)
int variable;
char pulsacion;
float dato1, dato2, dato3;
char dato;
int x, y,coun = 0;
char dir;
int PIN_X = A0, PIN_Y = A1, boton = 7,Botonv;
int pinpwm = 6;
int pwm;
const int motorPin1 = 3;
const int motorPin2 = 4;
void loop()
{
if (Serial.available() )
{
if (Serial.read() == 'c')
{
dato3 = Serial.parseInt(); //recibimos el ángulo
Joystick();
Boton();
EviarDato(dir, coun);
RPM();
}
void EviarDato( char dato, int letra )
{
Serial.print("I"); //inicio de trama
Serial.print("S"); //S
Serial.print(dato); //S
Serial.print("G"); //S
Serial.print(rpm); //ángulo o dato
Serial.print("F"); //fin de trama
delay(50);
//---solicitamos una lectura del sensor----------
Serial.print("I"); //inicio de trama
Serial.print("L"); //L para indicarle que vamos a Leer el sensor
Serial.print("F"); //fin de trama
//------------------------------------------------
delay(50);
}
void Boton()
{
if (digitalRead(boton) == HIGH)
{
coun++;
delay(50);
if (coun > 2)
{
coun = 0;
}
}
}
void Joystick()
{
x = analogRead(PIN_X);
y = analogRead(PIN_Y);
}
void RPM()
{
if (millis() - timeold >= 1000)
{ // Se actualiza cada segundo
noInterrupts(); // Desconectamos la interrupción para que no actué en esta parte del
programa.
rpm = (60 * 1000 / pulsesperturn ) / (millis() - timeold) * pulses; // Calculamos las
revoluciones por minuto
timeold = millis();
lcd.setCursor(7, 1);
lcd.print("RPM ");
lcd.print(rpm);
lcd.print(" ");
pulses = 0; // Inicializamos los pulsos.
interrupts(); // Restart the interrupt processing // Reiniciamos la interrupción
}
}
void counter()
{
if ( digitalRead (encoder_pin) && (micros() - debounce > 500) && digitalRead
(encoder_pin) )
{
// Vuelve a comprobar que el encoder envia una señal buena y luego comprueba que el
tiempo es superior a 1000 microsegundos y vuelve a comprobar que la señal es correcta.
debounce = micros(); // Almacena el tiempo para comprobar que no contamos el rebote
que hay en la señal.
pulses++;
}
}