Zoeken in deze blog

zondag 14 november 2010

HamKlok One vervolg 4

Vandaag het vullen van het display afmaken. Voor elk cijfer een sprite maken en elk sprite even testen op het display. Het resultaat ziet er zo uit !
En het basisprogramma is ietsje groter geworden !


/* HamKlok One uitleg sprite
 * Sure 2416 display 24*16 leds
 * pa0akv 2010
 * -----------------------------------
 * Historie 
 * versie 0.1 november 2010
 * -----------------------------------
 */

// Eerst even de juiste bibliotheken ophalen!
// Shure libraries

#include "MatrixDisplay.h"
#include "DisplayToolbox.h"
#include <WProgram.h>

// Het display heeft nog wat aanvullende info nodig
// Easy to use function

#define setMaster(dispNum, CSPin) initDisplay(dispNum,CSPin,true)
#define setSlave(dispNum, CSPin) initDisplay(dispNum,CSPin,false)

// We hebben maar 1 display! De bibliotheek kan er meer aansturen
// 1 = Number of displays
// Data = 10
// WR == 11
// False - we dont need a shadow buffer for this example. saves 50% memory!

// Initaliseer Shure display met juiste aansluitingen!
MatrixDisplay disp(4,11,10, false);
// Pass a copy of the display into the toolbox
DisplayToolbox toolbox(&disp);

// In totaal 3 groepen van 8 leds = 24
// De eerste is positie 0 de laatste = 23
// Twee groepen hoog dus rechts boven is 0
// Rechts onder is dan 15
uint8_t X_MAX = 23;
uint8_t Y_MAX = 15;

// Dit voorbeeld heeft 12 Array's voor elke sprite een !

uint8_t Fig0[7];
uint8_t Fig1[7];
uint8_t Fig2[7];
uint8_t Fig3[7];
uint8_t Fig4[7];
uint8_t Fig5[7];
uint8_t Fig6[7];
uint8_t Fig7[7];
uint8_t Fig8[7];
uint8_t Fig9[7];
uint8_t FigT[7];
uint8_t FigD[7];


void setup()
{
  disp.setMaster(0,4);

// Opbouwen van de sprites !
// Eerst cijfer 0 - 9
// Dan nog even twee symbolen !

  Fig0[0] = B01110;
  Fig0[1] = B10001;
  Fig0[2] = B10001;
  Fig0[3] = B10001;
  Fig0[4] = B10001;
  Fig0[5] = B10001;
  Fig0[6] = B01110;  

  Fig1[0] = B00110;
  Fig1[1] = B00101;
  Fig1[2] = B00100;
  Fig1[3] = B00100;
  Fig1[4] = B00100;
  Fig1[5] = B00100;
  Fig1[6] = B11111;  

  Fig2[0] = B01110;
  Fig2[1] = B10001;
  Fig2[2] = B10000;
  Fig2[3] = B01100;
  Fig2[4] = B00010;
  Fig2[5] = B00001;
  Fig2[6] = B11111;  

  Fig3[0] = B01110;
  Fig3[1] = B10001;
  Fig3[2] = B10000;
  Fig3[3] = B01110;
  Fig3[4] = B10000;
  Fig3[5] = B10001;
  Fig3[6] = B01110;  

  Fig4[0] = B00001;
  Fig4[1] = B00001;
  Fig4[2] = B01001;
  Fig4[3] = B01001;
  Fig4[4] = B11111;
  Fig4[5] = B01000;
  Fig4[6] = B01000;  

  Fig5[0] = B01111;
  Fig5[1] = B00001;
  Fig5[2] = B00001;
  Fig5[3] = B01111;
  Fig5[4] = B10000;
  Fig5[5] = B10000;
  Fig5[6] = B01111;   

  Fig6[0] = B01110;
  Fig6[1] = B00001;
  Fig6[2] = B00001;
  Fig6[3] = B01111;
  Fig6[4] = B10001;
  Fig6[5] = B10001;
  Fig6[6] = B01110;   

  Fig7[0] = B11111;
  Fig7[1] = B10000;
  Fig7[2] = B01000;
  Fig7[3] = B00100;
  Fig7[4] = B00010;
  Fig7[5] = B00010;
  Fig7[6] = B00010; 

  Fig8[0] = B01110;
  Fig8[1] = B10001;
  Fig8[2] = B10001;
  Fig8[3] = B01110;
  Fig8[4] = B10001;
  Fig8[5] = B10001;
  Fig8[6] = B01110; 

  Fig9[0] = B01110;
  Fig9[1] = B10001;
  Fig9[2] = B10001;
  Fig9[3] = B11110;
  Fig9[4] = B10000;
  Fig9[5] = B10000;
  Fig9[6] = B01110; 

// nu de symbolen !

  FigT[0] = B11111;
  FigT[1] = B01110;
  FigT[2] = B00100;
  FigT[3] = B00000;
  FigT[4] = B00000;
  FigT[5] = B00000;
  FigT[6] = B00000; 

  FigD[0] = B00000;
  FigD[1] = B00000;
  FigD[2] = B00000;
  FigD[3] = B00000;
  FigD[4] = B00100;
  FigD[5] = B01110;
  FigD[6] = B11111; 
}

// Hier begint het eigenlijke programma !

void loop()
// eerste regel display schrijven !

  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig0[i],0,0+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig1[i],6,0+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig2[i],12,0+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig3[i],18,0+i);
  }

// Tweede regel display schrijven!

  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig4[i],0,9+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig5[i],6,9+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig6[i],12,9+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig7[i],18,9+i);
  }

  delay(2000); // Wacht 2 seconden

  // Nu alles wegpoetsen

  disp.clear();
  // ...en leeg display laten zien !
  disp.syncDisplays();

  delay(2000); // Wacht 2 seconden

  // De acht en negen nog even laten zien ....

  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig8[i],6,4+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(Fig9[i],12,4+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(FigT[i],0,0+i);
  }
  for (int i = 0; i < 7; i ++)
  {
    shiftIt(FigD[i],0,8+i);
  }

  delay(2000); // Wacht 2 seconden

  // Nu alles wegpoetsen

  disp.clear();
  // ...en leeg display laten zien !
  disp.syncDisplays();
  delay(2000); // Wacht 2 seconden
}

// Hier eindigd het eigenlijke programma !
// En dan opnieuw beginnen !


//********************************

/* Functie voor het opbouwen van de sprite
 * deze functie wordt elke keer opgeroepen
 * als we een cijfer op het display zetten
 * opgave welke sprite SpriteIn
 * en de plaats op het display 0,0 Xin,Yin
 */
void shiftIt(byte SpriteIn,int Xin,int Yin)
{
  // Shift out 5 bits LSB first
  boolean LedStatus;

  // for each bit in SpriteIn test a bit
  for (int i=0; i<5; i++)
  {
    // if the value of SpriteIn and (logical AND) a bitmask
    // are true, set LedStatus to 1 (HIGH)
    if ( SpriteIn & (1<<i) )
    {
      LedStatus = HIGH;
      toolbox.setPixel(Xin+i, Yin, LedStatus, true);
    }
    else 
    {
      LedStatus = LOW;
      toolbox.setPixel(Xin+i, Yin, LedStatus, true);
    }
  }
}  

Hier plaatsen we de sprites nog met steeds dezelfde code. De volgende stap is om ook hiervoor een functie te maken dan wordt het programma makkelijker te lezen.


Geen opmerkingen:

Een reactie posten