vorrei realizzare un timer regolato da un potenziometro ed un pulsante che lo fa partire e lo interrompe eventualmente
posto il codice ...
unsigned long time;
int secondi;
int potenziometro = A1;
int relay = 8;
int button = 2;
int val = 0;
int stato = 0;
int letturasecondi;
void setup(){
time = millis();
pinMode(relay,OUTPUT);
pinMode(button,INPUT);
}
void loop(){
letturasecondi=analogRead(potenziometro);
secondi=(letturasecondi/25.5);//Pot.da 0-40 secondi
val = digitalRead(button);
if (val==HIGH){
stato=1;
delay(15);
}
if (stato==1){
digitalWrite(relay,HIGH);
if(millis()>=time+1000){
secondi--;
time=millis();
if (secondi==0){
digitalWrite(relay,LOW);
secondi=secondi;
stato=0;
}
}
}
}
Ciao, ti invito a leggere il regolamento, le domande in Italiano si pubblicano nella sezione Italiana. Inoltre il 1° post dovrebbe essere di presentazione nell'apposito thread e non per richieste di assistenza.
pas600:
vorrei realizzare un timer regolato da un potenziometro ed un pulsante che lo fa partire e lo interrompe eventualmente
posto il codice ...
E' una domanda o un'affermazione? Che significa? Che non ti funziona oppure che ti funziona e vuoi migliorare il programma?
... e fai anche un favore, usa la funzione dell'IDE di Arduino : Tools -> Auto Format ... perché così come hai formattato il tuo codice, con quella sfilza di parentesi tutte usa sotto l'altra ... fa veramente ... ...
... almeno lo renderà molto più leggibile, Grazie !
Dovevi spostare l'assegnamento di "secondi" nell'IF, altrimenti viene resettato ogni ciclo e togliere il controllo dall'IF dello stato.
Vedi se così funziona.
unsigned long time;
int secondi;
int potenziometro = A1;
int relay = 8;
int button = 2;
int val = 0;
int stato = 0;
int letturasecondi;
void setup() {
time = millis();
pinMode(relay, OUTPUT);
pinMode(button, INPUT);
} // End Setup
void loop() {
letturasecondi = analogRead(potenziometro);
val = digitalRead(button);
if (val == HIGH) {
stato = 1;
delay(15);
}
if (stato == 1) {
digitalWrite(relay, HIGH);
if (millis() >= time + 1000) {
secondi--;
time = millis();
}
}
else
secondi = (letturasecondi / 25.5); //Pot.da 0-40 secondi
if (secondi == 0) {
digitalWrite(relay, LOW);
stato = 0;
}
}// End Loop