Pages: [1] 2   Go Down
Author Topic: Conteggio attivazione di un ingresso digitale  (Read 984 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

qello che chiedi?

Luca
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20298
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

poco, poco chiaro.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20298
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
Logged

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2263
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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ì  smiley-wink
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2263
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
http://arduino.cc/en/Reference/HomePage
Te ne accorgi perché scrivendole diventano arancioni.
Logged


Pages: [1] 2   Go Up
Jump to: