por medio de un control remoto y tres de sus botones se enciende un led diferente con cada botón, se muestra el numero de bits, su código, tiempo de duración de la cabecera y tiempos de duración en unos y ceros.

Dependencies:   Pulse1 TextLCD mbed

Revision:
0:0239a53cf648
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 16 15:42:27 2014 +0000
@@ -0,0 +1,236 @@
+#include "mbed.h"
+#include <Pulse1.h>
+#include "TextLCD.h"
+
+//
+//JUAN ESTEBAN alcance a realizar algo más del codigo mientras estaba en el hospital, el codigo ademas de apagar y prender el led, 
+//muestra el codigo del boton y el numero de bits.
+
+//control remoto 
+PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
+Serial pc(USBTX, USBRX);
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //Puertos LCD rs, e, d4, d5, d6, d7
+
+DigitalOut led3(LED3);
+DigitalOut led4(LED2);  // aqui se configuran las salidas donde a donde se conectan los leds
+DigitalOut led5(LED1);
+
+int header =0; //tiempo de cabecera pulso abajo
+const int head_H = 2860; //+10% medida con osciloscopio en microsegundos
+const int head_L = 2340;//-10%  medida con osciloscopio
+int i=0;
+const int T_alto=1370;//ponga su tiempo de la prueba
+const int T_bajo=733;//ponga su tiempo de la prueba
+const int num_bits = 7;//ponga su numero de bits
+int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
+int numb[num_bits]; // cadena para almacenar los bits 
+int num1[] = {1,0,1,0,1,0,0};
+int num2[] = {0,1,1,0,1,1,0};    // aqui se configura la trama de bit que representa al boton 1, 2 y 3.
+int num3[] = {0,0,1,0,1,0,0};
+
+int suma1=0;
+int suma2=0;
+int suma3=0;
+int s1t, s2t;
+
+int dato; // tiempo de cada dato que se lee
+
+  
+int main(){
+  
+      led3=1;
+      led4=1;
+      led5=1;
+      
+    
+while(1){
+
+int s1 = 0;
+int s2 = 0;
+int p = 0;
+int q = 0;
+    
+    suma1=suma2=suma3=0;
+    
+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(570);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO 
+      
+      for(i=0;i<=(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
+      dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control
+      num[i]=dato;
+      wait_us(300);   
+      }
+      wait(0.5); //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");
+           s1 = num[i] + s1;
+           p++;
+      }
+      
+      else{
+           
+           pc.printf("0");
+           s2 = num[i] + s2;
+           q++;
+        }
+      
+      }
+      
+      
+      s1t = s1/p;
+      s2t = s2/q;
+      
+      for(i=0;i<=(num_bits-1);++i){
+      
+         if (num[i] > ((T_alto+T_bajo)/2)) numb[i]=1;
+         else  numb[i]=0;
+      }
+      
+      for(i=0;i<=(num_bits-1);++i){
+      
+      if (numb[i] == num1[i]) suma1++;
+      if (numb[i] == num2[i]) suma2++;
+      if (numb[i] == num3[i]) suma3++;
+      }
+      pc.printf("%d,%d,%d\n", suma1, suma2, suma3);
+      if (suma1 == num_bits){
+           
+      lcd.cls();
+      led3 = !led3;
+      lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del control en la pantalla LCD
+      lcd.printf("#bits");
+      lcd.locate(0,1);
+      lcd.printf("codigo=");
+      
+        lcd.locate(5,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",num_bits);
+        lcd.locate(6,0);
+        lcd.printf("%d",num_bits);
+        lcd.locate(6,1);                //------------- Ubica e imprime el parámetro "codigo" en la pantalla LCD
+        lcd.printf("=1010100");
+    
+    wait(1);
+    
+      lcd.cls();
+      lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del control en la pantalla LCD
+      lcd.printf("header=");
+      lcd.locate(0,1);
+      lcd.printf("t1=");
+      lcd.locate(8,1);
+      lcd.printf("t0=");
+      
+        lcd.locate(6,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",header);
+        lcd.locate(7,0);
+        lcd.printf("%d",header);
+        lcd.locate(2,1);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",s1t);
+        lcd.locate(3,1);
+        lcd.printf("%d",s1t);
+        lcd.locate(10,1);
+        lcd.printf("=    ",s2t);
+        lcd.locate(11,1);
+        lcd.printf("%d",s2t);
+      
+      }
+      
+      if (suma2 == num_bits){ 
+      
+      lcd.cls();
+      led4 = !led4;
+      lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del control en la pantalla LCD
+      lcd.printf("#bits");
+      lcd.locate(0,1);
+      lcd.printf("codigo=");
+      
+        lcd.locate(5,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",num_bits);
+        lcd.locate(6,0);
+        lcd.printf("%d",num_bits);
+        lcd.locate(6,1);                //------------- Ubica e imprime el parámetro "codigo" en la pantalla LCD
+        lcd.printf("=0110110");
+
+      wait(1);
+    
+      lcd.cls();
+      lcd.locate(0,0);        // Ubica e imprime nombre de los tiempos en la pantalla LCD
+      lcd.printf("header=");
+      lcd.locate(0,1);
+      lcd.printf("t1=");
+      lcd.locate(8,1);
+      lcd.printf("t0=");
+      
+        lcd.locate(6,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",header);
+        lcd.locate(7,0);
+        lcd.printf("%d",header);
+        lcd.locate(2,1);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",s1t);
+        lcd.locate(3,1);
+        lcd.printf("%d",s1t);
+        lcd.locate(10,1);
+        lcd.printf("=    ",s2t);
+        lcd.locate(11,1);
+        lcd.printf("%d",s2t);
+      }
+      
+      if (suma3 == num_bits){
+     
+     lcd.cls();
+     led5 = !led5;
+     lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del control en la pantalla LCD
+      lcd.printf("#bits");
+      lcd.locate(0,1);
+      lcd.printf("codigo=");
+      
+        lcd.locate(5,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",num_bits);
+        lcd.locate(6,0);
+        lcd.printf("%d",num_bits);
+        lcd.locate(6,1);                //------------- Ubica e imprime el parámetro "codigo" en la pantalla LCD
+        lcd.printf("=0010100");
+
+wait(1);
+    
+      lcd.cls();
+      lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del control en la pantalla LCD
+      lcd.printf("header=");
+      lcd.locate(0,1);
+      lcd.printf("t1=");
+      lcd.locate(8,1);
+      lcd.printf("t0=");
+      
+        lcd.locate(6,0);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",header);
+        lcd.locate(7,0);
+        lcd.printf("%d",header);
+        lcd.locate(2,1);                //------------- Ubica e imprime el parámetro "#bits" en la pantalla LCD
+        lcd.printf("=    ",s1t);
+        lcd.locate(3,1);
+        lcd.printf("%d",s1t);
+        lcd.locate(10,1);
+        lcd.printf("=    ",s2t);
+        lcd.locate(11,1);
+        lcd.printf("%d",s2t);
+      
+        }  
+      
+      }
+      }
\ No newline at end of file