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

main.cpp

Committer:
lopjohn_26
Date:
2014-05-16
Revision:
0:0239a53cf648

File content as of revision 0:0239a53cf648:

#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);
      
        }  
      
      }
      }