Arduino RF
domingo, 17 de novembro de 2013
Arduino Comtrole PPA
///////em português brasil ////////////////////////////////////////
/*
ARDUINO DECODIFICADOR HT6P20B COM RESISTOR DE 2M2 NO OSC.
ESTE CÓDIGO NÃO USA TIMER, INTERRUPÇÃO EXTERNA E NEM PINO DEFINIDO DE ENTRADA.
ELE MEDE O TEMPO DO PILOT PERIOD E COMPARA SE ESTÁ DENTRO DA FAIXA DEFINIDA,
SE TIVER ELE PASSA PARA CODE PERIOD E FAZ AS MEDIDÇÕES DE TEMPO EM NIVEL ALTO
SE TIVER DENTRO DA FAIXA ACRECENTA BIT 1 OU 0 NA VARIAVEL _DATA CASO NÃO ZERA AS VARIÁVEIS E RE-INICIA
APOS RECEBER TODOS OS BITS ELE PEGA OS 4 BITS DO ANTE CODE E TESTA PARA SABER SE O CÓDIGO FOI RECEBIDO
CORRETAMENTE, CASO RECEBIDO CERTO ELE COLOCA A VARIAVEL ANTCODE EM 1.
CRIADO POR: JACQUES DANIEL MORESCO
DATA: 28/02/2012 USANDO ARDUINO 0022.
FONES:54 3324 2251 54 9206 7168
E-MAIL: ibisul@ibisul.com.br
Permitido o uso público, mas deve-se manter o nome do autor.
*///Segunda modificação Sérgio Navarro Brasil
int x,startbit,ctr,dataok,t1,larpulso,larpulso1,larpulso2,larpulso3,larpulso4,bt1,bt2,antcode=0;
unsigned long _data=0;
unsigned long _dur,_dur1;
byte _pin; // PINO receber o sinal RF digital.2
int counter = 1;////////////////////CANAL 1//////////////"variavel Counter"
int countero = 1;////////////////////CANAL 2//////////////"variavel Countero"
////////PODE ADICIONAR VARIOS CANAIS...
////////CADA CANAL DEVE TER DUAS VARIAVEIS
void setup()
{
_pin=2;
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(13,OUTPUT);
pinMode(9, OUTPUT);
pinMode(3, OUTPUT);
}
void loop()
{
digitalWrite(3, digitalRead(2)); //Pisca o LED conforme o valor da entrada digital, testar interferencias.
if (startbit==0)
{// Testa o tempo piloto até o Bit de inicio;
_dur = pulseIn(_pin, LOW);
if(_dur > 8000 && _dur < 12000 && startbit==0)
{
larpulso=_dur/23;
larpulso1=larpulso-50;
larpulso2=larpulso+50;
larpulso3=larpulso+larpulso-50;
larpulso4=larpulso+larpulso+50;
startbit=1;
_dur=0;
_data=0;
dataok=0;
ctr=0;
}
}
// Se o Bit de inicio OK ENTÃO Inicia a medição do tempo em Nivel ALTO dos sinais, e testa se o tempo está na faixa.
if (startbit==1 && dataok==0 && ctr < 28)
{
++ctr;
_dur1 = pulseIn(_pin, HIGH);
if(_dur1 > larpulso1 && _dur1 < larpulso2) // Se a largura de pulso é entre 1/4000 e 1/3000 segundos
{
_data = (_data << 1) + 1; // anexar um * 1 * para a extremidade mais à direita do buffer
}
else if(_dur1 > larpulso3 && _dur1 < larpulso4) // Se a largura de pulso é entre 2/4000 e 2/3000 segundos
{
_data = (_data << 1); // anexar um * 0 * para a extremidade mais à direita do buffer
}
else
{
/* força finalização do laço */
startbit=0;
}
}
if (ctr==28)
{ if (bitRead(_data,0)==1)
{
if (bitRead(_data,1)==0)
{
if (bitRead(_data,2)==1)
{
if (bitRead(_data,3)==0)
{
antcode=1;
}
}
}
}
if (antcode==1)
{// Se foram recebidos todos os 28 Bits, o valor vai para a variavel _data e pode ser usada como exemplo abaixo.
dataok=1;
Serial.println(_data,DEC);
Serial.println(counter,DEC);
ctr=0;
startbit=0;
antcode=0;
delay(100);
////////////////////CANAL 1//////////////"variavel Counter"
/////Colocar codigo botao liga
if (_data==160262501)
{ if(counter==1)
digitalWrite(13, HIGH);
counter++;
if(counter==3)
digitalWrite(13, HIGH);
if(counter==3)
counter=(1);
}else{
////////////////////CANAL 2//////////////"variavel Countero"
/////Colocar Codigo botao Desliga
if(_data==160262485)
{
if(countero==1)
digitalWrite(13, LOW);
countero++;
if(countero==3)
digitalWrite(13, LOW);
if(countero==3)
countero=(1);
}
}
}
}
}
//////////VIDEO VIDEO sistema em Funcionamento
Assinar:
Postagens (Atom)