Tarea 6 Procesadores_Infrarojo Ernesto Jose Guevara Sequeda Juan Salvador Payares Iriarte

Dependencies:   DebouncedIn Pulse1 TextLCD mbed

Fork of irda_V_aula by Gustavo Ramirez

Revision:
4:8c523cea7a26
Parent:
3:82bebaf2a06a
--- a/main.cpp	Thu May 08 00:38:39 2014 +0000
+++ b/main.cpp	Fri May 16 16:24:02 2014 +0000
@@ -1,49 +1,287 @@
 #include "mbed.h"
 #include <Pulse1.h>
+#include "TextLCD.h"
+#include "math.h"
+#include "stdio.h"
+#include "DebouncedIn.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 led(LED1);
+//DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+DigitalOut led5(LED1);
+bool encendido1; //Banderas de indicacin led encendido
+bool encendido2;
+bool encendido3;
+int decimal;
+int i; 
+int c2=3;
+float  p;
+float c;
+int potencia=1;
 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
-int i=0;
-const int T_alto=1630;//ponga su tiempo de la prueba
-const int T_bajo=533;//ponga su tiempo de la prueba
+const int head_H = 4500+450; //+10% medida con osciloscopio en microsegundos
+const int head_L = 4500-450;//-10%  medida con osciloscopio
+
+const int T_alto=1600;//ponga su tiempo de la prueba
+const int T_bajo=560;//ponga su tiempo de la prueba
 const int num_bits = 64;//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
