ArduinoLED nummers

Dit is de voortzetting van de 7-segment LED uit het vorige project. Als je dat nog niet hebt gedaan dan adviseer ik om dat project eerst te doen.

In het vorig project hebben we de LEDs een voor een aangezet. Om echter een getal te tonen (bijvoorbeeld de 8, moeten we alle LEDs aanzetten. Voor de 3 ook alles, behalve de 2 linkse LEDs etc.

In het programma nemen we op welke LED er voor welk getal aanmoet.



ArduinoBreadboard

Dit schema is helemaal gelijk aan dat uit project 6.




ArduinoSketch
/*
  7-segment LED versie telt van 0 naar 9

  www.punthooft.nl
*/

// Constants
const byte numberMasks[10] = { 
                    B11111100, B01100000, B11011010, B11110010, B01100110, 
                    B10110110, B10111110, B11100000, B11111110, B11100110 
                    };


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

  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
}


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

  for(int i=0;i<10;i++) {
    writeNumber(i);  
    delay(400);
  }
}

// Function to display the number of the 7-segment display
// Argument: int - the value to be displayed
void writeNumber(int number) {

  // Prevent reading a number outside the array
  if ((number < 0 || number > 9)) {
    return;
  }

  // Read the mask
  byte mask = numberMasks[number];

  // Start with the first bit
  byte currentPinMask = B10000000;

  // For all LEDs in the 7-segment display
  for(int i = 2; i <= 8; i++) { 

    // Compare the mask and the current bit, if equal set HIGH otherwise LOW
    if (mask & currentPinMask) {
      digitalWrite(i,HIGH);
    } else { 
      digitalWrite(i,LOW);
    }

    // Shift the currentPinMask to the next position
    currentPinMask = currentPinMask >> 1;
  }
}


ArduinoOpmerkingen

De gebruikte weerstand is van 220 Ohm.

numberMasks bevat de gegevens welke LEDs er in de 7-segment display aan moeten om een getal te tonen. De lijst begint bij 0. Daar staat B11111100. Dit wil zeggen dat de eerste 6 LEDs aanmoeten, en dan een niet, deze laatste is de LED mid mid. De laatste 0 in de numberMasks definitie is een voorbereiding op het gebruik van de digitale punt, en kun je hier even negeren.

De writeNumber functie is het hart van het programma. Deze gebruikt het masker dat we in numberMasks hebben gedefinieerd. En gaat voor iedere LED (2 tot en met 8) kijken of deze gelijk is aan een masker in currentPinMask dat we voor deze LED maken. De eerste keer staat er B10000000 in, dan B01000000, dan B00100000 etc. De conditie in het if statement mask & currentPinMask zal alleen waar zijn (TRUE) als het masker een 1 heeft op de plaats waar er in de currentPinMask ook een 1 staat. Anders alstijd nietwaar (FALSE).

Tip, de functie writeNumber is enorm handig om te bewaren en in de toekost te gebruiken voor andere projecten.




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.