ciao a tutti, io avrei bisogno di inviare un codice in 433mhz per 20 secondi continui ma non riesco a capire come fare.
ho visto un po di guide ma tutte replicano un impulso secco, cosa che a me non va bene.
forse cè qualche funzione che non conosco o un determinato utilizzo di millis.
questo è quello che ho trovato per l'invio secco alla pressione del tasto.
io dovrei simulare la funzione di tasto5 e tasto6, ma dando io un impulso, lui deve inviare per 20 secondi :
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
#define debounce 200 //Tempo di rimbalzo
const int tasto1 = 2; // tasto1 luce A
const int tasto2 = 3; // tasto2 luce B
const int tasto3 = 4; // tasto3 luce C
const int tasto4 = 5; // tasto4 luce D
const int tasto5 = 6; // tasto5 luce giorno on
const int tasto6 = 7; // tasto6 luce giorno off
const int tasto7 = 8; // tasto7 LP on/off
const int tasto8 = 9; // tasto8 cucina on/off
const int cancello = 12; // output per il relè cancelletto(relè con contatto NO. ,cablato in parallelo al tasto di un telecomando.
const int segnaleout1 = 13; // led di riscontro
// memoria dello stato
int tastoState1 = 0;
int tastoState2 = 0;
int tastoState3 = 0;
int tastoState4 = 0;
int tastoState5 = 0;
int tastoState6 = 0;
int tastoState7 = 0;
int tastoState8 = 0;
//variabili di stato
int led1state=0; // stato riferito alla luce ......
int led2state=0; // stato riferito alla luce ......
unsigned long previousMillis1 = 0; // memoria temporale pressione tasti
unsigned long previousMillis2 = 0; // memoria temporale
unsigned long previousMillis3 = 0; // memoria temporale
unsigned long previousMillis4 = 0; // memoria temporale
unsigned long previousMillis5 = 0; // memoria temporale
unsigned long previousMillis6 = 0; // memoria temporale
unsigned long previousMillis7 = 0; // memoria temporale
unsigned long previousMillis8 = 0; // memoria temporale
const long interval = 300; // intervallo dalla pressione tasti
const long interval1 = 300; // intervallo dalla pressione ripetuta del tasto ( clic1=>on dopo 3 sec clic1=>off)
void setup()
{
//settaggio input/output
mySwitch.enableTransmit(10);
pinMode(tasto1, INPUT); // tasto
pinMode(tasto2, INPUT); // tasto
pinMode(tasto3, INPUT); // tasto
pinMode(tasto4, INPUT); // tasto
pinMode(tasto5, INPUT); // tasto
pinMode(tasto6, INPUT); // tasto
pinMode(tasto7, INPUT); // tasto
pinMode(tasto8, INPUT); // tasto
pinMode(cancello, OUTPUT); // uscita cancello
pinMode(segnaleout1,OUTPUT); // led di riscontro
Serial.begin(9600);
}
void loop()
{
unsigned long currentMillis1 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis2 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis3 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis4 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis5 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis6 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis7 = millis(); // assegna il tempo alla variabile
unsigned long currentMillis8 = millis(); // assegna il tempo alla variabile
tastoState1 = digitalRead(tasto1); // assegna il valoe del pin in alla variabile
tastoState2 = digitalRead(tasto2); // assegna il valoe del pin in alla variabile
tastoState3 = digitalRead(tasto3); // assegna il valoe del pin in alla variabile
tastoState4 = digitalRead(tasto4); // assegna il valoe del pin in alla variabile
tastoState5 = digitalRead(tasto5); // assegna il valoe del pin in alla variabile
tastoState6 = digitalRead(tasto6); // assegna il valoe del pin in alla variabile
tastoState7 = digitalRead(tasto7); // assegna il valoe del pin in alla variabile
tastoState8 = digitalRead(tasto8); // assegna il valoe del pin in alla variabile
if (tastoState1 == HIGH)
{
if (currentMillis1 - previousMillis1 >= interval1) //se si verifica questa condizione, esegue il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
previousMillis1 = currentMillis1; // ripristina lintervallo
// FUNZIONE PASSO PASSO ACCENSIONE LUCI ( SEGNALE 433)
if (led2state==LOW)
{
digitalWrite(segnaleout1,HIGH); // accende il pin 13 di bordo per segnalare linvio dati
led2state=HIGH; // porta allo stato alto la variabile memoria
mySwitch.send(****, 24); // accendi luce con il codice ( sostituire asterischi con il codice rf)
digitalWrite (segnaleout1,LOW); //spegne il pin 13 di bordo per segnalare linvio dati ( lampeggio)
}
else
{
digitalWrite (segnaleout1,HIGH);
led2state=LOW; // porta allo stato basso la memoria
mySwitch.send(****, 24); // spegni luce con il codice ****
digitalWrite (segnaleout1,LOW) ;
}
}
}
if (tastoState2 == HIGH)
{
if (currentMillis3 - previousMillis3 >= interval) // se, continua il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
digitalWrite(segnaleout1,HIGH);
previousMillis3 = currentMillis3;
mySwitch.send(5393, 24); // LUCE salottoTV ( 5393 ) NB E USATO SOLO IL CODICE DI on del radiocomando e sulla ricevente funzione passo passo.
digitalWrite (segnaleout1,LOW);
}
}
if (tastoState3 == HIGH)
{
if (currentMillis3 - previousMillis3 >= interval) // continua il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
digitalWrite(segnaleout1,HIGH);
previousMillis3 = currentMillis3;
// LUCE STUDIO NB (cambiare il codice su rx E USATO SOLO IL CODICE DI OFF e sulla ricevente funzione passo passo.
mySwitch.send(14562672, 24); // LUCE STUDIO (14441524/14562672) NB E USATO SOLO IL CODICE DI OFF e sulla ricevente funzione passo passo.
digitalWrite (segnaleout1,LOW);
}
}
if (tastoState4 == HIGH) // COMANDO CANCELLO, ( RELE CON CONTATTO NO.).
{
if (currentMillis4 - previousMillis4 >= interval) // continua il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
digitalWrite(segnaleout1,HIGH);
previousMillis4 = currentMillis4;
digitalWrite(cancello,HIGH); // eccitazione relè COMANDO relè per apertura cancello
delay(500); // TEMPO di scambio contatto
digitalWrite(cancello,LOW); // SPEGNIMENTO.
digitalWrite (segnaleout1,LOW);
}
}
if (tastoState5 == HIGH)
{
if (currentMillis5 - previousMillis5 >= interval) // continua il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
digitalWrite(segnaleout1,HIGH);
previousMillis5 = currentMillis5;
mySwitch.send(4433, 24); // ACCENDI POMPA PISCINA
digitalWrite (segnaleout1,LOW);
}
}
if (tastoState6 == HIGH)
{
if (currentMillis6 - previousMillis6 >= interval) // continua il programma una volta, dopo si disabilita per un tempo:(intervallo)
{
digitalWrite(segnaleout1,HIGH);
previousMillis6 = currentMillis6;
mySwitch.send(4436, 24); // SPEGNI POMPA PISCINA
digitalWrite (segnaleout1,LOW);
}
}