-  
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); 
+int dec[64];
+int j;
+int bit1;
+int bit0;
+//entradas
+int t=0;
+
+DebouncedIn p1(PTC3);
+DebouncedIn p2(PTC4);
+DebouncedIn p3(PTC5);
+
 int main(){
-while(1){
-ini1: fflush( stdin );
-      header=0;
-      led2=1;
-      led=1;
-      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;
+
+lcd.printf("COMENZAR");
+lcd.locate(0,0);
+    while(1){
+            
+            ini1: fflush( stdin );
+                  header=0;
+                  
+                 // led=1;
+                  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:
+                  lcd.cls();
+                  decimal = 0; 
+                  
+                   //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;
+                  
+                  
+                  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 luego de leer todo el areglo 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");
+                  
+                  lcd.locate(0,0);
+                  for(i=42;i<(num_bits-1);++i){  
+                    
+                          if(num[i] > ((T_alto+T_bajo)/2)){
+                               //lcd.printf("%d", 1);
+                               dec[i]=1;
+                               bit1 = num[i];
+                               //potencia de 2
+                               
+                                  
+                               }else{
+                               //     lcd.printf("%d", 0);
+                                    dec[i] = 0;
+                                    bit0 = num[i];
+                                    }
+                                       
+                             
+                             // lcd.printf("Bits Fin: %d %d",dec[i-1],dec[i-2]);
+                                    
+                          }//cierro for
+                          
+                          //Utilizo
+                          c=0;
+                          for(i=42; i<=63;++i){
+                              if(dec[i] == 1){
+                                  p = c; 
+                                  float potencia = 1;
+                               
+                                 for(j = 1; j <= p; ++j){
+                                     potencia = potencia*2;
+                                     }
+                                    if(p ==0){
+                                        potencia=1;
+                                        }
+                               decimal = decimal + potencia;   
+                               }//fin if
+                               c++;
+                            }//Fin for
+                            
+                          //lcd.printf("%10d", decimal);
+                          
+                          if(decimal == 1933827){
+                              if(encendido2 == false && encendido3 == false){
+                              
+                              
+                              c2= c2+1;
+                              
+                                      if(c2 % 2 != 0){
+                                      led3=0;
+                                      lcd.printf("Tecla 1 ON"); 
+                                      encendido1 = true;
+                                      }else{
+                                          led3=1;
+                                          encendido1 = false; 
+                                          lcd.printf("Tecla 1 OFF"); 
+                                          }//Fin else C2 %2 =0
+                                      
+                              }else{
+                                lcd.cls(); 
+                                lcd.printf("Boton Incorrecto!"); 
+                                  }//cierro else
+                              
+                              ++t;
+                                if(t==1){
+                                lcd.locate(0,1);
+                                lcd.printf("Cabecera H: %d ", header);
+                                }
+                                
+                                if(t==2){
+                                lcd.locate(0,1);
+                                lcd.printf("T Alto: %d ", bit1);
+                                
+                                }
+                                if(t==3){
+                                lcd.locate(0,1);
+                                lcd.printf("T Bajo: %d ", bit0);
+                                    t=0;
+                                    }
+                              }//cierro if decimal 1
+                          
+                          if(decimal == 1607427){
+                                  if(encendido1 ==  false && encendido3 == false){
+                                      
+                                      c2= c2+1;
+                                      encendido2= true;
+                                          if(c2 % 2 != 0){
+                                        lcd.printf("Tecla 9 ON"); 
+                                          led4=0;
+                                          }else{
+                                              led4=1;
+                                              encendido2 = false; 
+                                              lcd.printf("Tecla 9 OFF"); 
+                                              }
+                                    }else{
+                                          lcd.cls(); 
+                                          lcd.printf("Boton Incorrecto!"); 
+                                            }
+                                            
+                                            
+                              
+                              ++t;
+                                if(t==1){
+                                lcd.locate(0,1);
+                                lcd.printf("Cabecera H: %d ", header);
+                                }
+                                
+                                if(t==2){
+                                lcd.locate(0,1);
+                                lcd.printf("T Alto: %d ", bit1);
+                                
+                                }
+                                if(t==3){
+                                lcd.locate(0,1);
+                                lcd.printf("T Bajo: %d ", bit0);
+                                    t=0;
+                                    }
+                                    }// fin decimal 9
+                                      
+                                      
+                          if(decimal == 1640067){
+                              if(encendido1 ==  false && encendido2 == false){
+                              
+                              c2= c2+1;
+                              encendido3 = true;
+                                  if(c2 % 2 != 0){
+                                  led5=0;
+                                 lcd.printf("Tecla 8 ON"); 
+                                  }else{
+                                      led5=1;
+                                      encendido3 = false;
+                                    lcd.printf("Tecla 8 OFF"); 
+                                      }
+                              
+                              }else{
+                              lcd.cls(); 
+                              lcd.printf("Boton Incorrecto!"); 
+                              
+                              }
+                              
+                              
+                              ++t;
+                                if(t==1){
+                                lcd.locate(0,1);
+                                lcd.printf("Cabecera H: %d ", header);
+                                }
+                                
+                                if(t==2){
+                                lcd.locate(0,1);
+                                lcd.printf("T Alto: %d ", bit1);
+                                
+                                }
+                                if(t==3){
+                                lcd.locate(0,1);
+                                lcd.printf("T Bajo: %d ", bit0);
+                                    t=0;
+                                    }
+                              }//cierro if decimal 8
+                                                        
+                                                
+                                
+                  
+                              }//cierro while
+                            
+                                    
+                                  if(p1.falling()){
+                                ++t;
+                                if(t==1){
+                                lcd.cls();
+                                
+                                }//T1
+                              
+                                if(t==2){
+                                lcd.cls();
+                                lcd.locate(0,0);
+                                lcd.printf("T_alto: %d ", bit1);
+                                lcd.locate(0,1);
+                                lcd.printf("T_bajo: %d ", bit0);
+                                t=0; 
+                                }//T1
+                                                   
+                                                   
+                                                   }
+                                                                                      
+                                
+                                if(p2.falling()){
+                                lcd.cls();
+                                
+                                lcd.printf("%d  %d", t, num[t]);
+                                lcd.locate(0,1);
+                                lcd.printf("%d  %d", t+1, num[t+1]);
+                                }
+                                                   
+                                
+                              //Fin pulsadores
+                                  
+                          
       
-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;
-      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 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");
-      else pc.printf("0");
-      }
-      }
-      }
\ No newline at end of file
+      
+      
+      
+      
\ No newline at end of file