Contapezzi con display 7 segment

Grazie mille Datman appena posso lo provo e ti faccio sapere :slight_smile: grazie anche a te Flaviano, il mio sarebbe un progetto per il Softair (un gioco con delle repliche di armi chiamate AirSoftGun, nettamente diverso dal conosciutissimo Paintball) precisamente un contatore di pallini (BB) infatti al posto del pulsante andrò a posizionare un sensore tipo fotocellula composta da un emettitore IR e un ricevitore e spero che il Codice non vari perché a livello di programmazione sono negato ed è stato grazie a voi che ho potuto cominciare e portare quasi a termine il progetto :slight_smile:

Ho provato il Circuito di Datman il contatore da fermo mi da 0 poi incrementa solo di 1 e non si incrementa più, ho inserito la stringa lc.setDigit(0,0,0,false); nel vecchio sketch ed effettivamente parte da 0 e poi conta regolarmente.. una domanda se volessi far partire il conteggio da 250 e decrementando basta che scrivo contatore=250 e poi contatore -- ? perché vorrei sostituire il pulsante con un photoresistor e un irled in modo tale che quando il fascio viene interrotto lui mi decrementi di un unità alla volta. ho inserito altre due stringhe di codice per far comparire 000 all'inizio

void setup(){
    lc.shutdown(0,false);
    lc.setIntensity(0,8);
    lc.clearDisplay(0);

    lc.setDigit(0,0,0,false); //
    lc.setDigit(0,1,0,false); // Ho inserito 3 stringhe per far comparire 000 
    lc.setDigit(0,2,0,false); //
  

  pinMode(buttonPin, INPUT);
  pinMode(buttonReset, INPUT);
  
}

come faccio fer farlo partire da 250 a video al posto di 000?
vi ringrazio infinitamente per l'aiuto che mi state dando, aspetto vostre risposte.

FuryMan

Nel setup poni la variabile=250.

Ciao Datman ho posto int contatore=250 ma mi da sempre come valore 000 poi quando premo il pulsante mi passa a 251 direttamente, come faccio a porla nel setup questa variabile?

Aspetto tue Risposte Datman :slight_smile:

Ciao
Sono stato un po' indaffarato.

Semplicemente, devi fargli visualizzare 250 o, genericamente, il valore di contatore in lc.setDigit. :slight_smile:

lc.setDigit(0,2,2,false);
lc.setDigit(0,1,5,false);
lc.setDigit(0,0,0,false);

oppure, genericamente:

lc.setDigit(0,2,contatore/100,false);
lc.setDigit(0,1,(contatore/10)%10,false);
lc.setDigit(0,0,contatore-10*int(contatore/10),false);

Ciao Datman ho provato il circuito e il tutto funziona benissimo, vorrei sostituire il pulsante con un sensore ir dove l'emettitore ir led è sempre attivo mentre il ricevitore ir è collegato al piedino del vecchio interruttore, facendo cio' ho notato che non funziona la mia domanda è devo aggiungere qualche stringa nel codice facendogli leggere l'irled come un semplice pulsante? questo è il codice, ti ringrazio mille!

 //State change detection (edge detection)
//We always have to include the library
#include "LedControl.h"

/*
 Now we need a LedControl to work with.
 pin 12 is connected to the DataIn 
 pin 9 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,9,10,1);

/*  The circuit:
 - buttonpin attached to pin 2 from +5V
 - buttonreset attached to pin 4 from +5V
 - 10 kilohm resistor attached to pin 2&4 from ground
*/
// this constant won't change:
 #define buttonPin 2 // the pin that the pushbutton is attached to
 #define buttonReset 4 // the pin that the buttonreset is attached to
 
// Variables will change:
int contatore = 250;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button
int unita = 0;
int decine = 0;
int centinaia = 0;
int tmp=0;


void setup(){
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
  lc.setDigit(0,2,2,false);
  lc.setDigit(0,1,5,false);
  lc.setDigit(0,0,0,false);
  

  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  pinMode(buttonReset, INPUT);
  
}

