#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
#include "LedControl.h" // https://github.com/wayoda/LedControl
#include <qrcode.h> // https://github.com/ricmoo/QRCode
#include "Max72xxPanel.h" // https://github.com/markruys/arduino-Max72xxPanel
#include "bitmaps.h"
#include "Org_01.h"
int size = 16;
int side = size * 8;
QRCode qrcode;
// DIN, CLK, CS
LedControl ledControls[] = {
LedControl(0, 1, 2, size),
LedControl(3, 4, 5, size), //LedControl(3, 4, 5, size),
LedControl(6, 7, 8, size),
LedControl(9, 10, 11, size),
LedControl(A0, A1, A2, size),
LedControl(A3, A4, A5, size),
LedControl(14, 16, 15, size),
LedControl(17, 19, 18, size),
};
void drawImg(int8_t x, int8_t y, const uint16_t bitmap[], int8_t w, int8_t h)
{
//dma_display.startWrite();
for (int8_t j = 0; j < h; j++, y++) //vertical [j]=>y
{
for (int8_t i = 0; i < w; i=i+1) //horizontal [i]=>x
{
//dma_display.writePixel(x + i, y, pgm_read_byte(&bitmap[j * w + i]));
//Serial.println(pgm_read_byte(&bitmap[j * w + i]));
//ledControls[0].setLed(i, j, i, pgm_read_byte(&weather[(j+0) * 32 + i]));
ledControls[j / 8].setLed(15-(i/8), (j+0) % 8, i % 8, 1<<(i%8) & pgm_read_byte(&weather[j*(w/8) + i/8]));
//ledControls[0].setRow(6+(i/8), j, pgm_read_byte(&weather[j*(w/8) + i/8]));
//ledControls[1].setRow(6+(i/8), j, pgm_read_byte(&weather[(j+8)*(w/8) + i/8]));
/*
ledControls[(j+1) / 8].setLed(7, (j+1) % 8, i, pgm_read_byte(&weather[(j+1) * 32 + i]));
ledControls[(j+2) / 8].setLed(7, (j+2) % 8, i, pgm_read_byte(&weather[(j+2) * 32 + i]));
ledControls[(j+3) / 8].setLed(7, (j+3) % 8, i, pgm_read_byte(&weather[(j+3) * 32 + i]));
ledControls[(j+4) / 8].setLed(7, (j+4) % 8, i, pgm_read_byte(&weather[(j+4) * 32 + i]));
ledControls[(j+5) / 8].setLed(7, (j+5) % 8, i, pgm_read_byte(&weather[(j+5) * 32 + i]));
ledControls[(j+6) / 8].setLed(7, (j+6) % 8, i, pgm_read_byte(&weather[(j+6) * 32 + i]));
ledControls[(j+7) / 8].setLed(7, (j+7) % 8, i, pgm_read_byte(&weather[(j+7) * 32 + i]));
ledControls[(j+8) / 8].setLed(7, (j+8) % 8, i, pgm_read_byte(&weather[(j+8) * 32 + i]));
ledControls[(j+9) / 8].setLed(7, (j+9) % 8, i, pgm_read_byte(&weather[(j+9) * 32 + i]));
*/
}
}
//dma_display.endWrite();
}
void setup() {
drawImg(0, 0, weather, WEATHER_WIDTH, WEATHER_WIDTH);
delay(5000);
/*
int pinCS = 2; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
*/
}
void loop() {
int version = 1;
uint8_t qrcodeData[qrcode_getBufferSize(version)];
qrcode_initText(&qrcode, qrcodeData, version, ECC_LOW, "You're welcome!");
int scale = 3;
int shift = (side - (qrcode.size * scale)) / 2;
/*
for (int y = shift; y < side; y++) {
for (int x = shift; x < side; x++) {
int index = y / 8;
int address = size - 1 - (x / 8);
int row = y % 8;
int column = 7 - (x % 8);
// Turn out of bounds dots off to make sure they don't stay on
bool state = false;
if (x >= shift && x < shift + (qrcode.size * scale) && y >= shift && y < shift + (qrcode.size * scale)) {
state = qrcode_getModule(&qrcode, (x - shift) / scale, (y - shift) / scale);
}
ledControls[index].setLed(address, row, column, state);
}
}
*/
int y = shift;
for (int x = shift; x < side; x++) {
int index = y / 8;
int address = size - 1 - (x / 8);
int row = y % 8;
int column = 7 - (x % 8);
// Turn out of bounds dots off to make sure they don't stay on
bool state = false;
//if (x >= shift && x < shift + (qrcode.size * scale) && y >= shift && y < shift + (qrcode.size * scale)) {
// state = qrcode_getModule(&qrcode, (x - shift) / scale, (y - shift) / scale);
//}
ledControls[(y+0) / 8].setLed(address, (y+0) % 8, column, pgm_read_byte(&weather[(y+0) * 32 + x]));
ledControls[(y+1) / 8].setLed(address, (y+1) % 8, column, pgm_read_byte(&weather[(y+1) * 32 + x]));
ledControls[(y+2) / 8].setLed(address, (y+2) % 8, column, pgm_read_byte(&weather[(y+2) * 32 + x]));
ledControls[(y+3) / 8].setLed(address, (y+3) % 8, column, pgm_read_byte(&weather[(y+3) * 32 + x]));
ledControls[(y+4) / 8].setLed(address, (y+4) % 8, column, pgm_read_byte(&weather[(y+4) * 32 + x]));
ledControls[(y+5) / 8].setLed(address, (y+5) % 8, column, pgm_read_byte(&weather[(y+5) * 32 + x]));
ledControls[(y+6) / 8].setLed(address, (y+6) % 8, column, pgm_read_byte(&weather[(y+6) * 32 + x]));
ledControls[(y+7) / 8].setLed(address, (y+7) % 8, column, pgm_read_byte(&weather[(y+7) * 32 + x]));
ledControls[(y+8) / 8].setLed(address, (y+8) % 8, column, pgm_read_byte(&weather[(y+8) * 32 + x]));
ledControls[(y+9) / 8].setLed(address, (y+9) % 8, column, pgm_read_byte(&weather[(y+9) * 32 + x]));
ledControls[(y+10) / 8].setLed(address, (y+10) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+10) - shift) / scale));
ledControls[(y+11) / 8].setLed(address, (y+11) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+11) - shift) / scale));
ledControls[(y+12) / 8].setLed(address, (y+12) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+12) - shift) / scale));
ledControls[(y+13) / 8].setLed(address, (y+13) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+13) - shift) / scale));
ledControls[(y+14) / 8].setLed(address, (y+14) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+14) - shift) / scale));
ledControls[(y+15) / 8].setLed(address, (y+15) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+15) - shift) / scale));
ledControls[(y+16) / 8].setLed(address, (y+16) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+16) - shift) / scale));
ledControls[(y+17) / 8].setLed(address, (y+17) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+17) - shift) / scale));
ledControls[(y+18) / 8].setLed(address, (y+18) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+18) - shift) / scale));
ledControls[(y+19) / 8].setLed(address, (y+19) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+19) - shift) / scale));
ledControls[(y+20) / 8].setLed(address, (y+20) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+20) - shift) / scale));
ledControls[(y+21) / 8].setLed(address, (y+21) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+21) - shift) / scale));
ledControls[(y+22) / 8].setLed(address, (y+22) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+22) - shift) / scale));
ledControls[(y+23) / 8].setLed(address, (y+23) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+23) - shift) / scale));
ledControls[(y+24) / 8].setLed(address, (y+24) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+24) - shift) / scale));
ledControls[(y+25) / 8].setLed(address, (y+25) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+25) - shift) / scale));
ledControls[(y+26) / 8].setLed(address, (y+26) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+26) - shift) / scale));
ledControls[(y+27) / 8].setLed(address, (y+27) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+27) - shift) / scale));
ledControls[(y+28) / 8].setLed(address, (y+28) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+28) - shift) / scale));
ledControls[(y+29) / 8].setLed(address, (y+29) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+29) - shift) / scale));
ledControls[(y+30) / 8].setLed(address, (y+30) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+30) - shift) / scale));
ledControls[(y+31) / 8].setLed(address, (y+31) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+31) - shift) / scale));
ledControls[(y+32) / 8].setLed(address, (y+32) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+32) - shift) / scale));
ledControls[(y+33) / 8].setLed(address, (y+33) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+33) - shift) / scale));
ledControls[(y+34) / 8].setLed(address, (y+34) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+34) - shift) / scale));
ledControls[(y+35) / 8].setLed(address, (y+35) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+35) - shift) / scale));
ledControls[(y+36) / 8].setLed(address, (y+36) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+36) - shift) / scale));
ledControls[(y+37) / 8].setLed(address, (y+37) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+37) - shift) / scale));
ledControls[(y+38) / 8].setLed(address, (y+38) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+38) - shift) / scale));
ledControls[(y+39) / 8].setLed(address, (y+39) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+39) - shift) / scale));
ledControls[(y+40) / 8].setLed(address, (y+40) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+40) - shift) / scale));
ledControls[(y+41) / 8].setLed(address, (y+41) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+41) - shift) / scale));
ledControls[(y+42) / 8].setLed(address, (y+42) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+42) - shift) / scale));
ledControls[(y+43) / 8].setLed(address, (y+43) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+43) - shift) / scale));
ledControls[(y+44) / 8].setLed(address, (y+44) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+44) - shift) / scale));
ledControls[(y+45) / 8].setLed(address, (y+45) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+45) - shift) / scale));
ledControls[(y+46) / 8].setLed(address, (y+46) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+46) - shift) / scale));
ledControls[(y+47) / 8].setLed(address, (y+47) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+47) - shift) / scale));
ledControls[(y+48) / 8].setLed(address, (y+48) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+48) - shift) / scale));
ledControls[(y+49) / 8].setLed(address, (y+49) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+49) - shift) / scale));
ledControls[(y+50) / 8].setLed(address, (y+50) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+50) - shift) / scale));
ledControls[(y+51) / 8].setLed(address, (y+51) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+51) - shift) / scale));
ledControls[(y+52) / 8].setLed(address, (y+52) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+52) - shift) / scale));
ledControls[(y+53) / 8].setLed(address, (y+53) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+53) - shift) / scale));
ledControls[(y+54) / 8].setLed(address, (y+54) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+54) - shift) / scale));
ledControls[(y+55) / 8].setLed(address, (y+55) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+55) - shift) / scale));
ledControls[(y+56) / 8].setLed(address, (y+56) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+56) - shift) / scale));
ledControls[(y+57) / 8].setLed(address, (y+57) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+57) - shift) / scale));
ledControls[(y+58) / 8].setLed(address, (y+58) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+58) - shift) / scale));
ledControls[(y+59) / 8].setLed(address, (y+59) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+59) - shift) / scale));
ledControls[(y+60) / 8].setLed(address, (y+60) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+60) - shift) / scale));
ledControls[(y+61) / 8].setLed(address, (y+61) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+61) - shift) / scale));
ledControls[(y+62) / 8].setLed(address, (y+62) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+62) - shift) / scale));
ledControls[(y+63) / 8].setLed(address, (y+63) % 8, column, qrcode_getModule(&qrcode, (x - shift) / scale, ((y+63) - shift) / scale));
}
//delay(5000);
}