Ciao! Certamente quello che chiedi è possibile, ma bisogna vedere se tu ora hai raggiunto una competenza
sul linguaggio che ti permette di farlo
Il codice da te postato non si avvicina neanche un po alla soluzione del tuo problema
Tu devi fare la stessa cosa alla pressione di un pulsante, ma su pin diversi e con valori diversi.
Allora penso per prima cosa crearsi una funzione che lo faccia, non userai costanti dei pin,ma
una variabile, alla pressione del pulsante alla variabile assegni il valore del pin-led su cui agire, poi
richiami la funzione che accenderà o spegnerà il led.
2)Per calcolare la pausa di ore userai un ciclo while e la funzione mills, il ciclo continua fino a quando non
sono passate le ore desiderate, all'interno del while leggerai la pressione del pulsante, se premuto cambi valore alla variabile che contiene il numero dei pin, e esci dal while con break.
In pratica, sia i pin dei led, sia i pin dei pulsanti, non sono individuati con costanti "sempre quelli", ma con variabili a cui assegnerai di volta in volta i pin che dovrai usare.
Millis() é utilizzabile se non desideri precisioni superiori al minuto, ed anche in quel caso su lungo periodo può sforare. Se vuoi precisioni superiori ti consiglio l'uso di un RTC. Esso assicura la precisione del secondo, se non di più. Ma chiaramente sarebbe una cosa in più da acquistare e saper usare.
Comunque credo che il tuo problema si possa risolvere con un codice che faccia questo
//la loop deve fare
{
Se (sento il tasto 1)
{
Finché (non sento il tasto 2)
{
Spengo il led di 2
Accendo il led di 1
}
Accendo il led di 2
}
Altrimenti se (sento il tasto 2)
{
//sopra con invertiti 1 e 2
}
Aspetto due ore
}
detta semplice led11 e led 12 controllano un motore.
quando il led11 e 12 sono alti ho il motore fermo.
per qui quando arriva al relè si ferma. 2 ore
11 basso 12 alto gira orario
11 alto 12 basso gira anti orario
mentre 6 e il 7 o i rely
quando arriva al 6 o al 7 rimane fermo 2 ore poi passa al altro senso per 2 ore
Nel senso che:
Inizia nella posizione A
Va verso B
Aspetta due ore muovendosi
É a B.
Si ferma
Aspetta 2 ore fermo
Riparte verso A
Aspetta 2 ore muovendosi
É a A
Si ferma
Aspetta 2 ore fermo
Il ciclo ricomincia
Ok. Quindi se é ESATTAMENTE come hi detto basta dire
Muovo in un senso (sai tu come)
delay (236001000)
Spegni
delay (236001000)
Muovi nell'altro senso
delay (236001000)
Spegni
delay (236001000)
Io dal suo primo post avevo capito qualcosa di diverso! Il post non era molto chiaro e forse ho capito male
Però avevo capito che doveva leggere lo stato di due pulsanti durante le pause di 2 ore, se premuti la situazione doveva cambiare e fare altre cose... Ma forse ho capito male
Con 2 ore di delay come fa a leggere i fine corsa???
Inoltre, se è per un macchinario potenzialmente pericoloso, non si può fare da soli. Se è per un trenino o simile, invece, gioca quanto vuoi!
Ho scritto nel post numero 2 la descrizione italiana di un codice che dovrebbe fare quello che ho capito tu hai bisogno.
Puoi per favore spiegare tu, a parole tue, Quali sono le differenze tra la descrizione ti ho dato io nel post 2 e il tuo desiderio?
Inoltre, perdonami, ma se io dovessi far muovere un motore di Totti gradi ogni tot tempo mi comprerei un servo il quale può essere comandato direttamente in posizione. Chiaramente so che il lato hardware di un progetto non si può cambiare. Grazie del video, ma credo che sarebbe più utile una spiegazione precisa in parole tu e, in quanto è più facile capire un codice di cui si sa descrivere il comportamento, come è più facile scriverlo
void setup()
{
pinMode(11, OUTPUT); // imposta il pin digitale come output
pinMode(12, OUTPUT); // imposta il pin digitale come output
}
void loop()
{
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(2*3600*1000); // 2 ore
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
delay(2*3600*1000); // 2 ore
}
Un microswitch deve commutare un filo del motore tra l'uscita 11 e massa;
l'altro microswitch deve commutare l'altro filo del motore tra l'uscita 12 e massa.
In questo modo ogni 2 ore il motore parte, poi si ferma quando scatta il fine corsa. Quando arriva corrente dall'altro pin, il motore riparte al contrario e si ferma quando scatta l'altro fine corsa.
Silente:
Ho scritto nel post numero 2 la descrizione italiana di un codice che dovrebbe fare quello che ho capito tu hai bisogno.
Puoi per favore spiegare tu, a parole tue, Quali sono le differenze tra la descrizione ti ho dato io nel post 2 e il tuo desiderio?
Inoltre, perdonami, ma se io dovessi far muovere un motore di Totti gradi ogni tot tempo mi comprerei un servo il quale può essere comandato direttamente in posizione. Chiaramente so che il lato hardware di un progetto non si può cambiare. Grazie del video, ma credo che sarebbe più utile una spiegazione precisa in parole tu e, in quanto è più facile capire un codice di cui si sa descrivere il comportamento, come è più facile scriverlo
Avevo capito bene ma devi capire che sono alle prime armi non facile per me capire quel. Codice con le if
Un microswitch deve commutare un filo del motore tra l'uscita 11 e massa;
l'altro microswitch deve commutare l'altro filo del motore tra l'uscita 12 e massa.
In questo modo ogni 2 ore il motore parte, poi si ferma quando scatta il fine corsa. Quando arriva corrente dall'altro pin, il motore riparte al contrario e si ferma quando scatta l'altro fine corsa.
questo codice funziona unica problema che il delay mi blocca il codice un if che ho nel programma oltre questo codice
Come to ho detto prima, ti servono dei microswitch di fine corsa a deviatore, non semplici interruttori, e devono sopportare la corrente assorbita dal motore.
??? Devi mettere un relè (relay in inglese) sull'11 (o sul 6) e uno sul 12 (o sul 7), senza modificare il programma (salvo usare il 6 e il 7 o errori).