Aiuto Arduino Uno :(!!

Salve ragazzi io ho uno schema dove devo comandare 10 LED in sequenza con tre pulsanti il problema e che con arduino non sono molto pratico come capirete dalla difficoltà di questo mio lavoro. Il mio problema e che sono riuscito a programmare il pulsante di Startt ma mi mancano quello di Stop e Reset e non riesco più a venirne fuori. Grazie a tutti coloro che mi aiuteranno vi allego il file del programma :slight_smile:

_10_Led.ino (4.78 KB)

Matteo, a breve verrà qualcuno a dirti che se non posti schema e sketch non potrai essere aiutato ;) Quindi...

Regolamento 1) titolo non esplicativo 2) scarse informazioni per poterti aiutare ;)

Allora lo scetk e stato caricato :) e per quanto riguarda le informazioni cosa dovrei aggiungere? :)

Questo dimostra che non hai letto il link che ti ho passato.

Dovresti posizionare il disco intensificatore sull'interocitor e ruotarlo di 15°in senso orario...

Una risposta vale l'altra, no? :stuck_out_tongue_closed_eyes:

cyberhs: Dovresti posizionare il disco intensificatore sull'interocitor e ruotarlo di 15°in senso orario...

E' meglio se collega il parallasse del modulo interassiale ad Aref, poi sbregonda la finfula verso destra e incastra l'antani nello gnognolo.

Matteo_Ciccio: Allora lo scetk e stato caricato :) e per quanto riguarda le informazioni cosa dovrei aggiungere? :)

@Khriss75 cosa ti ha scritto?

Matteo, a breve verrà qualcuno a dirti che se non posti schema e sketch non potrai essere aiutato

Se hai postato lo sketch, ma manca ancora qualcosa, indovina cosa? XD

Matteo_Ciccio: Salve ragazzi io ho uno schema dove devo comandare 10 LED in sequenza con tre pulsanti il problema e che con arduino non sono molto pratico come capirete dalla difficoltà di questo mio lavoro. Il mio problema e che sono riuscito a programmare il pulsante di Startt ma mi mancano quello di Stop e Reset e non riesco più a venirne fuori. Grazie a tutti coloro che mi aiuteranno vi allego il file del programma :)

Nello sketch leggi il pin BUTTON ma hai definito

#define BUTTONSta A1
#define BUTTONSto A2
#define BUTTONRes A3

Il

val = digitalRead(BUTTON);

non legge tutti

Stessa cosa con

digitalWrite(LED, LOW);    //spegne il led

Non spege tutti o qualsiasi LED.

Non attivi le resistenze pullup interne. Come hai collegato i pulsanti? Per quello chiediamo lo schema elettrico.

Se vuoi poter fermare l' esecuzione del Sketch in qualsiasi momento non devi fare i ritardi con delay() ma con millis() (vedi esempio Blink without Delay dato col IDE).

Ciao Uwe

else { // turn LED off: digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); digitalWrite(LED9, LOW); digitalWrite(LED10, LOW); }

Così tutti i led si spengono?

Potrebbero spegnersi tutti ma potrebbero anche accendersi tutti. Dipende dal collegamento. Lo schema elettrico lo spiegherebbe. Ciao Uwe

Allego lo schema ho cambiato il programma e ho tolto il pulsante di reset. Il circuito riesco a farlo funzionare il mio problema e che il pulsante di Start funziona quello di Stop no. Allego il programma funzionante e lo schema di collegamento aiutatemi mi manca poco per finire il programma!! Grazie :slight_smile:

Scketc :

#define LED1 2                // LED1 collegato al pin digitale 2
#define LED2 3                // LED2 collegato al pin digitale 3
#define LED3 4                // LED3 collegato al pin digitale 4
#define LED4 5                // LED4 collegato al pin digitale 5
#define LED5 6                // LED5 collegato al pin digitale 6
#define LED6 7                // LED6 collegato al pin digitale 7
#define LED7 8                // LED7 collegato al pin digitale 8
#define LED8 9                // LED8 collegato al pin digitale 9
#define LED9 10               // LED9 collegato al pin digitale 10
#define LED10 11              // LED10 collegato al pin digitale 11
#define BUTTONSta 12          // Pulsante di Start collegato al pin analogico A0
#define BUTTONSto 13           // Pulsante di Stop collegato al pin analogico  A1
int val = 0;                  // si userà val per conservare lo stato del pin di input  
int vecchio_val = 0;          // si userà vecchio_val per conservare lo stato del pin di input al passo precedente  
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso  
int fermo= 0;
int vecchio_fermo = 0;
int stato_fermo = 0;
void setup() {  
  pinMode(LED1, OUTPUT);       // imposta il pin digitale come output  
  pinMode(LED2, OUTPUT);  
  pinMode(LED3, OUTPUT);
  pinMode(LED4; OUTPUT);  
  pinMode(LED5; OUTPUT);
  pinMode(LED6; OUTPUT);  
  pinMode(LED7; OUTPUT);
  pinMode(LED8; OUTPUT);
  pinMode(LED9; OUTPUT);
  pinMode(LED10; OUTPUT);
  pinMode(BUTTONSta, INPUT);
  pinMode(BUTTONSto, INPUT);     // imposta il pin digitale come input  
}  
  
void loop() {  
  val = digitalRead(BUTTONSta);  // legge il valore dell'input e lo conserva  
  
  // controlla se è accaduto qualcosa  
  if ((val == HIGH) && (vecchio_val == LOW)){  
    stato = 1 - stato;  
    delay(15);                // attesa di 15 millisecondi  
  }   
  
  vecchio_val = val;          // ricordiamo il valore precedente di val  
  if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED1, HIGH);  // accende il LED  
   }  
    if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED2, HIGH);  // accende il LED  
   }  
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED3, HIGH);  // accende il LED  
    
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED4, HIGH);  // accende il LED  
     
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED5, HIGH);  // accende il LED  
     
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED5, HIGH);  // accende il LED  
     
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED6, HIGH);  // accende il LED  
   
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED7, HIGH);  // accende il LED  
   
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED8, HIGH);  // accende il LED  
    
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED9, HIGH);  // accende il LED  
     
      if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED10, HIGH);  // accende il LED  
 }  
    if (stato == 1) {
    digitalWrite(LED1, LOW);
}
   if (stato == 2) {
    digitalWrite(LED1, LOW);
}
   if (stato == 3) {
    digitalWrite(LED1, LOW);
}
   if (stato == 4) {
    digitalWrite(LED1, LOW);
}
   if (stato == 5) {
    digitalWrite(LED1, LOW);
}
   if (stato == 6) {
    digitalWrite(LED1, LOW);
}
   if (stato == 7) {
    digitalWrite(LED1, LOW);
}
   if (stato == 8) {
    digitalWrite(LED1, LOW);
}
   if (stato == 9) {
    digitalWrite(LED1, LOW);
}
   if (stato == 10) {
    digitalWrite(LED1, LOW);
}

 fermo = digitalRead(BUTTONSto);  // legge il valore dell'input e lo conserva  
  
  // controlla se è accaduto qualcosa  
  if ((fermo == HIGH) && (vecchio_fermo == LOW)){  
    stato_fermo = 1 - stato_fermo;  
    delay(15);                // attesa di 15 millisecondi  
  }   
  
  vecchio_fermo = fermo;          // ricordiamo il valore precedente di val  




}

