Go Down

Topic: Programmazione cubo led (Read 14143 times) previous topic - next topic

maggio93

Altra domandona... dopo aver imparato a programmare il cubo (nel mio piccolo) volevo sapere come faccio, con un pulsante, a cambiare sequenza di accensione dei led... cioè, cosa scrivo?? come faccio?? Graziee!! ; )

menniti


@Michele Menniti mi vergogno a dirlo... lo faccio?? ma si da, tanto sono qui per imparare... Con minibloq sbagliavo qualcosa e me li accendeva tutti e due... Ho preso il codice di esempio del Blink e l'ho modificato con "l'ide??" di arduino e va... Perdonatemi eh!!! :D ora provo ad imparare qualcosa... ma ho già fatto una sequenza solo con la speranza che funzionasse ma senza sapere troppo di C Scusatemi vi ringrazio moltissimo...

ma figurati, averti qui sotto la mia ascia svedese ]:D
Il pulsante lo controlli con una logica "if"
if pulsante == HIGH  {
incrementi una variabile "sequenza" di 1
switch case
     case 1:
          sequenza 1()
     case 2:
          sequenza 2()
     case x:
     azzeri la variabile sequenza e ricominci daccapo.}
Bada che questo NON è un codice ma solo una idea scritta in codice maccheronico, studiati i comandi e studiati anche il debounce per il pulsante oppure le sequenze diverranno assolutamente casuali ;)
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

maggio93


Bada che questo NON è un codice ma solo una idea scritta in codice maccheronico

Beh, è l'unica cosa che ho capito!!! hahaha ...gli "argomenti" da studiare quali sono?? cioè per esempio.. io so a stento cos'è una variabile  :smiley-fat: quindi non saprei come incrementarla.. poi switch case!?  :smiley-roll-sweat:

Insomma, aiuto!!  =(

menniti

#33
Mar 26, 2012, 07:39 pm Last Edit: Mar 26, 2012, 07:49 pm by Michele Menniti Reason: 1


Bada che questo NON è un codice ma solo una idea scritta in codice maccheronico

Beh, è l'unica cosa che ho capito!!! hahaha ...gli "argomenti" da studiare quali sono?? cioè per esempio.. io so a stento cos'è una variabile  :smiley-fat: quindi non saprei come incrementarla.. poi switch case!?  :smiley-roll-sweat:

Insomma, aiuto!!  =(

ah il tuo aiuto significa che vuoi che qualcuno ti scriva il codice funzionante, ottimo modo di imparare, ma io non tiposso essere utile, però così non vai da nessuna parte; le indicazioni che ti ho dato te le vai a cercare nel Reference sul Playground, te le studi, scrivi un minimo di codice e poi lo provi, quindi chiedi aiuto per migliorarlo; te l'ho già detto che non dai la sensazione di uno che fa la gobba sui libri? :smiley-yell:

Seguiti questo topic che più o meno usa i comandi che ti ho detto così ne vedi alcune applicazioni pratiche, a te serve molto meno di quello che dicono lì.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

maggio93


ah il tuo aiuto significa che vuoi che qualcuno ti scriva il codice funzionante, ottimo modo di imparare, ma io non tiposso essere utile, però così non vai da nessuna parte; le indicazioni che ti ho dato te le vai a cercare nel Reference sul Playground, te le studi, scrivi un minimo di codice e poi lo provi, quindi chiedi aiuto per migliorarlo; te l'ho già detto che non dai la sensazione di uno che fa la gobba sui libri? :smiley-yell:

Giusto, devo studiare, sbagliare e imparare a risolvere!! Ma il fatto che il C sia in inglese e per capire una cosa ci metto 3 giorni... mi butta giù!! comunque ci provo!! Ora provo a cercare... poi alla fine di tutto ti farò sapere qualcosa!! ; )

menniti



ah il tuo aiuto significa che vuoi che qualcuno ti scriva il codice funzionante, ottimo modo di imparare, ma io non tiposso essere utile, però così non vai da nessuna parte; le indicazioni che ti ho dato te le vai a cercare nel Reference sul Playground, te le studi, scrivi un minimo di codice e poi lo provi, quindi chiedi aiuto per migliorarlo; te l'ho già detto che non dai la sensazione di uno che fa la gobba sui libri? :smiley-yell:

Giusto, devo studiare, sbagliare e imparare a risolvere!! Ma il fatto che il C sia in inglese e per capire una cosa ci metto 3 giorni... mi butta giù!! comunque ci provo!! Ora provo a cercare... poi alla fine di tutto ti farò sapere qualcosa!! ; )

bravo! vedi che nel mio post precedente avevo aggiunto due righe  ;)
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

maggio93


te le studi, scrivi un minimo di codice e poi lo provi, quindi chiedi aiuto per migliorarlo


Ho scopiazzato un po' in giro, ho provato a capirlo e ho provato ad adattarlo al mio caso... dici che va bene??  :smiley-fat:

Quote

