Professional Documents
Culture Documents
Emisión Protocolo Nec1
Emisión Protocolo Nec1
h"
DigitalOut sal(PC_13);
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);
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);
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);
}
}