PRESA RF 433 MHZ

Buongiorno ragazzi vorrei chiedervi un aiuto per favore nel programmare. Vorrei inserire un pulsante in questo programma per far si che al premere di questo pulsante il trasmettitore mi trasmette il segnale in bit. Vorrei accendere una presa con relay fatto apposta con un ricevitore che mi riceve il segnale e fa scattare il relay. Sono riuscito ad accedere e spegnere solo una volta. Vorrei farlo tutte le volte che ho la necessità di farlo premendo un pulsante. Questo è esempio del mio programma non saprei dove inserire il pulsante come scrivere. Non mene intendo di programmazione. Sono due settimane. Che faccio le ricerche non trovo nulla che potrebbe essere simile.

void setup() {

Serial.begin(9600);
mySwitch.enableTransmit(10);
mySwitch.setPulseLength(380);

}

void loop() {
Serial.println("Invio segnale per accendere");
mySwitch.send("111011110101011001011100");
delay(5000);

Serial.println("Invio segnale per spegnere");
mySwitch.send("111000111001100100101100");
delay(5000);
}

Ti basta definire un ingresso a cui collegare un interruttore e con un'istruzione "if" (vuol dire "se") testare lo stato dell'ingresso. L'esito del test determina l'invio di una o l'altra delle combinazioni binarie di accensione/spegnimento.

Detto in pseudocodice si può scrivere come:

SE ingresso è a 1 ALLORA accendi
ALTRIMENTI se ingresso è a 0 ALLORA spegni

Mi raccomando usa un interruttore come ingresso, non un pulsante, sennò ti complichi la vita.

Qua trovi esempi di interruttori di varie forme:
electromechanical-components/switches/toggle

A livello di programmazione, puoi studiare quest'esempio tratto dalla reference di Arduino:

Button

E' un programma molto semplice e facile da interpretare anche per inesperti, se ti applichi con minimi adattamenti riesci a copiare quasi 1:1 le istruzioni che ti servono.

Una volta che sei riuscito con quell'esempio, puoi migliore ulteriormente il programma aggiungendo la funzione antirimbalzo:
interruttore con antirimbalzo

Grazie mille del consiglio il problema mio è che non so proprio dove devo scrivere quest'istruzione if e come scriverla. Fino a li ci sono arrivato che dovrei far si che quando è 1 invia il segnale quando è 0 non invia. Ma non saprei come scrivere in java. Se mi puoi aiutare in qualche modo. Io in poche parole sto facendo una piccola domotica a casa per accendere e spegnere 4 luce di 4 stanze diverse.

Hai almeno provato a leggere la guida del primo link (Button)? Lì viene riportata un'istruzione "if" per accendere/spegnere un LED con un pulsante:

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Ok il tuo obiettivo non è comandare un LED, però il principio e addirittura la condizione logica (buttonState == HIGH) sono gli stessi di quelli che portano ad accendere/spegnere una presa remotata.

Ragioniamo un attimo. Nel tuo programma hai due funzioni mySwitch.send una che accende (1) e l'altra che spegne (0), viceversa nell'istruzione "if" hai due digitalWrite che mettono rispettivamente ad HIGH (1) e a LOW (0) un'uscita digitale (il LED). I due comandi, anche se diversi, hanno un analogo effetto pratico: mettono a 1 o a 0 qualcosa. Ripeto che la condizione dell'interruttore che fa lo scambio fra acceso/spento è la stessa in tutto e per tutto, dunque la conclusione è che ti resta da sostituire i comandi che vengono svolti fra le parentesi graffe con quelli del tuo programma ::).

Nota bene che dentro la variabile buttonPin, devi scrivere il numero del PIN dove hai collegato l'interruttore. La lettura del PIN, cioè la rilevazione dello stato fisico dell'interruttore, avviene con la digitalRead. Esempio:

const int buttonPin = 2; // the number of the pushbutton pin

buttonPin è una variabile globale, il suo valore è lo stesso in tutto il programma, e devi scriverla PRIMA della funzione setup. Se non hai capito, guarda l'esempio nel primo link.

Buongiorno grazie mille ancora... Ora cerco di scrivere il programma poi ti farò vedere sperando sia giusto. Grazie ancora... volevo chiederti se avevi un contatto privato se potevo scriverti anche li.

Disi29:
Buongiorno grazie mille ancora... Ora cerco di scrivere il programma poi ti farò vedere sperando sia giusto. Grazie ancora... volevo chiederti se avevi un contatto privato se potevo scriverti anche li.

I messaggi privati si possono mandare direttamente dal forum. Tuttavia preferisco che si continui la discussione pubblicamente sul forum, perché altri utenti possano beneficiare dei risultati. Se vuoi porre domande su argomenti nuovi, puoi aprire nuove discussioni.

>Disi29: ... come puoi vedere nel REGOLAMENTO (... che ti consiglio di rileggere con molta attenzione), al punto 12 ... i messaggi privati, per richieste tecniche, sono proibiti.