int pulsante;
int sequenza=0;
void setup() {
  //QUI CI SARÀ TUTTA LA MIA LISTA DI SETUP
  pinMode(11,INPUT);
}

void loop(){
  pulsante=digitalRead(11);
  if ((pulsante==HIGH) and (sequenza==0)) {
    //QUI CI SARÀ IL CODICE DI UNA SEQUENZA
    sequenza=1;
    delay(1000);
  }
  else if ((pulsante==HIGH) and (sequenza==1)) {
    //QUI CI SARÀ IL CODICE DI UN'ALTRA SEQUENZA
    sequenza=2;
    delay(1000);
  }
  
  else if ((pulsante==HIGH) and (sequenza==2)) {
    //QUI CI SARÀ IL CODICE DI UN'ALTRA SEQUENZA
    sequenza=3; //ECCETERA...
    delay(1000);
  }
}



menniti

Io sono il meno indicato di tutti, come logica direi che va bene, dovrai certamente implementare un controllo debounce: serve per i cosiddetti rimbalzi dei pulsanti che vengono visti dal micro come una serie di prssioni consecutive del pulsante, invece che una sola, per cui genera effetti indesiderati; non è niente di particolare, però vedrai che ti servirà
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

maggio93

per il debounce ci penso qualche altra volta, adesso sono molto divertito dal vedere questa cosa nuova... :D sto facendo i primi passi con la programmazione... infatti il cubo l'ho programmato tutto io... ovviamente due cosine le ho sbirciate giusto per capire come funzionava... adesso sono inciampato in un problema... vorrei poter cambiare sequenza anche quando la prima sta andando... altra cosa... posso leggere il valore della variabile "sequenza" sul monitor seriale?!

leo72

Sì ad entrambe le domande. Devi lavorare di codice però ed impararti un po' di costrutti del C per ottimizzare il codice. La sequela di if va bene per piccoli compiti ma quando devi fare tante cose non è conveniente, meglio lo switch..case.

A grandi linee posso riassumere il flusso di esecuzione di ciò che vuoi fare tu in questi passaggi:

1) setup del dispositivo: avvio sequenza 1
2) switch per gestire la sequenza: eseguire 1 step della sequenza in corso
3) lettura dalla seriale: è arrivata una nuova sequenza?
4) sì: incrementa il contatore della sequenza
5) torna al punto 2)

La parte più complessa sarà il punto 2). Avrai una serie di switch..case, uno per ogni sequenza. All'interno avrai per ogni sequenza una routine da eseguire, scandita da un contatore di passi, ogni passo sarà uno step della sequenza.
Quando aggiorni da seriale il numero di sequenza da eseguire, entrando nel punto 2) verrà eseguita la sequenza prescelta. Ma sempre 1 passo alla volta, altrimenti non puoi controllare la seriale.

menniti

Leo, credo che lui voglia cambiare mentre è attiva la sequenza, quindi secondo me deve per forza ricorrere ad un interrupt
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72

Io ho fatto un piccolo gingillino natalizio con un Attiny85 e 3 led la cui sequenza di lampeggio la posso cambiare fra 6 diverse medinate un pulsantino anche mentre una sequenza è in esecuzione.
Non è difficile, si tratta di giocare con gli switch, gli if e millis.

menniti


Io ho fatto un piccolo gingillino natalizio con un Attiny85 e 3 led la cui sequenza di lampeggio la posso cambiare fra 6 diverse medinate un pulsantino anche mentre una sequenza è in esecuzione.
Non è difficile, si tratta di giocare con gli switch, gli if e millis.

ok, grazie  :)
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

maggio93

#43
Mar 31, 2012, 08:32 am Last Edit: Mar 31, 2012, 09:15 am by maggio93 Reason: 1
Leo non ci ho capito niente :D ...come diceva Michele, io voglio cambiare sequenza mentre un'altra è gia attiva...
Prima fase, premo il pulsante e parte la prima sequenza (e vorrei che ogni sequenza, se non viene premuto nuovamente il pulsante, vada all'infinito... poi se premo il pulsante cambia...) poi magari mentre la prima sta andando voglio fermarla quando voglio, non solo alla fine... come posso fare?? perchè, da quello che ho capito, il programma viene eseguito dall'alto verso il basso... in fila... quindi dovrei scrivere ad ogni riga la stessa cosa?! (si, lo so che c'è una soluzione... e non è certo la mia :) )
e poi, quando il cubo mi annoia avevo pensato di spegnerlo... la mia idea era quella di tener premuto il pulsante per xtempo e far spegnere il cubo, magari richiamando la situazione iniziale della variabile...

Ah... per il serial monitor come faccio?? ci ho provato con Serial print (nome variabile); ma niente, non va.. e magari non va fatto così...
Grazie per tutte le volte che riuscite a dare una risposta in grado di aiutarmi!! ;)

menniti

Leo forse ti sta dicendo che in pratica, usando la millis, durante la sequenza puoi continuare a leggere lo stato del pulsante; il come non so come spiegartelo.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Go Up