From 908807639d374a6f95de7c14b3ffba335165870e Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 10 Dec 2012 18:30:09 +0100 Subject: Port Chariplexing library to plain avr-libc --- lolshield.c | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 lolshield.c (limited to 'lolshield.c') diff --git a/lolshield.c b/lolshield.c new file mode 100644 index 0000000..fe9559f --- /dev/null +++ b/lolshield.c @@ -0,0 +1,182 @@ +/* + Basic LoL Shield Test + + Writen for the LoL Shield, designed by Jimmie Rodgers: + http://jimmieprodgers.com/kits/lolshield/ + + This needs the Charliplexing library, which you can get at the + LoL Shield project page: http://code.google.com/p/lolshield/ + + Created by Jimmie Rodgers on 12/30/2009. + Adapted from: http://www.arduino.cc/playground/Code/BitMath + + History: + December 30, 2009 - V1.0 first version written at 26C3/Berlin + + This is free software; you can redistribute it and/or + modify it under the terms of the GNU Version 3 General Public + License as published by the Free Software Foundation; + or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include //AVR library for writing to ROM +#include +#include "Charliplexing.h" //Imports the library, which needs to be + //Initialized in setup. + +const int blinkdelay = 100; //Sets the time each frame is shown + +/* +The BitMap array is what contains the frame data. Each line is one full frame. +Since each number is 16 bits, we can easily fit all 14 LEDs per row into it. +The number is calculated by adding up all the bits, starting with lowest on +the left of each row. 18000 was chosen as the kill number, so make sure that +is at the end of the matrix, or the program will continue to read into memory. + +Here PROGMEM is called, which stores the array into ROM, which leaves us +with our RAM. You cannot change the array during run-time, only when you +upload to the Arduino. You will need to pull it out of ROM, which is covered +below. If you want it to stay in RAM, just delete PROGMEM +*/ +const uint16_t BitMap[][9] PROGMEM = { +//Diaganal swipe across the screen +{1, 0, 0, 0, 0, 0, 0, 0, 0}, +{3, 1, 0, 0, 0, 0, 0, 0, 0}, +{7, 3, 1, 0, 0, 0, 0, 0, 0}, +{15, 7, 3, 1, 0, 0, 0, 0, 0}, +{31, 15, 7, 3, 1, 0, 0, 0, 0}, +{63, 31, 15, 7, 3, 1, 0, 0, 0}, +{127, 63, 31, 15, 7, 3, 1, 0, 0}, +{255, 127, 63, 31, 15, 7, 3, 1, 0}, +{511, 255, 127, 63, 31, 15, 7, 3, 1}, +{1023, 511, 255, 127, 63, 31, 15, 7, 3}, +{2047, 1023, 511, 255, 127, 63, 31, 15, 7}, +{4095, 2047, 1023, 511, 255, 127, 63, 31, 15}, +{8191, 4095, 2047, 1023, 511, 255, 127, 63, 31}, +{16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63}, +{16383, 16383, 8191, 4095, 2047, 1023, 511, 255, 127}, +{16383, 16383, 16383, 8191, 4095, 2047, 1023, 511, 255}, +{16383, 16383, 16383, 16383, 8191, 4095, 2047, 1023, 511}, +{16383, 16383, 16383, 16383, 16383, 8191, 4095, 2047, 1023}, +{16383, 16383, 16383, 16383, 16383, 16383, 8191, 4095, 2047}, +{16383, 16383, 16383, 16383, 16383, 16383, 16383, 8191, 4095}, +{16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 8191}, +{16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383}, +{16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383}, +{16382, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383}, +{16380, 16382, 16383, 16383, 16383, 16383, 16383, 16383, 16383}, +{16376, 16380, 16382, 16383, 16383, 16383, 16383, 16383, 16383}, +{16368, 16376, 16380, 16382, 16383, 16383, 16383, 16383, 16383}, +{16352, 16368, 16376, 16380, 16382, 16383, 16383, 16383, 16383}, +{16320, 16352, 16368, 16376, 16380, 16382, 16383, 16383, 16383}, +{16256, 16320, 16352, 16368, 16376, 16380, 16382, 16383, 16383}, +{16128, 16256, 16320, 16352, 16368, 16376, 16380, 16382, 16383}, +{15872, 16128, 16256, 16320, 16352, 16368, 16376, 16380, 16382}, +{15360, 15872, 16128, 16256, 16320, 16352, 16368, 16376, 16380}, +{14336, 15360, 15872, 16128, 16256, 16320, 16352, 16368, 16376}, +{12288, 14336, 15360, 15872, 16128, 16256, 16320, 16352, 16368}, +{8192, 12288, 14336, 15360, 15872, 16128, 16256, 16320, 16352}, +{0, 8192, 12288, 14336, 15360, 15872, 16128, 16256, 16320}, +{0, 0, 8192, 12288, 14336, 15360, 15872, 16128, 16256}, +{0, 0, 0, 8192, 12288, 14336, 15360, 15872, 16128}, +{0, 0, 0, 0, 8192, 12288, 14336, 15360, 15872}, +{0, 0, 0, 0, 0, 8192, 12288, 14336, 15360}, +{0, 0, 0, 0, 0, 0, 8192, 12288, 14336}, +{0, 0, 0, 0, 0, 0, 0, 8192, 12288}, +{0, 0, 0, 0, 0, 0, 0, 0, 8192}, +{0, 0, 0, 0, 0, 0, 0, 0, 0}, + +//Horizontal swipe +{1, 1, 1, 1, 1, 1, 1, 1, 1} , +{3, 3, 3, 3, 3, 3, 3, 3, 3}, +{7, 7, 7, 7, 7, 7, 7, 7, 7}, +{15, 15, 15, 15, 15, 15, 15, 15, 15}, +{31, 31, 31, 31, 31, 31, 31, 31, 31}, +{63, 63, 63, 63, 63, 63, 63, 63, 63}, +{127, 127, 127, 127, 127, 127, 127, 127, 127}, +{255, 255, 255, 255, 255, 255, 255, 255, 255}, +{511, 511, 511, 511, 511, 511, 511, 511, 511}, +{1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023}, +{2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047}, +{4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095}, +{8191, 8191, 8191, 8191, 8191, 8191, 8191, 8191, 8191}, +{16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383}, +{16382, 16382, 16382, 16382, 16382, 16382, 16382, 16382, 16382}, +{16380, 16380, 16380, 16380, 16380, 16380, 16380, 16380, 16380}, +{16376, 16376, 16376, 16376, 16376, 16376, 16376, 16376, 16376}, +{16368, 16368, 16368, 16368, 16368, 16368, 16368, 16368, 16368}, +{16352, 16352, 16352, 16352, 16352, 16352, 16352, 16352, 16352}, +{16320, 16320, 16320, 16320, 16320, 16320, 16320, 16320, 16320}, +{16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256}, +{16128, 16128, 16128, 16128, 16128, 16128, 16128, 16128, 16128}, +{15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872, 15872}, +{15360, 15360, 15360, 15360, 15360, 15360, 15360, 15360, 15360}, +{14336, 14336, 14336, 14336, 14336, 14336, 14336, 14336, 14336}, +{12288, 12288, 12288, 12288, 12288, 12288, 12288, 12288, 12288}, +{8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192}, +{0, 0, 0, 0, 0, 0, 0, 0, 0}, +{18000} +}; + +void DisplayBitMap() +{ + bool run=true; //While this is true, the screen updates + uint8_t frame = 0; //Frame counter + uint8_t line = 0; //Row counter + uint8_t led; + unsigned long data; //Temporary storage of the row data + + while(run == true) { + for(line = 0; line < 9; line++) { + + //Here we fetch data from program memory with a pointer. + data = pgm_read_word_near (&BitMap[frame][line]); + + //Kills the loop if the kill number is found + if (data==18000){ + run=false; + } + + //This is where the bit-shifting happens to pull out + //each LED from a row. If the bit is 1, then the LED + //is turned on, otherwise it is turned off. + else for (led=0; led<14; ++led) { + if (data & (1<