Salve, sono nuovo nel Forum ho un problema con un progetto riguardante un contatore con un sensore e display a 7 segmenti anodo comune a tre cifre collegato in multiplexing. Sono giorni ormai che provo nel progetto ma con scarsi risultati e chiedo il vostro aiuto. Vi spiego il progetto: Vorrei realizzare un contatore in modo tale che ad ogni passaggio di un oggetto avanti al sensore (formato da un IRled e da un fototransistor come ricevitore) mi decrementa il numero inizialmente predisposto a 250. Ho buttato giù qualche stringa. Potreste aiutarmi?
Ps: dal cellulare non riesco a caricare lo sketch.
Eccomi dopo svariato tempo causa lavoro, mi sono presentato nella sezione e adesso posto il codice grazie a tutti:
// segment | Arduino board PIN number
#define segG 6
#define segF 7
#define segA 12
#define segB 11
#define segE 8
#define segD 9
#define segC 10
#define GND1 5
#define GND2 4
#define GND3 3
#define botton A0
int count=0;
int i=0;
// functions to display digits
void digit0 ()
{
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
};
void digit1 ()
{
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
};
void digit2 ()
{
digitalWrite(segA,LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
};
void digit3 ()
{
digitalWrite(segA,LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
};
void digit4 ()
{
digitalWrite(segA,HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
};
void digit5 ()
{
digitalWrite(segA,LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
};
void digit6 ()
{
digitalWrite(segA,LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
};
void digit7 ()
{
digitalWrite(segA,LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
};
void digit8 ()
{
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
};
void digit9 ()
{
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
};
//function to display digit from inputed int
void showdigit (int digit)
{
switch (digit)
{
case 0:
digit0 ();
break;
case 1:
digit1 ();
break;
case 2:
digit2 ();
break;
case 3:
digit3 ();
break;
case 4:
digit4 ();
break;
case 5:
digit5 ();
break;
case 6:
digit6 ();
break;
case 7:
digit7 ();
break;
case 8:
digit8 ();
break;
case 9:
digit9 ();
break;
default:
break;
};
};
// showing 3 digits
void showdigits (int number)
{
// e.g. we have "1234"
showdigit(number/1000); // segments are set to display "1"
digitalWrite(GND1, HIGH); // first digit on,
digitalWrite(GND2, LOW); // other off
digitalWrite(GND3, LOW);
delay (4);
number = number%1000; // remainder of 1234/1000 is 234
digitalWrite(GND1, LOW); // first digit is off
showdigit(number/100); //// segments are set to display "2"
digitalWrite(GND2, HIGH); // second digit is on
delay (4); // and so on....
number =number%100;
digitalWrite(GND2, LOW);
showdigit(number/10);
digitalWrite(GND3, HIGH);
delay (4);
number =number%10;
digitalWrite(GND3, LOW);
showdigit(number);
delay (4);
};
void setup()
{
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(GND1, OUTPUT);
pinMode(GND2, OUTPUT);
pinMode(GND3, OUTPUT);
};
void loop ()
{
count++;
showdigits (i);
if (count==10)
{
count=0;
i++;
if (i>10000)
{
i=0;
};
};
};
al momento se lo carico su arduino comincia a contare incrementando di uno..però non riesco ad inserire il pulsante tale che quando lo premo mi incrementi di uno, potete aiutarmi?