Reset tramite interruttore?

/**
/@author Christian Berti
/rilevatore di ingressi PROTOTIPO
**/
int FotoPin = 1;
int ledpin=13; //pin led riflettore fascio luminoso
int FotoValue;//attributo in cui viene memorizzato valore letto da fotoresistore
int controlPin=8;//pin led segnalatore passaggio
int contatore;//attributo dedito al conteggio 
int buttonpin=12; // pin lettura valore interruttore
int valbutton=LOW;
int val=0;//attributo in cui viene memorizzato valore letto da interruttore
void setup() {//dichiarazione utilizzo pin
pinMode(ledpin,OUTPUT);
pinMode(controlPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(ledpin,HIGH);//accende il led riflettore
FotoValue = analogRead(FotoPin);// assegna all'attributo il valore letto

if (FotoValue>280){//confronto attributo con soglia prefissata
  digitalWrite(controlPin,HIGH);//istruzione eseguita solo se condizione precedente positiva; accende il led segnalatore
  Serial.println(FotoValue);// stampa su seriale il valore del fotoresistore
  contatore = contatore+contatore++;//incremente l'attributo
  Serial.print("Persone: ");
  Serial.println(contatore);//stampa su seriale l'attributo
  delay(1500);//aspetta un secondo e mezzo
  digitalWrite(controlPin,LOW);//spegne il led segnalatore
}
else{
delay(500);//aspetta mezzo secondo e riesegue la lettura del fotoresistore
}
}

Salve a tutti ragazzi vi pongo un nuovo problema. Avrei bisogno di resettare tramite un semplice pulsante il contatore di ingressi e visualizzare su LCD seriale una frase del genere "Casa Sicura". Con un delay di 2000 millisecondi dovrebbe ripartire l'analisi del sensore e quindi il conteggio degli ingressi. Avete una vaga idea di come si possa realizzare a livello software. A livello hardware credo che il collegamento sia tramite una semplice resistenza di pull down

if (digitalRead(buttonpin) == HIGH) {
  contatore = 0;
  lcd.print(F("Casa Sicura?"));
}

Naturalmente devi mettere il codice per inizializzare l'LCD. Inoltre con quei delay il pulsante non sempre viene rilevato.

Questo è sbagliato

contatore = contatore+contatore++; //incremente l'attributo

in quel modo moltiplichi per 2 il contatore e gli sommi 1.

Per incrementare metti semplicemente

contatore++; //incremente l'attributo

oppure

contatore = contatore+1; //incremente l'attributo

stile VisualBasic

Credo di aver capito l’unica cosa che mi lascia perplesso è l’inizializzare la libreria LCD poichè io utilizzo questo prodotto http://www.parallax.com/StoreSearchResults/tabid/768/List/0/SortField/4/ProductID/50/Default.aspx?txtSearch=serial+LCD
Come si inizializza dal momento che il display è collegato a massa, ai 5V ed al pin TX di arduino?

Ti rimando a questo link che dovrebbe spiegarti tutto http://arduino.cc/en/Tutorial/LiquidCrystal

Ma la libreria lo tratta come LCD collegati ai pin digitali. Io l'unico pin che ho va collegato al TX di arduino

pres961: Credo di aver capito l'unica cosa che mi lascia perplesso è l'inizializzare la libreria LCD poichè io utilizzo questo prodotto http://www.parallax.com/StoreSearchResults/tabid/768/List/0/SortField/4/ProductID/50/Default.aspx?txtSearch=serial+LCD Come si inizializza dal momento che il display è collegato a massa, ai 5V ed al pin TX di arduino?

Devi seguire i link della pagina e approdare qui --> http://learn.parallax.com/KickStart/27977 Alla fine della pagina c'è un esempio di codice per Arduino Uno.

In questo caso il codice diventa

if (digitalRead(buttonpin) == HIGH) {
  contatore = 0;
  myserial.print(F("Casa Sicura?"));
}

pres961:
Ma la libreria lo tratta come LCD collegati ai pin digitali. Io l’unico pin che ho va collegato al TX di arduino

No, visto che utilizza la SoftSerial, puoi usare un qualsiasi pin.
Anzi, ti invito a non utilizzare i pin 0 e 1 di Arduino, se non in casi concezionali perché potresti impedire l’upload degli sketch. Ovvero, ogni volta dovresti staccare il circuito collegato a quei piedini prima dell’upload.

francescoprisco: Ti rimando a questo link che dovrebbe spiegarti tutto http://arduino.cc/en/Tutorial/LiquidCrystal

Francesco, quella libreria nel suo caso non va bene. Lui ha indicato un LCD di tipo seriale. La cosa migliore è quella di partire sempre dal sito del produttore e vedere se ci sono librerie o esempi di codice. In questo caso nello stesso sito Parallax c'è illustrato un esempio di funzionamento dell'LCD.

Ok Paolo.Chedi scusa XD

pres961:  contatore = contatore+contatore++;//incremente l'attributo

Ma stai ancora usando quel codice sbagliato nonostante ti fosse già stato detto che non andava bene? http://arduino.cc/forum/index.php/topic,154744.0.html

No sign. Paolo già corretto come precedentemente indicatomi!

Scusami ma sei stato te oggi a pubblicare « on: Today at 12:40:26 » lo stesso codice che ieri ti era stato detto che non andava bene. Tant'è che poi PaoloP ti ha corretto lo stesso errore che 2 giorni fa ti era stato segnalato da francescoprisco.

PaoloP: Questo è sbagliato

contatore = contatore+contatore++; //incremente l'attributo

in quel modo moltiplichi per 2 il contatore e gli sommi 1.

Per incrementare metti semplicemente

contatore++; //incremente l'attributo

francescoprisco: l'errore è qui

  contatore = contatore+contatore++;

basta fare

  contatore++;

quindi sostituisci

  contatore = contatore+contatore++;

con

  contatore++;

Già fatto anzi vi ringrazio perchè finalmente ora funziona tutto! Quello che non capisco è se su quel display esiste il pin di retroilluminazione

const int TxPin = 6;

#include <SoftwareSerial.h>
SoftwareSerial mySerial = SoftwareSerial(255, TxPin);

void setup() {
    
  pinMode(TxPin, OUTPUT);
  digitalWrite(TxPin, HIGH);
  
  mySerial.begin(9600);
  delay(100);
  mySerial.write(12);                 // Clear             
  mySerial.write(17);                 // Turn backlight on
  delay(5);                           // Required delay
  mySerial.print("Hello, world...");  // First line
  mySerial.write(13);                 // Form feed
  mySerial.print("from Parallax!");   // Second line
  mySerial.write(212);                // Quarter note
  mySerial.write(220);                // A tone
  delay(3000);                        // Wait 3 seconds
  mySerial.write(18);                 // Turn backlight off

}

void loop() {
}

Dal sito dell LCD (http://learn.parallax.com/KickStart/27977) leggo mySerial.write(18); // Turn backlight off quindi credo che ci sia una sorta di retroilluminazione.

pres961: Quello che non capisco è se su quel display esiste il pin di retroilluminazione

Vedo una coppia di pin lateralmente al display, potrebbero essere quelli della retroilluminazione. Controlla per scrupolo sul datasheet del display.

Leo non sono questi i comandi per la retroilluminazione ? [...] mySerial.write(17); // Turn backlight on [...] mySerial.write(18); // Turn backlight off [...]

francescoprisco: Leo non sono questi i comandi per la retroilluminazione ? [...] mySerial.write(17); // Turn backlight on [...] mySerial.write(18); // Turn backlight off [...]

Ma lui parlava di "pin", non di "comandi". La retroilluminazione di solito è collegata a parte rispetto all'alimentazione della logica di controllo.

Leo il retro del display non si vede, ma credo che monti una scheda seriale di controllo, illuminazione compresa. Ho linkato la pagina che spiega tutto già prima--> http://learn.parallax.com/KickStart/27977

Control Byte What it Does 12 Clears the display, sets text to start at 0,0 (first character of the first line) 13 Starts a new line 17 Turns backlight on 18 Turns backlight off 212 Sets up next sound for quarter-length note (about 1/2 second 220 Sounds and A tone (440 Hz)

PaoloP: Leo il retro del display non si vede, ma credo che monti una scheda seriale di controllo, illuminazione compresa. Ho linkato la pagina che spiega tutto già prima--> http://learn.parallax.com/KickStart/27977

Non ho guardato tutto, mea culpa.