TAREA

Dependencies:   Debounced Pulse1 TextLCD mbed

Dependents:   IRDA

Fork of irda1 by Gustavo Ramirez

Revision:
3:7a5b5eea31c9
Parent:
2:6a15ab0305c8
Child:
4:d8df2edc8848
--- a/main.cpp	Fri Nov 08 07:40:04 2013 +0000
+++ b/main.cpp	Wed Apr 29 14:44:33 2015 +0000
@@ -1,48 +1,149 @@
 #include "mbed.h"
 #include <Pulse1.h>
-
-PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
+#include "TextLCD.h"
+#include "DebouncedIn.h"
+#include <math.h>
+#include <string.h>
+#include <stdlib.h> 
+PulseInOut irda(PTC2);// en este puerto se pone el sensor infrarrojo
 Serial pc(USBTX, USBRX);
-DigitalOut led(LED1);
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
+DebouncedIn button1(PTC12);// BOTON scroll
+DigitalOut led1(LED1);
 DigitalOut led2(LED2);
-int header =0; //tiempo de cabecera pulso abajo
-const int head_H = 9100; //+20% medida con osciloscopio en microsegundos
-const int head_L = 8500;//-20%  medida con osciloscopio
+DigitalOut led3(LED3);
+
+int header =0;
+int header2 =0; //tiempo de cabecera pulso abajo
+const int head_H = 2916; //+20% medida con osciloscopio en microsegundos
+const int head_L = 1944;//-20%  medida con osciloscopio
 int i=0;
-const int T_alto=1680;//ponga su tiempo de la prueba
-const int T_bajo=526;//ponga su tiempo de la prueba
-const int num_bits = 32;//ponga su numero de bits
+int resi=0,n1,n2;
+float unos,ceros,desc;
+int dec=0;
+char hex[3];
+int c=0;
+const int T_alto=1170;//ponga su tiempo de la prueba
+const int T_bajo=567;//ponga su tiempo de la prueba
+const int num_bits = 16;//ponga su numero de bits
 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
-int dato; // tiempo de cada dato que se lee
-  
+int desca[num_bits];
+int dato,dato2; // tiempo de cada dato que se lee
 int main(){
+led1=1; 
+led3=1;
+ lcd.cls();
 while(1){
 ini1: header=0;
-      led2=1;
-      led=1;
-      header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
+ led2=1;
+ n1=0;
+ unos=0;
+ ceros=0;
+ n2=0;
+ desc=0;
+ lcd.cls();
+    lcd.printf("Esperando codigo IR\n\n");
+   header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
+ 
       if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
       else goto ini1;
-      
-seguir:
+    
+ seguir:
        //leo los datos de la trama y se meten a un arreglo
-      wait_us(5000);
+        //funcion para leer un pulso de caida o bajo
       led2=0;
+         header2 = irda.read_high_us(); 
+      // wait_us(1600);
       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(300);   
-      }
-      wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla 
-      pc.printf(",%d",header);
+     dato = irda.read_low_us(); //leer un bit de datos que es pulso abajo en este control 
+         num[i]=dato;
+            //wait_us(300); 
+     dato2 = irda.read_high_us();//Para calcular los tiempos de descanso
+     desca[i]=dato2;
+     }
+     wait(0.5);
       for(i=0;i<(num_bits-1);++i){  
       pc.printf(",%d",num[i]);
       }
-      wait(0.1);  //espero e imprimo en binario 
+      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");
-      else pc.printf("0");
+      desc=desc+desca[i];
+      if(num[i] > ((T_alto+T_bajo)/2)){
+           pc.printf("1");
+            unos=unos+num[i];
+            n1=n1+1;
+            dec=dec+(pow(2.0,14-i));//Convierte binario a decimal
+          // lcd.printf("1");
+            }
+      else {
+          ceros=ceros+num[i];
+          n2=n2+1;
+          pc.printf("0"); 
+         // lcd.printf("0");
+      } 
       }
+       desc=desc/(num_bits);
+      //Convierte decimal a hexadecimal
+       unos=unos/n1;
+      ceros=ceros/n2;
+     for(i=0;i<4;++i){
+     resi=dec%16;
+     dec=(dec/16);
+     if (resi<10){
+      hex[i]=resi;
+      hex[i]=hex[i]-208;
+     }
+     else if (resi==10) hex[i]='A';
+     else if (resi==11) hex[i]='B';
+     else if (resi==12) hex[i]='C';
+     else if (resi==13) hex[i]='D';
+     else if (resi==14) hex[i]='E';
+     else if (resi==15) hex[i]='F';
+    }
+      
+       lcd.cls();
+            lcd.printf("El header dura:\nH:%d L:%d us",header,header2);
+    while(1){   
+      
+      
+      
+      if (button1.falling()){
+                
+         if (c==0||c==1||c==2||c==3||c==4)c=c+1;
+        else if (c==5)c=0;    
+        
+      
+     
+      if (c==1){
+              lcd.cls();
+             lcd.printf("Los tiempos son: UNO:%01.1f ...",unos);
+               }
+      if (c==2){
+              lcd.cls();
+              lcd.printf("CERO: %01.1f\n (Promedio)...",ceros);
       }
-      }
\ No newline at end of file
+       if (c==3){
+              lcd.cls();
+              lcd.printf("El tiempo de\ndescanso: %01.1f",desc);
+      }
+         if (c==4){
+              lcd.cls();
+             lcd.printf("El numero de \nbits es: %d ...",n1+n2+1);
+               }
+       if (c==5){
+              lcd.cls();
+             lcd.printf("El codigo en hex es:");
+             lcd.printf(" %c%c%c%c",hex[3],hex[2],hex[1],hex[0]);
+             lcd.printf(" -->");
+      }
+      if (c==0){
+                   lcd.cls();
+            lcd.printf("El header dura:\nH:%d L:%d us",header,header2);
+    }
+   }   
+}
+}
+
+}
+