CIAO A TUTTI SONO NUOVO QUI, E MI SONO AFFACCIATO ADESSO SU ARDUINO PERCHE HO UN ESIGENZA CHE NON RIESCO A RISOLVERE.
DETTO QUESTO, IO VORREI COMANDARE UN MOTORE IN AVANTI E INDIETRO CON TEMPO DI LAVORO E TEMPO DI PAUSA REGOLABILE CON DUE POTENZIOMETRI.
DURANTE IL TEMPO DI LAVORO IL MOTORE DEVE ANDARE IN AVANTI PER UN CERTO TEMPO E INDIETRO PER UN ALTRO (QUINDI DEVO CREARE UN CICLO NEL CICLO DI LAVORO CHE SI RIPETE PER UN TEMPO IMPOSTATO DA UN POTENZIOMETRO)
HO PROVATO CON LA FUNZIONE "MILLIS()" MA NON C'HO CAPITO NULLA
il motore viene comandato da 4 relè (per fare l’inversione di marcia, altrimenti me ne bastava uno, uso una scheda arduino uno, per ora sto eseguendo solamente delle prove su una bread-board quindi mi limito a far accendere dei led.
prima di postare lo sketch premetto che sono andato avanti ma ho trovato nuovi prolemi, ora il ciclo a tempo lo fa, però non esce mai dal loop e non esegue tutto il programma
Eccolo:
int potpin1 = A0; //pin del potenziometro per regolare il tempo
int potpin2 = A1; //pin del potenziometro per regolare il tempo
int tempo1 = 0; //valore tempo impostato
int tempo2 = 0; //valore tempo impostato
int valpot1 = 0; //valore letto del potenziometro
int valpot2 = 0; //valore letto del potenziometro
unsigned long tempo3;
unsigned long tempo4;
void setup() {
pinMode(10, OUTPUT); //motore avanti
pinMode(11, OUTPUT); //led
pinMode(9, OUTPUT); //motore indietro
}
void loop() {
valpot1 = analogRead(potpin1);
tempo1 = map(valpot1, 0, 1023, 0, 10000);
tempo3 = millis();
tempo4 = tempo3;
while ( tempo3-tempo4 < tempo1){
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
delay(3000);
digitalWrite(10, LOW);
delay(300);
digitalWrite(9, HIGH);
delay(500);
digitalWrite(9, LOW);
delay (500);
}
delay(tempo1);
valpot2 = analogRead(potpin2);
tempo2 = map(valpot2, 0, 1023, 0, 10000);
digitalWrite(9 , LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(tempo2);
}
Penso che nel while non hai messo alla fine tempo3 = millis();
infatti tempo4=tempo3 e poi cicli per tempo4-tempo3< valore quindi differnza di 2 valori uguali fa 0 perciò sta continuamente ciclando per 0<qualcosa ovvero per sempre
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
Per il codice nell’IDE usa CTRL+T che lo indenta rendendolo più leggibile.
Se nella setup() metti Serial.begin(9600);
allora dentro la loop() puoi scrivere/mandare messaggi son Serial.println(“messaggio”); al monitor seriale, che ti aiuta a fare il debug, ovvero a verificare cosa succede dentro Arduino. Puoi anche mandare i valori delle variabili, esempio Serial.println(tempo3);