Problema programmazione contatore con sensore e display 7segmenti 3 cifre

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?

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

... aspettiamo che sei su desktop e che riesci a caricare il programma (...mi raccomando, in conformità al regolamento, punto 7, il codice va racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) :wink:

Guglielmo

gpb01:
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Grazie mille, mi scuso per l'accaduto. Mi sono presentato :smiley:

Fury_man:
Salve, 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




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?

lascia stare il multiplex con i 7 seg, usa da subito i driver tipo max 7912 e non te ne pentirai :wink:
avrai più risorse per arduino puoi mettere dei delay() senza problemi, puoi variare la luminosità a piacimento o spegnere tutto con un comando, l'intensità luminosa e la visualizzazione risulta perfetta etc etc....

Mmh a me servirebbe utilizzare il display a 7 segmenti, qualcuno può aiutarmi?

Cosa ti fa pensare che il 7912 NON sia per i 7 segmenti?

Perché non saprei come collegarlo e se il codice cambia.. vorrei saperne di più da voi se possibile

È proprio perché il codice cambia (in meglio) che ti è stato consigliato

Perfetto quindi max 7219 collego le uscite di arduino agli ingressi dell’ic e le uscite di quest’ultimo agli ingressi del display a 7 seg .. il codice come varia poi? Cioè devo inserire stringhe diverse come viene programmato poi? Scusate ma sul 7219 sono negato .. sto imparando ora.. una domanda ma il 7219 ho letto in giro che è per i display a catodo comune io invece uso quelli ad anodo comune

tornando al problema del pulsante, cosa esattamente non riesci a fare?

Non riesco ad inserire il pulsante come stringa in modo tale che ad ogni pressione mi incrementi di 1 unità, al momento parte il conteggio appena inserisco lo sketch su arduino .. perché poi andrei a sostituire il pulsante con un sensore ir per esatezza un phototransistor che al passaggio di un oggetto lui mi decrementi di 1 unità partendo da 250

Al posto del MAX 7219 posso utilizzare anche un TM 1627 ? A me basta pilotare solo 3cifre i due ic sono uguali? Cioè svolgono le stesse funzioni?

Al posto del MAX 7219 posso utilizzare anche un TM 1627 ? A me basta pilotare solo 3cifre i due ic sono uguali? Cioè svolgono le stesse funzioni?

TM1637
Non sono uguali, ma diciamo di si, per quello che vuoi fare

Trovi anche moduli a display con pilotaggio I2C:
https://www.google.com/search?q=i2c+7+segment+led+display

e moduli con display pilotati da 7219:
https://www.google.com/search?&q=max7219+7+segment+led+display

Ho preso il pic MAX7219 Come proseguo con il programma? Sono imbranato scusatemi

mah spero che hai preso uno di quei "modulini" pronti all'uso,
questi in particolare costano "nulla" e i led sono messi a pressione si possono sostituire facilmente con led più grandi (stesso tipo però)

studi un po qui poi chiedi

https://playground.arduino.cc/Main/LedControl

Ho preso l’integrato per un fatto economico e per il fatto che poi non saprei cosa farmene di tutto il modulino, ho letto su internet che i pic max7219 pilotano i catodo comune io ho display ad anodo comune, ho letto una guida su come pilotare con il suddetto pic anche i display come il mio, ed inserire l’apposita libreria prima del programma, dovrei leggermi meglio la libreria perché onestamente parlando non so proprio come scriverlo adesso il programma ..qualcuno può aiutarmi ?

mah... la sfera di cristallo per capire come sei messo a "programmazione" non c'è l'ho :confused:

l'unica è studiare prendere spunto, provare e riprovare

all'inizio può essere difficile
ma poi tutto diventa più facile e puoi "far fare" a i progetti quello che vuoi tu
su i 7 segmenti c'è un infinita di esempi sulla rete
dal più semplice a cose abbastanza sofisticate
basta cercare e leggere

ps;
comprare un modulino 7219 completo di display all'inizio è una "necessità" già pronto a funzionare perfettamente