ArduinoNixie Tellen

Op de vorige pagina was te lezen hoe je de nixie buis kunt eiken. Deze eik waarden staan in TUBEBOTTOM en TUBECEILING.

Nu gaan we de buizen gebruiken om te tellen. In de ene buis de een-tallen en in de andere buis de tien-tallen.

Voor het tonen van de waarden 0 tot en met 9, waarbij de 0 op 21 brightness komt en de 9 op de 175 brightness, moeten we gaan rekenen.

Start waarde = 21
Eind waarde  = 175
Stappen      = 154       (eindwaarde - startwaarde)
Waarden      = 10 stuks  (0/1/2/3/4/5/6/7/8/9)
Factor       = 15        (stappen / aantalwaarden = 154/10 = 15)
(Factor is een integer en daar kunnen geen waarden achter de komma in, voor nu is dat niet erg.)

Voor de waarde 0 moet de brightness 21 komen (21)
Voor de waarde 1 moet de brightness 36 komen (21+15)
Voor de waarde 2 moet de brightness 51 komen (21+15+15)
Voor de waarde 3 moet de brightness 66 komen (21+15+15+15)
Voor de waarde 4 moet de brightness 81 komen (21+15+15+15+15)
...
Voor de waarde 10 moet de brightness 171 komen (21+(10 keer een 15))

In formule is de brigtness dus:
brightness = startwaarde + (waarde *15)

In onderstaand script gebruiken we de 2 buizen los van elkaar. De ene buis telt van 0 tot en met 9. De andere buis telt de tientallen (0 tot en met 90).

Als deze buizen naast elkaar staat kun je op de linkerbuis aflezen 5 tientallen (=50) en op de rechterbuis 8. Samen dus 58.



ArduinoBreadboard common Anode

Zie beschrijving in script "De Nixie buis"



ArduinoSketch
/*
  Nixie bargraph tubes

  www.punthooft.nl
*/

// Library
#include  

// Constants
const int TUBE1 = 9;
const int TUBE2 = 10;

const int TUBEBOTTOM = 21;
const int TUBECEILING = 175;

// Variables
int counter = 0;         // Value of the counter
int tubeMinValue = 0;    // Minimal data value
int tubeMaxValue = 9;    // Maximum data value
 
// Working variables
int tubeSteps = 0;       // Number of steps (see setup)
int tubeFactor = 0;      // Factor for calculation (see setup)

int tube1Value = 0;      // Calculated value (see loop)
int tube2Value = 0;      // Calculated value (see loop)
int tube1Brightness = 0; // Calculated brightness (see loop)
int tube2Brightness = 0; // Calculated brightness (see loop)

int32_t frequency = 10000; //PWM frequency in Hz (10000 works fine)

// Setup function runs once when powerup the board and on reset 
void setup() {

  Serial.begin(9600);
  
  // Initialize the timers
  InitTimersSafe(); 

  // Initialise the PWM pins
  if(!SetPinFrequencySafe(TUBE1, frequency)) {
    Serial.println("Tube1 error");
    while(1);
  }
  
  if(!SetPinFrequencySafe(TUBE2, frequency)) {
    Serial.println("Tube2 error");
    while(1);
  }

  tubeSteps = tubeMaxValue - tubeMinValue;
  tubeFactor = (TUBECEILING - TUBEBOTTOM) / tubeSteps;

  paramprint("TUBEBOTTOM   %d",TUBEBOTTOM);
  paramprint("TUBECEILING  %d",TUBECEILING);  
  paramprint("tubeSteps    %d",tubeSteps);
  paramprint("tubeFactor   %d",tubeFactor);  
}


// The loop function runs over and over again forever
void loop() {

  // Write the value to the monitor window in the IDE
  paramprint("counter %d", counter);

  // Calc the values for the tubes (0-9)
  tube1Value = counter / 10;
  tube2Value = counter % 10;

  // Calc the corresponding brightness for each tube
  tube1Brightness = TUBEBOTTOM + (tube1Value * tubeFactor);
  tube2Brightness = TUBEBOTTOM + (tube2Value * tubeFactor);

  // Write the values to the tube
  pwmWrite(TUBE1, tube1Brightness);
  pwmWrite(TUBE2, tube2Brightness);
 
  // Wait during the change
  delay(1000);

  // Add one and restart loop
  counter++;

  // Prevent overflow of brightness
  if (counter>99) {
    counter=0;
  }
}

void paramprint(char *formatString, int param) {
  char string[255];
  sprintf(string, formatString,param);
  Serial.println(string);
}


ArduinoOpmerkingen

Let op dat we hier niet tellen van 0 tot en met 10. Als we bij 9 zijn, dan gaan we immers verder door de waarde erboven een op te hogen en de telwaarde terug naar 0 te zetten! Om dezelfde reden tellen we in de code tot en met 99 en niet tot 100.




Lees Verder in deze categorie

Copyright 2018 www.punthooft.nl

We do not collect cookies for advertisement. Your data is never send to third parties.