Vogliamo contare la frutta che passa su un nastro trasportatore, dare il reset del conteggio, spegnere ed accendere il nastro trasportatore. Il conteggio si deve vedere su un LCD 2×16.
Di seguito il programma:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
int val = 0, vecchio_val = 0, stato = 0, contatore = 0;
bool vals, pre_vals; // Stato precedente fotodiodo
void setup() {
lcd.begin(16, 2); // Inizializza il display LCD
pinMode(13, OUTPUT); // Led verde
pinMode(9, OUTPUT); // Uscita alla base del transistor
pinMode(12, INPUT_PULLUP); // Ingresso sensore
pinMode(11, INPUT); // Pulsante start/stop
pinMode(2, INPUT); // Reset contatore
lcd.clear();
Serial.begin(9600);
}
void loop() {
motore(); // avvio motore nastro
vals = digitalRead(12); // fotodiodo=1 e vals=1 se c’è luce
Serial.println(vals);
if (vals && pre_vals) { // se c’è luce e prima non c’era
contatore ++;
}
pre_vals = !vals;
reset(); // controlla il reset
scrivi(contatore); // aggiorna conteggio su lcd
}
void scrivi(int contatore){
lcd.setCursor(3, 0);
lcd.print(“Contapezzi”);
lcd.setCursor(0, 1);
lcd.print(“Pezzi N.”);
lcd.setCursor(9, 1);
lcd.print(contatore);
}
void reset(){
if (digitalRead(2)) { // Se il pulsante di reset viene premuto
contatore = 0;
delay(50);
lcd.clear();
}
}
void motore (){
val = digitalRead(11); // pulsante di start/stop
if ((val == HIGH) && (vecchio_val == LOW)){ // pulsante premuto?
stato = !stato; // Cambia lo stato
delay(200); // Attende 200 ms
}
vecchio_val = val;
if (stato == 1) { // Se stato pulsante vale 1
digitalWrite(13, HIGH); // Accende il led verde
digitalWrite(9, HIGH); // Porta in transistor ON
}
else {
digitalWrite(13, LOW); // Spegne il led
digitalWrite(9, LOW); // Porta il transistor Off e ferma il motore
}
}