domingo, 17 de novembro de 2013

dd

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