Sterrenhemel - Introductie
De basis van dit project is de 8x8 LED Matrix uit project 21.
Een klein project om de werking van de vertraging te laten zien. En de benodogde stroom.
Bovenin hebben we 2 constanten. Met de ene kunnen we het aantal sterren opgeven. Ik begin op 5. Maar zet hem gerust op 10 of 20 of 100. Ik hoor je nu denken dat dat niet kan, 100. Want er zijn immers maar 64 LED's. Probeer het. En je zult merken dat er toch een aantal uit blijven. Deze zijn dus niet gekozen door de randomizer. Bij 100 branden er bijvoorbeeld maat 50 van de 64.
De DELAY geeft aan hoelang de sterren blijven stralen, voordat ze van plaats wisselen.
Als je de waarde op hoog zet, dan zul je zien dat ze minder helder gaan stralen. Dat heeft 2 oorzaken. De LEDs worden iedere keer LEDje voor LEDje opnieuw getekend. Als er veel LEDs zijn, is iedere LED minder aan de beurt, en heeft dan geen kans om te stralen. Verder is het voor de Arduino ook zwaar om 100 LEDs te laten branden, het kost veel stroom.
In de code hieronder zie je ook dat ik veel kleine functies heb. Iedere functie doet zijn eigen ding. Daardoor is het fijner en sneller werken. Ja het is meer code, ja het is overzichtelijker.
Breadboard
Zie introductie van de LED matrix in het vorig project.
LED Matrix introductie
Source code
/*
   8x8 segment LED Matrix,, sterrenhemel
   (C) copyright www.punthooft.nl 2019-2025
*/
// Constants
const int AMOUNT = 10;
// Variables
int leds[AMOUNT][2];           // screen to be displayed
int delayCounter = 0;       // Prepares times for moves
int i,j;                    // Counters
// Setup function runs once when powerup the board and on reset 
void setup() {
  randomSeed(analogRead(0));   // Set randomizer
  fillScreen();
}
// Function to lightup the LED at row, col position
void loop() {
  delayCounter++;
  if (delayCounter>500) {
    delayCounter=0;
    fillScreen();
  }
  // redraw screen
  redrawScreen();
}
// Fill the matrix with random numbers
void fillScreen() {
  for(i=0;i<AMOUNT;i++) {
    leds[i][0] = random(8);
    leds[i][1] = random(8);
  }
}
// Function that display full matrix
void redrawScreen() {
  for(i=0;i<AMOUNT;i++) {
    displayAt(leds[i][0],leds[i][1]);
  }
}
// Display the led on position
void displayAt(int x,int y) {
  pinMode(y+10,OUTPUT);
  pinMode(x+2,OUTPUT);
  digitalWrite(y+10, HIGH);
  digitalWrite(x+2, HIGH);
  delayMicroseconds(25);
  digitalWrite(y+10, LOW);
  digitalWrite(x+2, LOW);
  pinMode(y+10,INPUT);
  pinMode(x+2,INPUT);
}