Livio Orsini Inserita: 6 ottobre 2017 Segnala Inserita: 6 ottobre 2017 Ti inserisco i pezzi di codice noInterrupts(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 6491; TCCR1B |= (1 << CS12); TIMSK1 |= (1 << TOIE1); TCCR2B = TCCR2B & 0b11111000 | 0b10; interrupts(); Questa parte programma il timer1 per interrupt a 10ms; è anche impostato il fattore di divisione del timer2 a 1 ISR (TIMER1_OVF_vect) { TCNT1 = 64911; //ricarica timer digitalWrite(imarca, digitalRead(imarca)^1); icnt--; if (icnt == 0) { icnt = 20; flgacq = HIGH; } } La marca serve per avere un'uscita che commuta con periodo di 20ms (10 on e 10 off). Poi c'è un ulteriore conteggio per avere un tempo di 200 ms che serve acquisire il misuratore di distanza. Questa è una prova per un display da 16x4 void loop() { if (flgacq == HIGH) { misura_distanza(); lcd.setCursor(0, 0); // Set the cursor to col 0, row 0 lcd.print("Distanza in mm "); // Print the first word lcd.setCursor(0, 1); // Set the cursor to col 0, row 0 lcd.print("Distanza = "); // Print the first word lcd.setCursor(11, 1); lcd.print(cm); lcd.setCursor(-4, 2); // Set the cursor to col 0, row 0 lcd.print("Vecchia dist. mm"); // Print the first word lcd.setCursor(-4, 3); // Set the cursor to col 0, row 0 lcd.print("Distanza = "); // Print the first word lcd.setCursor(7, 3); lcd.print(old_cm); old_cm = cm; (flgacq == LOW); } } In altri casi leggo direttamente gli ingressi ogni 10 ms ed aggiorno la copia dello stato precedente. Uso sempre il flag settandolo per indicare l'avvenuta acqjuisizione di un nuovo valore; poi resetto il flag quando uso il valore.
roberto8303 Inserita: 6 ottobre 2017 Autore Segnala Inserita: 6 ottobre 2017 Grazie comunque ho provato questo codice semplice e devo dire che senza delay funziona bene e incremento anche la variabile void loop() { int pulsante= digitalRead(puls); if(pulsante==1 and memoria==0){ increm=increm+1; memoria=1; } if(pulsante==0 and memoria==1){ memoria=0; } if(increm%2==1 and increm!=0){ digitalWrite(led,1); } else{ digitalWrite(led,0);} Serial.println(increm); }
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora