MeggyJrDemo

From Noisebridge
Revision as of 21:37, 16 March 2009 by BillyBuggy (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Introduction[edit]

In January 2009 I built a Meggy Jr RGB kit designed by Windell Oskay (of Evil Mad Scientists Laboratory).

Standard Arduino main program:[edit]
  int main(void) {
    setup();
    for (;;)
      loop();
    return 0;
  }
Simplified Meggy API (partial):[edit]
#include <MeggyJrSimple.h>

EmptyScreen();      Turn off all LEDs

DrawPx(x,y,color);  Turn on LED (x=0~7, y=0~7, color=0~15)
                                ( x=0,y=0 is lower left )

ShowScreen();       Copy (double) buffer array to display
                    video array

SetAuxLEDs(N);      Set top LEDs: N=1:FarLeft, N=255:AllOn

CheckButtonsDown(); Check which buttons currently pressed.
                    Sets six (global) variables:
                      Button_A, Button_B, Button_Up,
                      Button_Down, Button_Left, Button_Right
                    if (Button_Left || Button_Up ) ...
Regular Arduino calls still available:[edit]
  delay(N);         Delay execution N msec.
  millis();         Return current time in msec.
  random(X);        Return random number in [0,X)
Colors for DrawPx():[edit]
  0 Dark
  1 Red       8 DimRed
  2 Orange    9 DimOrange
  3 Yellow   10 DimYellow
  4 Green    11 DimGreen
             12 DimAqua
  5 Blue     13 DimBlue    
  6 Violet   14 DimViolet
  7 White    15 FullOn
Simple looping using function delay()[edit]
  void setup() {
    MeggyJrSimpleSetup();
  }
  void loop() {
    DrawPx(7, 7, FullOn);
    ShowScreen();
    delay(100);          // #1
    DrawPx(7, 7, Dark);
    ShowScreen();
    delay(500);          // #2
  }
Same loop over frames, w/o using function delay()[edit]
unsigned long gLastTime;
byte          gWhichDelay;
int           gDelayMsec;
void setup() {
  MeggyJrSimpleSetup();
  gLastTime   = millis();
  gWhichDelay = 2;   // Waiting at: =1: first  delay(),
                     //             =2: second delay()
  gDelayMsec  = 500;
}
void loop() {
  if ( millis() > gLastTime + gDelayMsec ) {
    if ( gWhichDelay == 1 ) {
      DrawPx(7, 7, Dark);
      ShowScreen();
      gDelayMsec  = 500;
      gWhichDelay = 2;
    }
    else {
      DrawPx(7, 7, FullOn);
      ShowScreen();
      gDelayMsec  = 100;
      gWhichDelay = 1;
    }
    gLastTime = millis();
  }
}
References[edit]