Ciao a tutti,
sono un nonno che con il nipotino di 9 anni vorrebbe costruire un contatore ( segna punti) con un
display 4 digit 7 segmenti.
Le mie conoscenze di elettronica sono buone ma quando devo scrivere un programma in "C" qui ho
delle grosse difficoltà.
Ho scritto questo programma, ma non riesco a controllare i due pulsanti ed il risultato che ottengo
e che la variabile " contatore" si incrementa progressivamente senza tener conto se il pulsante o pulsanti sono premuti.
Ringrazio tutti quelli che mi vorranno aiutare
Grazie Nonno Sergio e Fabio
// Contatore con display 4 digit 7 segmenti
// Con pulsante incrementa numeratore e pulsante decrementa numeeratore
// Dichiaro le variabili
int numeratore=0;
//------------------------------------------------------------------
#include <SevSeg.h> //Libreria controllo Display 4 digit 7 segmenti
#define COMMON_ANODE 1
#define COMMON_CATODE 0
//------------------------------------------------------------------
// definisco la mappa tra pin e segmenti
#define segA 6 // 11 PIN del display 7Segment x 4
#define segB 2 // 7 PIN del display 7Segment x 4
#define segC 10 // 4 PIN del display 7Segment x 4
#define segD 12 // 2 PIN del display 7Segment x 4
#define segE 13 // 1 PIN del display 7Segment x 4
#define segF 5 // 10 PIN del display 7Segment x 4
#define segG 9 // 5 PIN del display 7Segment x 4
#define segDP 11 // 3 PIN del display 7Segment x 4
#define digit1 7 // 12 PIN - PWM che Accende il primo digit
#define digit2 4 // 9 PIN - PWM che Accende il secondo digit
#define digit3 3 // 8 PIN - PWM che Accende il terzo digit
#define digit4 8 // 6 PIN - PWM che Accende il quarto digit
//-------------------------------------------------------------------
// definisco i PIN di imput
#define P1 1 // pulsante INCREMENTO NUMERATORE
#define P2 0 // pulsante DECREMENTO NUMERATORE
//-------------------------------------------------------------------
// Creo un'istanza dell'oggetto
SevSeg sevseg;
//-------------------------------------------------------------------
void setup()
{
pinMode(P1,INPUT);
pinMode(P2,INPUT);
Serial.begin (9600); //apro canale seriale
sevseg.Begin(COMMON_CATODE,digit1,digit2,digit3,digit4,segA,segB,segC,segD,segE,segF,segG,segDP);
sevseg.Brightness(50); // Imposto la luminosità del Display (valore da 0 a 100)
}
void loop()
{
// pulsante "se" premuto
if (P1== HIGH);
{
delay(100);
if (P1== HIGH); //antibounce
{
numeratore++; // incremento il contatore
if (numeratore>999) // se il contatore supera 999, lo azzero
{
numeratore=0;
}
}
}
// pulsante "giu" premuto
if (P2== HIGH)
{
delay(100);
if (P2== HIGH); // antibounce
{
if (numeratore==0)
{
numeratore=999;
}
else
{
numeratore--; // decremento il contatore
}
}
}
{
Serial.println(numeratore);
}
sevseg.PrintOutput(); // Mostra il valore sul Display
sevseg.NewNum(numeratore,(byte) 4);
}