Go Down

Topic: Problema programmazione con le if con stepper motor (Read 512 times) previous topic - next topic

3drone

Buongiorno, sto cercando di programmare 4 stepper motor in modo che se si preme un pulsante si attiva un rispettivo stepper motor. Per sorvolare il problema dei tanti pin che occupano gli stepper motor, ho collegato il pin 1 dei motori ai pin 3, 4, 5, 6 di arduino uno, mentre gli altri tre pin di controllo li ho messi nella breadboard in modo che si colleghino tutti ai rispettivi pin 7,8,9. Ho messo quattro pulsanti (pin13,12,11,10). Qua però è sorto il problema. Ho messo delle if interne alle if cioè: se è premuto il pulsante muovi il motore 1, se non è premuto e se è premuto il pulsante 2 muovi il motore due, se non è premuto ed è premuto il pulsante 3  muovi il motore 3, se non è premuto ma è premuto il pulsante 4, accendi il motore 4, se non è premuto spengili tutti . L'ho provato a trascrivere ma sembra che i motori si muovano a caso senza premere i pulsanti. Mi sapete aiutare? Grazie. Questo è il testo:

Code: [Select]

 
#define BUTTON1 10
#define BUTTON2 11
#define BUTTON3 12
#define BUTTON4 13
int  val1;
int  val2;
int  val3;
int  val4;
int i;   
int dt = 5;               
 
void setup() { 
 pinMode(BUTTON1, OUTPUT);       
 pinMode(BUTTON2, INPUT);
 pinMode(BUTTON3, INPUT);
 pinMode(BUTTON4, INPUT);
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);     

 
void loop() { 
  val1 = digitalRead(BUTTON1);
  val2= digitalRead(BUTTON2);
  val3= digitalRead(BUTTON3);
  val4=digitalRead(BUTTON4);
 
 if (val1 == HIGH) {
  digitalWrite(3,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW); 
  delay(dt);
  digitalWrite(3,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW); 
  delay(dt);
  digitalWrite(3,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW); 
  delay(dt);
    digitalWrite(3,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);}
   else {if (val2 == HIGH){
    digitalWrite(4,HIGH);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    delay(dt);
        digitalWrite(4,LOW);
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    delay(dt);
        digitalWrite(4,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    delay(dt);
        digitalWrite(4,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    delay(dt);}
     else {if (val3 == HIGH){
      digitalWrite(5,HIGH);
      digitalWrite(7,LOW);
      digitalWrite(8,LOW);
      digitalWrite(9,LOW);
      delay(dt);
      digitalWrite(5,LOW);
      digitalWrite(7,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(9,LOW);
      delay(dt);
      digitalWrite(5,LOW);
      digitalWrite(7,LOW);
      digitalWrite(8,HIGH);
      digitalWrite(9,LOW);
      delay(dt);
      digitalWrite(5,LOW);
      digitalWrite(7,LOW);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      delay(dt);}
       else {if (val4 == HIGH){
        digitalWrite(6,HIGH);
        digitalWrite(7,LOW);
        digitalWrite(8,LOW);
        digitalWrite(9,LOW);
        delay(dt);
        digitalWrite(6,LOW);
        digitalWrite(7,HIGH);
        digitalWrite(8,LOW);
        digitalWrite(9,LOW);
        delay(dt);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,HIGH);
        digitalWrite(9,LOW);
        delay(dt);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,LOW);
        digitalWrite(9,HIGH);
        delay(dt);}
         else {
          digitalWrite(3,LOW);
          digitalWrite(4,LOW);
          digitalWrite(5,LOW);
          digitalWrite(6,LOW);
          digitalWrite(7,LOW);
          digitalWrite(8,LOW);
          digitalWrite(9,LOW);
             
       }}}}}
 

E' in allegato la foto dei motori che ho usato

SukkoPera

Perché il pulsante1 è in output?

Hai messo le resistenze di Pull-down?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Silente

Hai fatto il debounce hardware dei pulsanti? Se no i pin sentono un mare di disturbi, e effettivamente vanno a caso
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

3drone

Grazie per avermi risposto. Ho provato a mettere le resistenze e cambiare il codice in modo che funzioni per un solo pulsante e per un solo motore, ma succede una cosa piuttosto strana: oltre il fatto che il motore si muove quando non è schiacciato il pulsante, , se premo il pulsante mi si scollega arduino dal computer! Ho collegato un lato  pulsante alla resistenza con i +5v e il pin mentre l'altro al GND. Non capisco più cosa stia succedendo . Sapete aiutarmi, grazie!
(Ho modificatoo l'OUTPUT- INPUT del motore 1).

SukkoPera

Erm, rivediti come si collega un pulsante ad Arduino...
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

3drone

Effettivamente sembra che il problema era il collegamento dei pulsanti perchè ora funziona tutto. Grazie

Go Up