Se hai domande da fare, falle sul forum ... le tue domande rimarranno visibili e, un domani, un altro utente, leggendole e leggendo le risposte, potrà sicuramente imparare qualche cosa e quindi ... diverranno utili per tutta la comunità.

Grazie,

Guglielmo

chiedo scusa, avevo pensato di scrivere in privato perché avevo visto che nessuno mi rispondeva prima solo una persona... grazie mille ancora.

Se non ho capito male vuoi aggiungere ap progetto attuale il fatto che, quando viene remuto un pulsante, faccia qualcosa (non ho capito cosa).
Quale é il problema:
Non sai leggere il pulsante?
Non sai fare quella cosa?
Non sai unirlo allo scatch attuale?

Inoltre io ho un dubbio:
Vedo che usi una ,,,.send ("10010...");
Sembra che tu voglia inviare un insieme di bit, ma sembra che passi una stringa di char. Va bene? Non ci sarebbe un modo più diretto, usando magari un long con gli stessi bit?

buongiorno allora ora mi spiego meglio, ho dei relè a 220v che hanno ricevitore per ricevere il segnale RF 433 Mhz. vorrei mettere questi relè in ogni stanza sono 4. una volta inseriti nelle apposite prese collegati con illuminazione, vorrei farli accendere inviando un messaggio al microcontrollore di accendere per esempio luci bagno tramite cellulare con la connessione wifi. vorrei andate passo per passo iniziando con accendere con un pulsante ogni stanza un pulsante che al premere mi invia un insieme di send ("10010") che corrispondere a un determinato relè che mi accende la stanza che ho deciso. sul arduino ci ho messo un trasmettitore che invia un insieme di bit che ho deciso io che corrispondono a un relè che attacca e stacca. vorrei fare in modo da inserire un pulsante oppure se mi dite subito con bluetooth come posso fare. io sono riuscito ad accendere e spegnere un relè con questo programma

void setup() {

Serial.begin(9600);
mySwitch.enableTransmit(10);
mySwitch.setPulseLength(380);

}

void loop() {
Serial.println("Invio segnale per accendere");
mySwitch.send("111011110101011001011100");
delay(5000);

Serial.println("Invio segnale per spegnere");
mySwitch.send("111000111001100100101100");
delay(5000);
}

io non mene intendo minimamente di programmazione fino ad ora ho fatto sempre copia e incolla e adatto il mio progetto che mi serve riesco ad apportare piccole modifiche.Nel void loop non riesco a capire come inserire il pulsante oppure un interruttore che è piu facile mi ha detto krypton18 che è stato molto paziente con lo lo ringrazio ancora. come scrivere il programma con mySwitch.send("111011110101011001011100"); da come mi è stato detto prima da come ho capito anche io in poche parole apposto di myswitch.send dovrei inserire digitalwrite. facendo cosi io penso che il programma non mi invia piu la stringa di bit scritto dopo myswitch.send. ho pensato anche di intervenire sul mySwitch.enableTransmit(10); ma non succede niente, ho pensato di intervenire sul alimentazione cioe mettere in serie al filo data che va a collegarsi al trasmettitore un pulsante che al premere mi invia questi bit. se mi potete aiutare con un po di pazienza, scusate per come ho scritto.

Disi29:
buongiorno allora ora mi spiego meglio, ho dei relè a 220v che hanno ricevitore per ricevere il segnale RF 433 Mhz.

Mi auguro che siano dei prodotti commerciali "certificati" ... perché, in caso contrario, se sono cose autocostruite, devo chiudere questo thread (REGOLAMENTO, punto 15 e suoi sottopunti).

Quindi ... dammi il link del prodotto per mostrare di cosa parliamo e solo poi si può proseguire.

Guglielmo

P.S.: Ah ... in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

433 Mhz Universale Telecomando Senza Fili Interruttore AC 85 V ~ 250 V 110 V 220 V 2CH Relè Modulo Ricevitore e RF 433 Mhz Telecomandi
http://s.aliexpress.com/nueuUj2i?fromSns=Copia negli appunti

  1. dubito fortemente che quell'accrocchio sia certificato "CE" ed omologato per l'installazione in Italia.

  2. NON è una spina che infili in una presa, ma è un aggeggio che prevede la manomissione di un impianto esistente.

  3. necessità che tu metta le mani sull'impanto a 220V per collegarcelo e questo è contrario al REGOLAMENTO, punto 15 e suoi sottopunti.

Mi spiace, ma debbo chiudere questo tuo thread e ti consiglio di guardare, invece che quelle porcherie di schedine (del tutto inadatte ad un sicuro collegamento con la rete 220V), i prodotti della linea Sonoff di ITead ... almeno loro hanno delle vere "spine" che infili in una presa e controlli a distanza, senza dover manomettere l'impianto elettrico.

Guglielmo