#include #include #include Matrix myMatrix = Matrix(2, 3, 4); /* create a new Sprite instance 8 pixels wide, 4 pixels tall */ Sprite wave = Sprite( 8, 4, B00011000, B00100100, B01000010, B10000001 ); Sprite stripe = Sprite( 8, 8, B11100000, B01110000, B00111000, B00011100, B00001110, B00000111, B10000011, B11000001 ); Sprite box = Sprite( 6, 6, B111111, B100001, B100001, B100001, B100001, B111111 ); Sprite checker = Sprite( 8, 4, B11001100, B11001100, B00110011, B00110011 ); int x; int y; int b; int offset; int rxPin = 8; int speed = 50; Sprite s = wave; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); myMatrix.clear(); } void loop() { // Read in the next available byte and blink the rx LED once if(Serial.available() > 0){ b = Serial.read(); blink(rxPin, 1, 5); // Subtract 48 to convert ASCII char to right integer ("1" = 49) switch (b) { case 43: // + speed = speed + 20; Serial.print("SPEED: "); Serial.println(speed); break; case 45: // - if(speed >= 20) { speed = speed - 20; } Serial.print("SPEED: "); Serial.print(speed); break; case 48: // 0 speed = 50; break; case 49: s = wave; break; // break is optional case 50: s = stripe; break; case 51: s = box; break; case 52: s = checker; break; default: s = wave; } b = 0; } offset = (8 - s.height())/2; myMatrix.write(x, offset, s); // place sprite on screen myMatrix.write(x - 8, offset, s); // place sprite again, elsewhere on screen delay(speed); // wait a little bit myMatrix.clear(); // clear the screen for next animation frame if(x == 8) // if reached end of animation sequence { x = 0; // start from beginning } x++; // advance x coordinate to the right } void blink(int pin, int count, int ms) { int x; for(x = 0; x < count; x++) { digitalWrite(pin, HIGH); delay(ms); digitalWrite(pin, LOW); delay(ms); } }