Vai al contenuto
PLC Forum


Filtro su pulsante


roberto8303

Messaggi consigliati

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.

Link al commento
Condividi su altri siti



Grazie:thumb_yello:

 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);
}

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...