Salve, io sono nuovo nel mondo Arduino e vorrei imparare a conoscerlo, volevo per cominciare come primo progetto a costruire una lampada a levitazione

Quindi almeno accende?

È già buona...

Si si accende ma non rimane acceso, ho controllato la libreria di virtualwire che ho scaricato, ma è normale che quando clicco su transmitter non mi si apre niente?

Tu sai che esistono pulsanti ed esistono interruttori

Adesso devi decidere se continuare usando interruttori oppure realizzare una autoritenuta ai pulsanti

Ti sei preso una bella gatta da pelare volendo fare una lampada a levitazione, direi che cominciare a risolvere in autonomia questa cosa dell'accende-spegne è il primo piccolissimo passo da compiere, anche solo per fare un minimo di esperienza

se vuoi comandare il pin in uscita tramite seriale elimina o commenta le seguenti right nel loop

  int buttonState =  digitalRead(PB_pin);
  if (buttonState!=prec_Stato)
  {  
  if (buttonState==HIGH)
   vw_send((uint8_t *)msg_ON, strlen(msg_ON));
  
  else
     
    vw_send((uint8_t *)msg_OFF, strlen(msg_OFF));
    vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo
    Serial.println("Stato: "+String(buttonState) + " - Prec. Stato: "+String(prec_Stato));
    digitalWrite(LED_pin, buttonState);
    prec_Stato=buttonState;

se vuoi usare un comando fisico per commutare l'uscita elimina o commenta nel loop le righe qui sotto

    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen)) // Non-blocking    
	  buf[buflen]='\0'; // Metto il terminatore di stringa
    if (strncmp((char *)buf,"LED_ON",buflen)==0)
    digitalWrite(LED_pin, HIGH); // Accendo il LED
    else if (strncmp((char *)buf,"LED_OFF",buflen)==0)
    digitalWrite(LED_pin,LOW); // Spengo il LED
    Serial.print("Comando Ricevuto (" +String(buflen)+" car.): ");
    Serial.println((char *)buf+String("//"));

fai questo e dicci cosa succede...

Eh, si, in linea generale lo hai scritto che vuoi fare questa lampada, ma quello che devi descrivere è come deve funzionare ossia "quando succede questo fa questo, poi quando succede quest'altro fai quest'altro..." eccetera. Inoltre, scusami, ma nel post#48 ti ho posto delle domande (quelle dopo i tre punti), puoi rispondere?

A parte questo, se stai semplicemente "litigando" con la gestione del pulsante per tua poca esperienza con Arduino, ti consiglio di fare sempre una cosa per volta. In pratica inizia facendo uno sketch semplice, senza virtualwire o altro, ma solo con un pulsante ed un LED: cerca di fare in modo che quando prem il pulsante il LED si accende, e quando lo premi nuovamente si spegne.

Quando avrai raggiunto questo, allora potrai andare al passo successivo che consiste nella gestione dei messaggi ON e OFF da inserire proprio nei punti dove rilevi la pressione del pulsante e, in base a questo, mandi e ricevi i messaggi desiderati, e vedrai che inizierai a raccapezzartici. Ma intanto rispondi alle mie domande così capisco meglio l'ambito.

Ciao, allora ctrl+T non l'ho fatto, la lampada funziona per metà cioè non rimane accesa. Il suo funzionamento in poche parole quando premo l'interruttore attraverso un trasmettitore dovrebbe mandare un segnale al ricevitore di accedere la lampada, e viceversa quando lo premo una seconda volta dovrebbe spegnersi

Appena finisco di lavorare lo faccio e poi ti dico

Perché?

Se non cominci a tenere in ordine il tuo programma non andrai da nessuna parte

Forse non hai ben chiaro l'impegno necessario per riuscire in quello che ti sei proposto

Per fare un paragone:
È come se uno appena uscito dal sanatorio volesse scalare l'everest, in bicicletta...

Fare un semplice Ctrl T è come fare esercizi di respirazione, se non li fai non ti arrampichi, e nessuno te li può fare per te

Anche questa cosa dello accendi rimane non rimane...
L'analisi del problema è semplice, anchesi si trova facilmente in rete
Io ti ho fatto l'esempio di pulsanti ed interruttori

Per come la vedo io, se da solo non ne esci da questa "quisquilia" non sperare di arrivare alla lampada a levitazione

Purtroppo i "muscoli per arrampicarsi" li devi avere tu, e se non sai fare un on-off significa che non li hai....

1 Like

Dove finisce l'else?...
Come detto più volte, poi, le String nei print sono solo contoroproducenti, perché il tempo richiesto per la scrittura è lo stesso dei print separati.

