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

}

 

}