Tarea6_ModoInfrarrojo, en el cual con tres teclas, enciendo tres leds en modo toogle.
Dependencies: Pulse1 TextLCD mbed
main.cpp
- Committer:
- Jesse
- Date:
- 2014-05-14
- Revision:
- 0:a869387ac0f8
File content as of revision 0:a869387ac0f8:
//Michelle Maceas Henao //Jesse Mauricio Beltran Soto #include "mbed.h" #include <Pulse1.h> #include "TextLCD.h" TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7#include "TextLCD.h" //control remoto videobeam aula PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo Serial pc(USBTX, USBRX); DigitalOut led(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); int header =0; //tiempo de cabecera pulso abajo const int head_H = 9120; //+10% medida con osciloscopio en microsegundos const int head_L = 8939;//-10% medida con osciloscopio const int Tp=300; int i=0; const int T_alto=1570;//1630;//ponga su tiempo de la prueba const int T_bajo=467;//533;//ponga su tiempo de la prueba const int num_bits = 32;//ponga su numero de bits int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos int num2[num_bits];//Cadena para almacenar datos //int numA[num_bits]={1,0,0,0}; int Num=0; const int A=170; const int B=205; const int C=200; int C1=0,flag1=0; int C2=0,flag2=0; int C3=0,flag3=0; int flagg=0; int dato; // tiempo de cada dato que se lee int main() { led2=1; //Apago los leds. led=1; led3=1; while(1) { if(flagg==0) { lcd.cls(); lcd.locate(0,0); lcd.printf("HH:%d",head_H); lcd.locate(8,0); lcd.printf("Tby:%d",Tp); lcd.locate(0,1); lcd.printf("HL:%d",head_L); lcd.locate(8,1); lcd.printf("Nby:%d",num_bits); } ini1: fflush( stdin ); header=0; header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% else goto ini1; seguir: //leo los datos de la trama y se meten a un arreglo wait_us(4500);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO //led2=0; lcd.cls(); Num=0; for(i=0;i<(num_bits-1);++i) { // POR OSCILOSCOPIO se determina que llegan (num_bits),datos dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control num[i]=dato; wait_us(Tp); } wait(0.3); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla pc.printf(",%d",header); for(i=0;i<(num_bits-1);++i) { pc.printf(",%d",num[i]); } wait(0.1); //espero e imprimo en binario pc.printf("\n\n"); for(i=0;i<(num_bits-1);++i) { if(num[i] > ((T_alto+T_bajo)/2)) { pc.printf("1"); num2[i]=1; if(i>17) { Num=Num+1*(2^(i)); } } else { pc.printf("0"); } } if(Num==A) { flagg=1; lcd.cls(); lcd.printf(" LED ROJO"); lcd.locate(0,1); lcd.printf(" [Decimal]:%d",Num); led=0; C1=C1+1; Num=0; } if(Num==B) { flagg=1; lcd.cls(); lcd.printf(" LED VERDE"); lcd.locate(0,1); lcd.printf(" [Decimal]:%d",Num); Num=0; led2=0; C2=C2+1; Num=0; } if(Num==C) { flagg=1; lcd.cls(); lcd.printf(" LED AZUL"); lcd.locate(0,1); lcd.printf(" [Decimal]:%d",Num); led3=0; C3=C3+1; Num=0; } if(C1==2) { led=1; C1=0; } if(C2==2) { led2=1; C2=0; } if(C3==2) { led3=1; C3=0; } if((C1==0)&&(C2==0)&&(C3==0)) { flagg=0; } } }