Nel post precedente ho invertito il numero del LED con quello dello stato :D

Matteo_Ciccio: Nel post precedente ho invertito il numero del LED con quello dello stato :D

Mi sa che non solo hai invertito i Led. :D Prima che arrivino i Mod ti conviene editare il messaggio e mettere il codice tra i tag code (l'icona a forma di cancelletto) e ridurre l'immagine.

Non so come ridurre l'immagine pero

Matteo_Ciccio: Non so come ridurre l'immagine pero

Non ha importanza :( Cosa dovrebbe fare il tuo programma, ti giuro non sono riuscito a capirlo.

Accendere 10 led in sequenza con due pulsanti star e stop :D

La prima cosa da fare è ridurre lo sketch :grin: :grin:

Una cosa che non ha senso:

if (stato == 1) {  
     delay(500);              //
     digitalWrite(LED1, HIGH);  // accende il LED  
   }  
    if (stato == 1) {  
     delay(500);              //
      digitalWrite(LED2, HIGH);  // accende il LED  
   }  
...

Fai un test sempre uguale, si riduce il codice e fai la stessa cosa cosi:

if (stato == 1) {  
     delay(500);              //
     digitalWrite(LED1, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED2, HIGH);  // accende il LED  
}  
...

Praticamente riducendo il codice della loop() ottengo questo:

void loop() {  
  val = digitalRead(BUTTONSta);  // legge il valore dell'input e lo conserva   
  // controlla se è accaduto qualcosa  
  if ((val == HIGH) && (vecchio_val == LOW)){  
    stato = 1 - stato;  
    delay(15);                // attesa di 15 millisecondi  
  }   
  vecchio_val = val;          // ricordiamo il valore precedente di val  
  if (stato == 1) {  
     delay(500);              //
     digitalWrite(LED1, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED2, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED3, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED4, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED5, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED5, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED6, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED7, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED8, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED9, HIGH);  // accende il LED  
     delay(500);              //
     digitalWrite(LED10, HIGH);  // accende il LED  
  }  
  if (stato == 1) digitalWrite(LED1, LOW);
  if (stato == 2) digitalWrite(LED1, LOW);
  if (stato == 3) digitalWrite(LED1, LOW);
  if (stato == 4) digitalWrite(LED1, LOW);
  if (stato == 5) digitalWrite(LED1, LOW);
  if (stato == 6) digitalWrite(LED1, LOW);
  if (stato == 7) digitalWrite(LED1, LOW);
  if (stato == 8) digitalWrite(LED1, LOW);
  if (stato == 9) digitalWrite(LED1, LOW);
  if (stato ==10) digitalWrite(LED1, LOW);
  fermo = digitalRead(BUTTONSto);  // legge il valore dell'input e lo conserva  
   // controlla se è accaduto qualcosa  
  if ((fermo == HIGH) && (vecchio_fermo == LOW)){  
    stato_fermo = 1 - stato_fermo;  
    delay(15);                // attesa di 15 millisecondi  
  }   
  vecchio_fermo = fermo;          // ricordiamo il valore precedente di val  
}

Riducendolo un pò lo si visiona meglio. Ora, dovresti imparare a fare il debug, ovvero a trovare un modo per controllare quello che fa il programma rispetto a quello che ti aspetti faccia. Un modo molto semplice, se la seriale non è occupata è trasmettere i valori delle variabili al monitor seriale del IDE arduino.

Nella setup(), all'inizio aggiungi 2 righe: Serial.begin(9600); delay(1000);

Ora nel programma potrai fare Serial.print("stato=");Serial.println(stato); per mandare il valore della variabile stato all'IDE di Arduino.

Questo ti serve per vedere che la variabile stato, secondo me NON cambia mai. Nel codice: stato = 1 - stato; ma stato parte a 0 1-0 = 1 Non ci sono altri posti dove fai stato= qualcosa!!!

Ok grazie però il mio problema rimane non riesco a usare il pulsante di stop