You are on page 1of 4

#include "mbed.

h"

DigitalOut sal(PC_13);

Serial pc(USBTX, USBRX); //Serial USB;


int c=0,a=0,b=0,k=0;
int header =0; //Variable to store the header length

int i=0;
int n=0;
int l=0;
PwmOut IRLED(PB_1);
Ticker t;
int direccion[8]={0,0,1,0,0,0,0,0};
int comando[8]= {0,1,0,0,0,0,0,0};
const int flanco=512;
int entrar=0;
DigitalOut salida(PB_0);
int valor1=0,valor2=0;
float tiempot=0;
float res=0;
void dato(int a){
switch(a){
case 0:
salida=1;

wait_us(flanco);

salida=0;
wait_us(flanco);
res=res+1.12;
break;
case 1:
salida=1;

wait_us(flanco);

salida=0;
wait_us(1650);
res=res+2.25;
break;
}
return;
}

void enviar(){

if (entrar==1){
salida=1;

wait_us(9000);

salida=0;
wait_us(4500);
for(int i=0;i<32;i++){
if(i<8 ){

dato(direccion[i]);
}
if(i>7 && i<16){l=direccion[i-8];
if(l==0){dato(1);}else{dato(0);}}
if(i>15 && i<24){dato(comando[i-16]);}
if(i>23 && i<32){l=comando[i-24];
if(l==0){dato(1);}else{dato(0);}}
}

}
tiempot=(110-9-4.5-res);

res=0;
entrar=0;
dato(0);
wait_ms(tiempot);
}
int main()
{ IRLED.period(1.0/38000.0);
IRLED = 0.5;
t.attach(&enviar,0.500);
//fro.attach_us(&organizar,26);

while (true) {
sal=!sal;

entrar=1;

}
}
///////////////
receprtor protocolo nec
#include "mbed.h"
#include <Pulse1.h>
#include"SLCD.h"
DigitalOut led(LED_RED);
DigitalOut sal(LED_GREEN);

PulseInOut irda(D4);// IR sensor input port;


Serial pc(USBTX, USBRX); //Serial USB;
int c=0,a=0,b=0,k=0;
int header =0; //Variable to store the header length
const int head_H = 9200; //+20% header length
const int head_L = 4500;//-20% header length
int i=0;
int n=0;

Ticker t;
int direccion[8]={0,0,1,0,0,0,0,0};
int comando[8]= {0,0,0,1,0,0,0,0};
const int flanco=512;
int entrar=0;
DigitalOut salida(D3);

int l=0;
SLCD slcd;
const int pulso=512;//NEC uses 562.5µs pulse bursts;
const int num_bits = 32;//8 bits address - 8 bits address logical inverse - 8 bits
data - 8 bits data logical inverse;
int num[num_bits];//Array to store logical 1 length;
int data_bin[num_bits]; //Array to store binary code transmited;
int address1; //variable to store the device address;
int address0; //variable to store the device address (inverse);
int data1; //variable to store the transmited data;
int data0; //variable to store the transmited data (inverse);

/****Las teclas del control****/


const int power =8;
const int vol1=2;
const int vol2=3;
const int ch1 =0;
const int ch2=1;

void imprimir_funcion(int dato)


{
switch(dato) {
case power:
a=1;b=0;k=0;
slcd.printf("p\n\r");
break;
case vol1:
a=0;b=1;k=0;
pc.printf("v\n\r");
break;
case vol2:
a=0;b=0;k=1;
pc.printf("b\n\r");
break;
case ch1:
pc.printf("ch\n\r");
break;
case ch2:
pc.printf("l\n\r");
break;
}

int main()
{
//fro.attach_us(&organizar,26);

while (true) {
sal=!sal;

entrar=1;
/********************Header detection************************/
ini1:
header=0;
pc.printf("\nPresiona tecla\n\r");
header = irda.read_low_us();
if (header > head_L && header < head_H) goto seguir;//verificar que este en la
tolerancia +-20%
else goto ini1;
seguir:
//leo los datos y se meten a un arreglo
wait_us(4500);
for(i=0; i<(num_bits); ++i) {
num[i]=irda.read_high_us(); //Tiempos para estado siempre alto se almacenan en
microsegundos
wait_us(400); //esperar una parte del estado bajo (562.5µs)
}
/*Imprimir en pantalla lo que obtengo*/
for(i=0; i<(num_bits); ++i) {
if(num[i]>1500) {
data_bin[i]=1; //si la longitud es mayor que 1.2ms, representa un 1
} else {
data_bin[i]=0; //si la longitud es más corta, representa un 0
}
}
pc.printf("\n\r");
address1=0;
pc.printf("Direccion en \n\rBinario:");
for(i=0; i<8; i++) {
address1=address1 + data_bin[i]*pow(2.0,(i)*1.0);
pc.printf("%d",data_bin[i]);
}
pc.printf("\n\rDecimal:%d\n\r", address1);

address0=0;
pc.printf("Direccion inversa en:\n\rBinario:");
for(i=8; i<16; i++) {
address0=address0 + data_bin[i]*pow(2.0,(i-8)*1.0);
pc.printf("%d",data_bin[i]);
}
pc.printf("\n\rDecimal:%d\n\r", address0);

data1=0;
pc.printf("Comando:\n\rBinary:");
for(i=16; i<24; i++) {
data1=data1 + data_bin[i]*pow(2.0,(i-16.0)*1.0);
pc.printf("%d",data_bin[i]);
}
pc.printf("\n\rDecimal:%d\n\r", data1);
data0=0;
pc.printf("Comando inverso:\n\rBinary:");
for(i=24; i<32; i++) {
data0=data0 + data_bin[i]*pow(2.0,(i-24)*1.0);
pc.printf("%d",data_bin[i]);
}
pc.printf("\n\rDecimal:%d\n\r", data0);
imprimir_funcion(data1);
wait(0.1);
}
}

You might also like