Controllo motore CC arduino

salve a tutti in questo periodo mi sono cimentato nei motori e ora volevo provare a fare un programma che mi permetta di controllare la velocita di un motore (prima al 50% poi al 70%) alla pressione del pulsante, ovvero :

non premo il pulsante --> motore spento
premo 1 volta il pulsante --> motore acceso al 50%
premo una seconda volta il puslante --> motore acceso al 70%

purtroppo non conosco approfonditamente il comandi di arduino e volevo farlo con una struttura if...else o al massimo switch case

fino ad ora ho fatto questo:

[i]void loop() {  
 
 val = digitalRead(BUTTON);                       // legge il valore dell'input e lo conserva  
                                                       
                                                       
 if ((val == HIGH) && (vecchio_val == LOW)){      //imposto il valore di stato controllando la variabile var
   stato = 1 - stato;  
 }   
 vecchio_val = val;                               // reimposto il valore di val a 0
 
   if (stato == 1) {                              //se lo stato è 0 significa che non ho premuto il pulsante e quindi il motore non va 
   
   if ((val == HIGH) && (vecchio_val == LOW)){
   stato1 = 1;}  
   lcd.setCursor(0,1);                            //imposto il cursore del led a 0 colonne e 1 riga
   analogWrite(MOTORE, 128);                      // il motore è spento
   digitalWrite(LED, HIGH);                       //il led è spento
   lcd.print("Motore Acceso 50&%");               //mostro sull' LCD la scritta :"motore spento"
      if(stato1 = 1){
        lcd.print("Motore Acceso 70%");
        analogWrite(MOTORE, 200);
        digitalWrite(LED, HIGH);}
} 

 else {  
   
   digitalWrite(LED, LOW);    //accendo il led  
   digitalWrite(MOTORE, LOW);
   lcd.print("Motore Spento");

}  
}  [/i]

ma non funziona correttamente e purtroppo non riesco a capire come poterlo far funzionare, sarei grato se qualcuno potesse autarmi a risolverlo.

grazie a tutti in anticipo!

In conformità al regolamento, punto 7, cortesemente edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Scusa ma se gli stati del motore sono 3, come puoi pretendere di farlo capire ad Arduino usando la variabile stato con soli due valori 0 e 1 ? Usa 3 valori, 0, 1 e 2

P.S. quando posti il codice, prima, nell'IDE, usa CTRL+T che lo indenta meglio, come lo hai scritto è molto difficile da leggere.

Probabilmente dovresti usare un transistor, e non credo sia possibile in quanto Arduino non ha uscite analogiche, ma solo in pwm e con un motore in continua non funziona.
Potresti usare tre pin con tre resistenze di valori diversi e li attivi in base alla velocità.

-Matteo-:
Probabilmente dovresti usare un transistor, e non credo sia possibile in quanto Arduino non ha uscite analogiche, ma solo in pwm e con un motore in continua non funziona.

E questa dove l'hai letta ? ? ? :o :o :o

Funziona perfettamente con il PWM ... lo schema allegato, in basso a sinistra, illustra come fare.

Guglielmo

scheda_5.pdf (429 KB)

gpb01:
Funziona perfettamente con il PWM ... lo schema allegato, in basso a sinistra, illustra come fare.

Attenzione che il condensatore da 1 uF non va messo nel caso di utilizzo tramite pwm.

astrobeed:
Attenzione che il condensatore da 1 uF non va messo nel caso di utilizzo tramite pwm.

Si, giusto, e sarebbe il caso di segnalare la cosa a pighixxx ... dato che esso è presente anche nell'ultima versione della sua scheda motore.

Guglielmo