Conteggio attivazione di un ingresso digitale

Salve a tutti vorrei posarvi il mio problema che secondo me è molto banale ma sono alle prime armi con arduino e non so come sviare a ciò.

Vi spiego vorrei creare il mio software che rilevi quante volte io premo il mio pulsante collegato al arduino board, al pin digitale es.(4), in un frangente di tempo di un secondo, ogni volta che rilevo il pinmode in on parte il mio timer e la variabile cambia il valore poi visualizzato sul serial monitor

Il problema più grande e capire come fare un contatore che conta i miei input in sequenza

Spero di esser stato abbastanza chiaro nella spiegazione per ulteriori domande chiedetemi pure

Grazie a tutti e buona serata :slight_smile:

chiaro non sei stato, forse sarebbe il caso che facessi un bell'esempio con azioni e cifre reali

Ciao,
Potrebbe essere questo:
http://arduino.cc/en/Reference/PulseIn

qello che chiedi?

Luca

ook allora provo ad esser più chiaro, io ho un pulsante collegato al ingresso digitale dovrei contare quanti impulsi io mando tramite pulsante in un secondo, praticamente un timer di un secondo parte a contare quando rileva il primo impulso digitale e nel arco di quel tempo io premo il pulsate per 6 volte allora nel mio serial monitor visualizzerò in continuo sul mio serial monitor quanti impulsi al secondo sono stati rilevati .

Spero d'esser stato più chiaro sta volta
Grazie a tutti

Spero di esser stato abbastanza chiaro nella spiegazione per ulteriori domande chiedetemi pure

poco, poco chiaro.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay per il tempo.
Ciao Uwe

facciamo un pezzo alla volta, scusate per prima cosa e fondamentale dovrei realizzare un contatore che conti i miei input come posso fare

ad esempio io premo il pulsante per 5 volte in un secondo e lui deve rilevarmi e visualizzarmi sul serial monitor 5 volte pressione del pulsante :slight_smile:

Usi una variabile: inizia il conteggio, la variabile vale 0; ogni volta che premi il pulsante la variabile incrementa il suo valore di 1. Quando è trascorso un secondo stampi sul monitor il valore della variabile poi lo resetti a 0 e tutto riparte dall'inizio.

Pelletta:
Usi una variabile: inizia il conteggio, la variabile vale 0; ogni volta che premi il pulsante la variabile incrementa il suo valore di 1. Quando è trascorso un secondo stampi sul monitor il valore della variabile poi lo resetti a 0 e tutto riparte dall'inizio.

Più chiaro di così :wink:

ook proprio cosi pelletta :slight_smile: , come posso realizzare ciò una volta settata la variabile su o come posso iniziare con i cicli setup e loop?

Ciao Daddi,

in generale credo che il modo migliore per imparare a scrivere codice è quello di... scriverlo!!! Poi ci si rompe la testa per capire perchè non funziona. Soltanto così alla fine ci rimane impresso nella mente quello che abbiamo imparato.

Ciò premesso, mi rendo conto che magari, all'inizio, non si sa proprio da dove cominciare. Per venirti incontro provo a postarti un esempio di codice che "dovrebbe" fare quello che ti serve. Non l'ho provato quindi è possibile che vada rivisto. Nel caso parliamone.

int button = 4;
int buttonState;
int oldButtonState;
int counter;
unsigned long startTime;
unsigned long delay = 1000;
bool firstClick;

void setup() 
{                
	Serial.begin(9600);
	pinMode(button, INPUT);     

	firstClick = true;

	oldButtonState = LOW;
	counter = 0;
}

void loop() 
{
	buttonState = digitalRead(button);
	
	if (buttonState == HIGH)
	{
		// ho premuto il pulsante
		
		if (oldButtonState == LOW)
		{
			oldButtonState = HIGH;

			if (firstClick)
			{
				startTime = millis();
				firstClick = false;
			}
			
			counter++;
		}
	}
	else oldButtonState = buttonState;
	
	unsigned long elapsedTime =  millis() - startTime;
	if (elapsedTime	> delay)
	{
		firstClick = true;
		Serial.print("Impulsi contati: ");
		Serial.println(counter, DEC);
		counter = 0;
	}
}

In pratica la variabile buttonState contiene lo stato attuale del pulsante, mentre oldButtonState mantiene lo stato precedente. Questo serve perchè, data la velocità alla quale viene eseguito il loop, non è sufficiente incrementare il contatore (la variabile counter) quando buttonState=HIGH perchè sicuramente durante ogni pressione passeresti n volte nel ciclo.

Pertanto counter viene incrementata ogni volta che buttonState è HIGH e oldButtonState è LOW.

Al primo click (indicato da firstClick) viene anche impostato il valore di startTime. Poi ad ogni ciclo viene controllato quanto tempo è passato da startTime (elapsedTime = millis() - startTime). Quando questo valore diventa maggiore di delay (1000 ms = 1 s come richiesto), il valore di counter viene inviato alla seriale e resettato.

Se hai bisogno di altre informazioni, chiedi pure.

Ciao.
Vittorio.

Grazie mille Vittorio adesso provo il tutto e ti faccio sapere, comunqe come hai detto te adesso sono alle prime armi e sono affascinato da arduino per questo che ho bisogno di piccoli aiutini grazie mille buona giornata

Caio Vittorio ho provato a caricare il programma sul Arduino ma mi da errore nella riga ''unsigned long delay '' come posso risolvere?

delay è una funzione dell'IDE, non puoi usarla come nome di variabile. Cambiala con "ritardo", "intervallo", ecc.

Pelletta:
delay è una funzione dell'IDE, non puoi usarla come nome di variabile. Cambiala con "ritardo", "intervallo", ecc.

Le parole chiave del linguaggio non possono essere usate come variabili o nomi di funzione:

Te ne accorgi perché scrivendole diventano arancioni.

Ciao Daddi,

hanno ragione Pelletta e leo. Come ti dicevo non ho provato il codice e scrivendolo di getto non mi sono accorto di aver utilizzato una parola chiave.

Ciao.
Vittorio.