Anda di halaman 1dari 6

ENVIO

#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;

int encoder_pin = 2; //Pin 2, donde se conecta el encoder


unsigned int rpm = 0; // Revoluciones por minuto calculadas.
volatile byte pulses = 0; // Número de pulsos leidos por el Arduino en un segundo
unsigned long timeold = 0; // Tiempo
unsigned int pulsesperturn = 20; // Número de muescas que tiene el disco del encoder.
static volatile unsigned long debounce = 0; // Tiempo del rebote.
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); // inicializamos el LCD.
lcd.setCursor(0, 0); // situamos el cursor el la posición 2 de la linea 0.
lcd.print("Bienvenido"); // escribimos en LCD
delay(1000);
lcd.clear();
lcd.setCursor(0, 0); // situamos el cursor el la posición 2 de la linea 0.
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
attachInterrupt(0, counter, RISING); // Configuración de la interrupción 0, donde esta
conectado.
}

void loop()
{

if (Serial.available() )
{

if (Serial.read() == 'i') //Si recibimos el inicio de trama


{
//leemos el carácter de función
if (Serial.read() == 'a')
{
dato1 = Serial.parseInt(); //recibimos el ángulo
if (Serial.read() == 'b')
{
dato2 = Serial.parseFloat(); //recibimos el ángulo

if (Serial.read() == 'c')
{
dato3 = Serial.parseInt(); //recibimos el ángulo

if (Serial.read() == 'f') //Si recibimos el fin de trama


{
lcd.setCursor(0, 1); // situamos el cursor el la posición 2 de la linea 0.
lcd.print(dato1); // escribimos en LCD
pwm=map(dato1 ,0 ,100 ,0 ,255);
analogWrite(pinpwm, pwm);
lcd.setCursor(5,0);
lcd.print(" CM");
lcd.setCursor(9, 0); // situamos el cursor el la posición 2 de la linea 0.
lcd.print(dato2); // escribimos en LCD
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0, 0); // situamos el cursor el la posición 2 de la linea 0.
lcd.print(dato3); // escribimos en LCD
if(dato3>10){
digitalWrite(motorPin1, 1);
}else{
digitalWrite(motorPin1, 0);
}
}
}
}
}
}
}

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);

if ((x > 1000))


dir = 'X';
else if ((x < 100))
dir = 'x';
else if (((x <= 1000) && (x >= 100)) && ((y <= 1000) && (y >= 100)))
dir = ' ';
if (y > 1000)
dir = 'Y';
else if (y < 100)
dir = '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++;
}
}

Anda mungkin juga menyukai