come ho scritto in un post precedente sembra una scrittura basata sulle regole di python...

Non lo so, ma questo è C. Non puoi scrivere in inglese con le regole del francese!

io l'ho fatto presente un po' di post fa...sotto forma di supposizione...poi non c'è stata conferma o smentita...ma lo stile di identazione continua...quindi il dubbio si rafforza.

@1693lm, ti è chiaro che, senza parentesi graffe, come conseguenza di un if vero o di un else viene eseguita solo la prima istruzione che segue, mentre il resto viene eseguito comunque?...

Credo che in realtà vada bene come ha scritto

Trasmette o ON oppure OFF

E poi, comunque, fa il wait

Credo un pochino troppo "fine" per non essere copiato in tronco
Però dovrebbe andare

Ma ci sono "altri" problemi

Ad esempio che dato il numero di post e secondo la "dura legge delle tre pagine" oramai il naufragio è probabile...

Ripeto, prova a seguire il mio consiglio, ossia (mi auto-quoto): "fare sempre una cosa per volta. In pratica inizia facendo uno sketch semplice, senza virtualwire o altro, ma solo con un pulsante ed un LED: cerca di fare in modo che quando prem il pulsante il LED si accende, e quando lo premi nuovamente si spegne.
Quando avrai raggiunto questo, allora potrai andare al passo successivo"
Se hai problemi anche col primo sketch, postalo e vediamo.

ciao avrei un ultima domanda, poi non stresso più nessuno, io sto lo sto provando solo con una scheda arduino uno. la mia domanda è, può funzionare ugualmente o per forza mi servono due arduini? e se servono due adruini, li posso utilizzare due diversi, cioè, un arduino uno collegato all' interruttore e al trasmettitore, e un secondo arduino micro collegato al ricevitore e alla lampada?

ah un ultima cosa, ci sono manuali utili e dove spiegano bene come poter programmare, anche su amazon da comprare?

Hm se i tuoi dubbi sono questi, direi che prima di parlare dei dettagli e del codice devi chiarire meglio a te stesso cosa vuoi fare o cosa vuoi ottenere. Se vuoi semplicemente accendere il LED della lampada premendo un pulsante potresti anche farlo senza Arduino, oppure con un solo Arduino. Oppure vuoi comandarla da remoto, quindi un Arduino che fa da "master" ossia alla pressione di un suo pulsante mandi il comando di accensione o spegnimento ad un altro Arduino collegato alla lampada che fa quindi da "slave" (ma se è solo accensione e spegnimento non vedo un grosso vantaggio). La comunicazione può avvenire in vari modi, da una connessione radio a 433MHz, al Bluetooth, al WiFi. Certo, introdurre nel progetto un Arduino potrà essere utile anche successivamente se poi vorrai estendere la cosa, ad esempio non limitandoti ad un pulsante ma che so, accendere automaticamente la lampada ad una certa ora e spegnerela ad un'altra (oppure con una lampada RGB cambiare colore in base all'ora del giorno).

Ma prima di tutto se vuoi iniziare a saper sviluppare (ossia "capire cosa puoi fare, come potrebbe funzionare, e poi cosa stai facendo") devi partire dalle basi, evitando di cercare di modificare codice scritto da altri senza capire come funziona o peggio cercare di modificarlo.

In rete ci sono parecchi siti e canali youtube dove trovare qualche sorta di corso online da seguire sulle basi di Arduino e della programmazione, ma puoi anche iniziare da solo prendendo i vari sketch di esempio che trovi nell'IDE di Arduino stesso, vai nel menu "File", poi "Esempi" inizia da "01 Basics" in poi, sperimentando e vedendo come funzionano. E poi inizia quindi a fare un tuo sketch, per iniziare quello che dici, ossia colleghi un pulsante ed un LED e provi a fare in modo di accendere il LED quando premi il pulsante, e spegnerlo quando lo premi nuovamente (ma tra gli esempi troverai già qualcosa di simile...).
Solo a quel punto potrai pian piano cercare di fare cose più elaborate. Fidati, studiare e sperimentare è l'unica cosa che ti consente di creare progetti in modo "decente". :wink:

1 Like

... lo hai letto il punto 16.1 del REGOLAMENTO ? Ci sono indicati sia de pdf da scaricare che che un ottimo libro che trovi su Amazon :wink:

Guglielmo

Ciao, l'accensione ON OFF l'ho risolta, ora devo farlo insieme al trasmettitore e al ricevitore. Un pò alla volta ci sto arrivando, per me è la prima volta che programmo in c, per cui è già un buon risultato :smiley:

1 Like