Gestione motore stepper e display 7 segmenti

ciao a tutti

mi serve un aiutino, in pratica sto gestendo un motorino bipolare stepper con arduino e un l298n, tutto ok,funziona alla grande.

Ora,la mia idea era di pilotare un pilotare un display a 7 segmenti catodo comune e due cifre (con 10 pin posteriori) con uno shift register tipo 74hc595 (l'unico che so usare) con udn2981 e un uln 2803.

Right...il codice al momento è questo

 #include <Stepper.h>
   const int stepsPerRevolution = 200;  
                                        
   const int X = 30; 
   
   Stepper myStepper(stepsPerRevolution, 9,10,11,12);            
   void setup() 

   {myStepper.setSpeed(X);
     Serial.begin(9600);}

       
   void loop() 
       {
         
      Serial.println("clockwise");
   
         for (int i=0; i <= 1000000; i++)        
         {myStepper.step(stepsPerRevolution);}
         
         }

Visto che devo multiplexare pensavo di mettere un switch case e confrontare i valori della variabile velocità e a seconda della velocità mandare al display i corretti output.

Ok, multiplexo con dei cicli for, ma poi come faccio a far ruotare il motorino continuando ad avere acceso il display? :smiley:

Premetto che non sono molto pratico di programmazione, sarebbe la prima volta che uso un ciclo di questa tipologia

grazie in anticipo

Primo, nonostante tu sia già stato invitato a farlo QUI NON ti sei ancora presentato per cui, nel rispetto del regolamento, ti chiedo di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ...

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

Guglielmo

urka,

pensavo di essermi presentato,in realtà l'ho fatto nel primo topic :smiley:

Spero che ora vada bene, primo post compreso.

xyzthjk:
Spero che ora vada bene, primo post compreso.

Guglielmo

Dimentica di fare il multiplexing con dei cicli for.

Devi usare millis() per controllare il tempo trascorso e aggiurnare il display.
In alternativa puoi usare un MAX7219 che fa il multiplexing da solo.

Ciao Uwe

ok, ho dato una lettura e ho capito il funzionamento ma mi mancano dei passaggi...

visto che da quel che ho capito non posso usare il delay devo multiplexare usando millis, perfetto, ma come faccio a far capire ad arduino cosa multiplexare?

Io avevo pensato di dichiarare all'inizio la velocità,poi sfruttando l'istruzione switch case 1 case 2 mettendo in case 1 e case 2 le istruzioni da eseguire per il display multiplexing...

Moh invece come fo? mi servirebbe che arduino capisse da solo quale case eseguire dentro il millis.

Altro dubbio,ma visto che il motorino deve funzionare di continuo,dentro il millis posso mettere un ciclo for?

O fare un if else con sempre l'istruzione di far girare il motorino?

il codice che penso debba essere usato è qualcosa di simile

unsigned long tempoOp1;
unsigned long tempoOp2;

void setup() {
  tempoOp1=millis()+1000; //1 secondo
  tempoOp2)=millis()+500; //0,5 sec
}

void loop() {
  if (millis()>tempoOp1) {
    ......il compito da eseguire....
    tempoOp1=millis()+1000;
  }
  if (millis()>tempoOp2) {
    .....il compito da eseguire.....
    tempoOp2=millis()+500;
  }
}