accensione ad intervalli di tempo

Salve! sto lavorando ad un progettino ultimamente ma, mi sono trovato ad un punto morto. in poche parole devo far partire uno stepper con velocità regolabile ad intervalli di tempo regolari, ed iol valore degli intervalli vorrei poterlo scegliere tramite dei tasti esempio: tasto1 ogni 2min. tasto2 ogni 5min ecc.

Ora alla regolazione della velocità ci sono arrivato mi manca appunto la questione tempo! Grazie a chi saprà aiutarmi!

Buongiorno, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente [u]evitando[/u] di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :)

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. ;)

Fatto! Chiedo scusa per la negligenza!

Ciao Fai qualcosa tipo:

 unsigned long intervallo;

void loop()
{
if(digitalRead(tasto_1)) intervallo=120000 // 2 minuti
else if(digitalRead(tasto_2)) intervallo=300000 // 5 minuti
...

Poi conti il tempo con millis()

Grazie! Nel caso io voglia aggiungere altri tasti con il relativo tempo mi basta poi continuare con il comando else giusto? Poi mi sorge un dubbio per utilizzare il comando millis l'arduino deve essere sempre alimentato? Oppure una volta acceso parte con il conteggio? Comunque faro un programma test con un semplice Led e poi svilupperò quello definitivo con il controllo del motore e della sua velocità.

millis() parte all'accensione. Devi prendere il tempo con variabili unsigned long t1, t2 (o i nomi che preferisci) e poi fai if(millis()-t1>intervallo) {fai questo} Fai sempre in questo modo per non avere problemi: millis()-t. Devi considerare, poi, se deve essere sempre sensibile ai pulsanti e che cosa deve fare quando uno viene premuto.

Ho una alternativa più facilmente espandibile, evoluzione di quella postata:

byte tasti []={};//i pin di tutti i tasti in ordine
unsigned long tempi[]={};//i tempi nello stesso ordine
byte tastopremuto;
void setup()
{
for (byte i=0;i<numtasti;i++)
{
pinMode (tasti[i], INPUT);
}
}
void loop ()
{
for (byte i=0;i<numtasti;i++)
  if (digitalRead (tasti[i]))
    tastopremuto =i;
//comanda il motore con per tempo tempi[tastopremuto]
}

scritto da telefono e incompleto, ma forse é eccessivo

Silente:
Ho una alternativa più facilmente espandibile, evoluzione di quella postata:

byte tasti []={};//i pin di tutti i tasti in ordine

unsigned long tempi={};//i tempi nello stesso ordine
byte tastopremuto;
void setup()
{
for (byte i=0;i<numtasti;i++)
{
pinMode (tasti[i], INPUT);
}
}
void loop ()
{
for (byte i=0;i<numtasti;i++)
  if (digitalRead (tasti[i]))
    tastopremuto =i;
//comanda il motore con per tempo tempi[tastopremuto]
}



scritto da telefono e incompleto, ma forse é eccessivo

Si forse è un po eccessivo perché una volta fatto il programma definitivo esso non verra più modificato! Vi spiego meglio il progetto in se. Sto lavorando praticamente ad un nastro trasportatore che deve avere velocità variabile tramite un potenziometro e deve avviarsi ad intervalli di tempo che, possono essere scelti da una serie di tasti con un Led che ne indica il tempo scelto

Rieccomi qua dopo aver fatto qualche test con il Led integrato nel mio Arduino UNO sono riuscito a farlo blinkare tramite comando Millis aiutandomi anche con l’ esempio BlinkWithoutDelay. Fin qui tutto chiaro! Però ora, quello che devo riuscire a fare è far spegnere il Led(motore) dopo un tempo che decido io e non dopo l’intervallo impostato per l’accensione. E’ un po’ difficile Da spiegare ma spero di esserci riuscito! Grazie.

Salve! Riprendo questo topic poiché sono arrivato ad un buon punto con il mio programma ma, mi ritrovo con una problematica. Praticamente ho impostato un tempo di on fisso e tre tempi di off variabili da tre tasti, il tempo che io imposto dai tasti funziona quello che però dovrebbe essere costante non è il tempo che ho impostato io ma viene sommato al tempo di off lascio in allegato il codice per intero. Grazie.

define MOTOR_PIN 9

define BUTTON_PIN 5

define POTENTIOMETER_PIN A0

define BOOT_TIME 0

define MOTOR_ON 8

define Tasto_1 2

define Tasto_2 3

define Tasto_3 4

define ON_TIME 1000

unsigned long MOTOR_OFF = 0;

int stato = HIGH;

long previousMills = 0;

bool enabled = false; int lastEnableValue = LOW; unsigned long startTime = 0;

void setup() { pinMode(MOTOR_PIN, OUTPUT); pinMode(MOTOR_ON, OUTPUT); pinMode(Tasto_1, INPUT); pinMode(Tasto_2, INPUT); pinMode(Tasto_3, INPUT); pinMode(BUTTON_PIN, INPUT); }

void loop() {

if (digitalRead(Tasto_1)) MOTOR_OFF = 1000; else if (digitalRead(Tasto_2)) MOTOR_OFF = 2000; else if (digitalRead(Tasto_3)) MOTOR_OFF = 3000;

if (((millis() - (previousMills)) > MOTOR_OFF) && (stato == LOW)) { previousMills = millis(); stato = HIGH; digitalWrite(MOTOR_ON, stato); }

if (((millis() - (previousMills)) > ON_TIME) && (stato == HIGH)) { previousMills = millis(); stato = LOW; digitalWrite(MOTOR_ON, stato); }

{ int enableValue = digitalRead(BUTTON_PIN); if (enableValue != lastEnableValue && enableValue == HIGH) { if (!enabled) { startTime = millis(); } enabled = !enabled; } lastEnableValue = enableValue;

if (enabled) { if ((millis() - startTime) > BOOT_TIME) { int motorSpeed = map(analogRead(POTENTIOMETER_PIN), 0, 1023, 70, 255); analogWrite(MOTOR_PIN, motorSpeed); } else { analogWrite(MOTOR_PIN, 255); } } else { analogWrite(MOTOR_PIN, 0); } delay(50); }

}