void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button went from off to on:
      contatore--;
      
        tmp=contatore;
        unita=tmp%10;
        tmp=tmp/10;
        decine=tmp%10;
        centinaia=tmp/10;

      lc.setDigit(0,2,(byte)centinaia,false);
      lc.setDigit(0,1,(byte)decine,false);
      lc.setDigit(0,0,(byte)unita,false);
    }
     
    // Delay a little bit to avoid bouncing
    delay(30);
  
  // save the current state as the last state, for next time through the loop
  lastButtonState = buttonState;
}

  // if the buttonreset is pressed reset the buttonpushcounter
  if  (digitalRead(buttonReset) == HIGH){
      (contatore = 250);
       lc.clearDisplay(0);
       lc.setDigit(0,2,2,false);
       lc.setDigit(0,1,5,false);
       lc.setDigit(0,0,0,false);
    }
}

[code]

Datman solo tu puoi aiutarmi aspetto tue risposte in merito perché sto uscendo pazzo non riesco a farlo funzionare con l’ir led

Se il ricevitore IR sostituisce il pulsante, perché non funziona?...

Ho collegato al posto del pulsante il ricevitore ir led a 3 pin dove l uscita del ricevitore collegata al piedino del vecchio pulsante, collegato con resistenze in modo da non fargli avere un picco di tenzione troppo alta e poi l’emettitore ir collegato direttamente ai 3,3volt con relativa resistenza in modo che stia sempre sullo stato alto... ma non conta come se non lo leggesse come pulsante... ha bisogno forse di altre stringhe codice?

Non sono riuscito a capire com'è fatto il circuito. Servirebbe uno schema. Comunque mi sa che c'è qualche resistenza di troppo...

Datman:
Non sono riuscito a capire com'è fatto il circuito. Servirebbe uno schema. Comunque mi sa che c'è qualche resistenza di troppo...

Ciao Datman ho disegnato un circuito riguardante solamente l'emettitore e il ricevitore IRled da me inseriti adesso ti posto il file, spero mi saprai aiutare, ti ringrazio infinite :slight_smile:

circuito emetti e ricev. ir led.jpg

Che modello è? Senza sapere il modello del sensore, non posso dire nulla...

Credo sia un comunissimo phototransistor tipo TSOP4856 a 3 pin, quando lo comprai gli dissi phototransistor quindi non so dirti se va bene o meno :confused: ... ho pensato di acquistare un modulo TCRT5000 però non so se i collegamenti sono gli stessi o meno.. e se sia abbastanza sensibile per il mio progetto. In allegato un phototransistor come il mio: non riesco a caricare l’immagine mi scuso se posto il link della foto

Tu quale mi consigli di usare?

Ho controllato meglio è un TSOP31230 a 3 pin .. ma non va inserita nessuna stringa inerente all’irled?

Come è scritto chiaramente nel datasheet

www.google.com/search?&q=TSOP31230+datasheet

quel sensore è un ricevitore specifico per telecomandi, che ha un filtro che fa passare solo segnali con una portante a 30kHz +/-5%! :slight_smile:

Ciao Datman ti ringrazio per avermi risposto, ma non ho capito ancora come devo risolvere :confused:

Cambiando sensore! :frowning:
Devi usare un fototransistor semplice, non un dispositivo particolare come quello, che è specifico per telecomandi con portante a 30kHz (quindi solo alcuni telecomandi). Se hai un comune BC107/8/9 o 2N2222 o simile in contenitore metallico, puoi provare segando la parte superiore o facendo un foro con una piccola fresa (ti sconsiglio il trapano, a meno che sia a colonna e il transistor ben tenuto nella morsa, per evitare che la punta venga trascinata giù fino a distruggere il chip).
Sul sito RS, ad esempio, puoi farti un'idea dei fototransistor esistenti. Attento a sceglierne uno sensibile alla lunghezza d'onda della luce che usi: se usi luce visibile, uno sensibile solo all'infrarosso (hanno un filtro scuro, o tutto il corpo è scuro) non va bene.

Ah ok grazie mille quindi sostituisco il fototransistor con uno comune tipo NPN .. ti farò sapere appena provo grazie mille!!

Prego! :slight_smile: