facil de usar y enterder
Dependencies: mbed Pulse TextLCD
main.cpp
- Committer:
- joshasigo
- Date:
- 2020-05-24
- Revision:
- 0:da1e9312d7d2
File content as of revision 0:da1e9312d7d2:
#include "mbed.h" #include <Pulse.h> //Library developed by Gustavo Ramirez; #include "TextLCD.h" TextLCD lcd(PTB18,PTB19,PTC0,PTC4,PTC6,PTC7, TextLCD::LCD16x2); /// PIN4,PIN6,PIN11,PIN12,PIN13,PIN14 /// RS E D4 D5 D6 D7 /// PIN1 A TIERRA, PIN2 A VCC, PIN3 CON UNA R=1KOHMIO,PIN5 A TIERRA,PIN15 CON UNA R=1KOHMIO, PIN16 A VC /// PIN 7 A PIN 10 NO SE LE CONECTA NADA. PulseInOut irda(PTA1);// en este puerto se pone el sensor infrarrojo int header =0; //Variable to store the header length const int head_H = 9000*1.2; //+20% header length const int head_L = 4500*0.8;//-20% header length int i=0; int n=0; float PeriodoPWM1=0.001; float PeriodoLed=1.0; float DC1=0.5; const int pulso=562.5;//NEC uses 562.5µs pulse bursts; const int num_bits = 32;//8 bits address - 8 bits address logical inverse - 8 bits data - 8 bits data logical inverse; int num[num_bits];//Array to store logical 1 length; int data_bin[num_bits]; //Array to store binary code transmited; int address1; //variable to store the device address; int address0; //variable to store the device address (inverse); int data1; //variable to store the transmited data; int data0; //variable to store the transmited data (inverse); //motores DigitalOut ade1(PTC1);// DigitalOut atra1(PTC2);// DigitalOut ade2(PTB3);// DigitalOut atra2(PTB2);// /****Las teclas del control****/ const int adelante =96; const int atras=97; const int izquierda=101; const int derecha =98; const int pausa=104; void imprimir_funcion(int dato) { switch(dato) { case adelante: lcd.cls(); lcd.locate(0,0);//0X,0Y lcd.printf("COMANDO!"); lcd.locate(0,1); lcd.printf("adelante"); ade1=1; atra1=0; ade2=1; atra2=0; break; case atras: lcd.cls(); lcd.locate(0,0);//0X,0Y lcd.printf("COMANDO!"); lcd.locate(0,1); lcd.printf("atras"); ade1=0; atra1=1; ade2=0; atra2=1; break; case izquierda: lcd.cls(); lcd.locate(0,0);//0X,0Y lcd.printf("COMANDO!"); lcd.locate(0,1); lcd.printf("izquierda"); ade1=1; atra1=0; ade2=0; atra2=1; break; case derecha: lcd.cls(); lcd.locate(0,0);//0X,0Y lcd.printf("COMANDO!"); lcd.locate(0,1); lcd.printf("derecha"); ade1=0; atra1=1; ade2=1; atra2=0; break; case pausa: lcd.cls(); lcd.locate(0,0);//0X,0Y lcd.printf("COMANDO!"); lcd.locate(0,1); lcd.printf("pausa"); ade1=0; atra1=0; ade2=0; atra2=0; break; } } int main() { lcd.locate(0,0);//0X,0Y lcd.printf("Presiona tecla"); lcd.locate(0,1);//0X,0Y lcd.printf("Esp_comando"); while(1) { /********************Header detection************************/ ini1: header=0; header = irda.read_low_us(); if (header > head_L && header < head_H){ goto seguir;//verificar que este en la tolerancia +-20% }else{ goto ini1; } seguir: //leo los datos y se meten a un arreglo wait_us(4500/2); for(i=0; i<(num_bits); ++i) { num[i]=irda.read_high_us(); //Tiempos para estado siempre alto se almacenan en microsegundos wait_us(400); //esperar una parte del estado bajo (562.5µs) } /*Imprimir en pantalla lo que obtengo*/ for(i=0; i<(num_bits); ++i) { if(num[i]>pulso*1.2) { data_bin[i]=1; //si la longitud es mayor que 1.2ms, representa un 1 } else { data_bin[i]=0; //si la longitud es más corta, representa un 0 } } address1=0; for(i=0; i<8; i++) { address1=address1 + data_bin[i]*pow(2.0,i*1.0); } address0=0; for(i=8; i<16; i++) { address0=address0 + data_bin[i]*pow(2.0,(i-8)*1.0); } data1=0; for(i=16; i<24; i++) { data1=data1 + data_bin[i]*pow(2.0,(i-16.0)*1.0); } data0=0; for(i=24; i<32; i++) { data0=data0 + data_bin[i]*pow(2.0,(i-24)*1.0); } imprimir_funcion(data1); } }