MeggyJrDemo

From Noisebridge
Revision as of 15:50, 16 March 2009 by BillyBuggy (talk | contribs)
Jump to navigation Jump to search
Introduction

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

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

EmptyScreen();      Turn off all LED

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 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:
  delay(N);         Delay N msec.
  millis();         Current time in msec.
  random(X);        Random number in [0,X)
Colors for DrawPx():
  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
Looping with delay()
  void setup() {
    MeggyJrSimpleSetup();
  }
  void loop() {
    DrawPx(7, 7, FullOn);
    ShowScreen();
    delay(100);          // #1
    DrawPx(7, 7, Dark);
    ShowScreen();
    delay(500);          // #2
  }
Program looping over frames w/o delay()
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