[ Guida ] Arduino Moduli tx/rx 433 mhz Far apprendere il telecomando

Come già scritto sto cercando di creare un allarme in tutto e per tutto per casa mia ..

Ora qui vi presento e rilascio il codice per inviare un codice XXXXXX dal trasmettitore 433 così da poterlo copiare con un telecomando e poi riscontrare se tale telecomando sia stato copiato correttamente

Facciamo conto che l'emettitore si collegato al pin 3
e il ricevitore al pin 2

mySwitch.enableTransmit(3);
 mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2

Modificate il codice del telecomando da far apprendere e verificare : 5588305

con quello che a voi più piace !

eccovi il codice :

// includo la libreria da utilizzare per lcd
  #include <LiquidCrystal.h>
// imposto i pin che utilizzera lcd 
  LiquidCrystal lcd(7, 6, 5, 38,40,42,44,46,48,50,52);
// imposto il pin per accendere l lcd e giocare con il suo contrasto
  int backLight = 8;


// <<-------------Inizio 433 reciver

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

// <<------------- Fine 433 reciver  

int copia = 0 ;

void setup() {

  Serial.begin(9600);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(3);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
  
  // Abilito LCD 
    Serial.print("Avvio L'LCD \r\n\r");
    pinMode(backLight, OUTPUT);
 // seleziono il contrasto dell lcd
    digitalWrite(backLight, 60); 
 // imposto i caratteri e le righe dell lcd
    lcd.begin(20,4);              
    lcd.clear();                  
 // imposto l'intestazione 
    lcd.setCursor(0,0);
    lcd.print("Remote : All. ON ");
    

 
  
}

void loop() {
  

  
   
  
  
  // imposto il tempo di uscita da casa 
        
        if ( copia == 1 ){
         
          lcd.setCursor(0,1);
          lcd.print("   Copia Avvenuta   ");
          lcd.setCursor(0,2);
          lcd.print("   Uscire Dal Menu   ");
          lcd.setCursor(0,3);
          lcd.print("                    ");
         
        }else{
        
            int ms = 5000;
            int refreshms = 250;  
            for (int i = 1; i <= 5000 / refreshms ; i++){    
              
              lcd.setCursor(0,1);
              lcd.print("Clonare codice Prego");
              mySwitch.send(5588305, 24);  
              
              
              ms -= refreshms;
         
                  // se i secondi sono minori di due cifre sposto i secondi 
                  if ( (ms/1000) <= 9 ){
                    
                    lcd.setCursor(15,3);
                    lcd.print((ms/1000));
                    lcd.print(" s");
                    //Serial.print((ms/1000));
                    //Serial.print(" SEC\r\n\r");
                    
                  }else{
                    
                    lcd.setCursor(15,3);
                    lcd.print((ms/1000));
                    lcd.print("s");
                      
                      
                    //Serial.print((ms/1000));
                    //Serial.print("SEC\r\n\r");
                  }
              
              
              
              // attendo due secondi e pulisco il display
              if ( (ms/1000) < 26 ){
                
                lcd.setCursor(0,1); 
                lcd.print("                    ");
                lcd.setCursor(0,2);
                lcd.print("                    ");
                
              }
              
              delay(refreshms);
        
              if (i == 5000 / refreshms)
              {
                //operazioni da eseguire alla fine del countdown
                ms = 5000;
                lcd.setCursor(0,1);
                lcd.print("Prova ricezione     ");
                lcd.setCursor(0,2);
                lcd.print("                    ");
    
              }   
            } 
            // fine trassmissione codice 
            
            
               
            
            
            
            // ricezione 
            int ms1 = 10000;
            int refreshms1 = 250;
            
            for (int o = 1; o <= 10000 / refreshms1 ; o++){    
              
              if (mySwitch.available()) {
                
                int value = mySwitch.getReceivedValue();
                if (value == 0) {
                  Serial.print("Unknown encoding");
                } else {
                
                  
                  if (mySwitch.getReceivedValue() == 5588305 ){
                 
                     
                      lcd.setCursor(0,1);
                      lcd.print("Copia Avvenuta      ");
                      lcd.setCursor(0,2);
                      lcd.print("Con successo        ");
                      copia = 1 ;
                      delay(4000);
                      break;
                
                  }else{
                    
                      lcd.setCursor(0,1);
                      lcd.print("Prova ricezione code :  ");
                      lcd.setCursor(0,2);
                      lcd.print(mySwitch.getReceivedValue());
                    
                  }
                
                
                }
                
              }
              mySwitch.resetAvailable();
              
              
              ms1 -= refreshms1;
         
                  // se i secondi sono minori di due cifre sposto i secondi 
                  if ( (ms1/1000) <= 9 ){
                    
                    lcd.setCursor(15,3);
                    lcd.print((ms1/1000));
                    lcd.print(" s");
                    //Serial.print((ms/1000));
                    //Serial.print(" SEC\r\n\r");
                    
                  }else{
                    
                    lcd.setCursor(15,3);
                    lcd.print((ms1/1000));
                    lcd.print("s");
                      
                      
                    //Serial.print((ms/1000));
                    //Serial.print("SEC\r\n\r");
                  }
              
              
              delay(refreshms1);
        
              if (o == 10000 / refreshms1)
              {
                //operazioni da eseguire alla fine del countdown
               
               lcd.setCursor(0,1);
               lcd.print("Ripetere la Copia   ");
               lcd.setCursor(0,2);
               lcd.print("Copia non eseguita  ");
               delay(4000);
               break;
    
              }   
            } 
      
       }
}

ed il video dimostrativo

aggiungo una versione per il serial monitor e semplificata con millis().

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
unsigned long code = 5588303; // inserire codice da programmare
long previousMillis = 0;

void setup() {
Serial.begin(9600);
mySwitch.enableTransmit(3); // Transmitter is connected to Arduino Pin #10
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
}

void loop() {
// inizio trassmissione
Serial.print("Trasmissione codice in corso (10sec): ");
Serial.println( code );
previousMillis = millis();
while ( millis() < ( previousMillis + 10000 ) ) {
mySwitch.send( code, 24 );
}
// fine trassmissione

// inizio ricezione
Serial.println("Premere il tasto appena programmato per la verifica");
previousMillis = millis();
boolean received = false;
while ( millis() < ( previousMillis + 5000 ) ){
if (mySwitch.available()) {
unsigned long receivedCode = mySwitch.getReceivedValue();
if ( receivedCode == code ){
Serial.println("*** Copia Avvenuta ");
received = true;
break;
}
else{
Serial.println("
Copia Fallita ");
Serial.print("Codice ricevuto: ");
Serial.println(receivedCode);
received = true;
break;
}
}
}
if(!received) Serial.println("
Timeout! Nussun codice ricevuto ***");
Serial.println("-------------------------------------------------------");
mySwitch.resetAvailable();
}

scusatemi sto cercando di far acquisire ai telecomandi clone cinesi il codice che voglio io
se ho ben capito inviate il codice per 10 secondi