// Visual piano Tom´s idea
// LaskaKit program systems
#define COL_1 13 //sloupec 1. pin Arduino 13
#define COL_2 12 //sloupec 2. pin Arduino 12
#define COL_3 11 //
#define COL_4 10 //
#define COL_5 9 //
#define ROW_1 8 //řádek 1. pin Arduino 8
#define ROW_2 7 //řádek 2. pin Arduino 7
#define ROW_3 6 //
#define ROW_4 5 //
#define ROW_5 4 //
#define ROW_6 3 //
#define ROW_7 2 //
#define ROW_8 A0 //řádek 8. pin Arduino analog_0
const byte rows[] = {
ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8
};
int timeCount = 0;
//
byte note1[]= { B00011111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111,B11111111};
byte note2[]= { B00000000, B00000000, B00000000, B00000000, B00000010, B00000000, B00000000,B00000000};
byte note3[]= { B00000100, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000,B00000000};
byte note4[]= { B00000000, B00000000, B00000000, B00000100, B00000000, B00000000, B00000000,B00000000};
byte note5[]= { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000010,B00000000};
byte note6[]= { B00000000, B00000100,0,0,0,0,0,0} ;
void setup() {
// nastavení pinů pro výstup
for (byte i = 2; i <= 13; i++)
pinMode(i, OUTPUT);
pinMode(ROW_8, OUTPUT);
//
}
void loop() {
delay(2);
timeCount += 1;
if(timeCount < 100) {
drawScreen(note2);
} else if (timeCount < 210) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 300) {
drawScreen(note3);
} else if (timeCount < 410) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 500) {
drawScreen(note4);
} else if (timeCount < 610) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 700) {
drawScreen(note2);
} else if (timeCount < 810) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 900) {
drawScreen(note3);
} else if (timeCount < 1010) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 1100) {
drawScreen(note4);
} else if (timeCount < 1210) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 1300) {
drawScreen(note3);
} else if (timeCount < 1410) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 1500) {
drawScreen(note3);
} else if (timeCount < 1610) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 1700) {
drawScreen(note5);
} else if (timeCount < 1810) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 1900) {
drawScreen(note3);
} else if (timeCount < 2010) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 2100) {
drawScreen(note6);
} else if (timeCount < 2210) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 2300) {
drawScreen(note5);
} else if (timeCount < 2310) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 2400) {
drawScreen(note3);
} else if (timeCount < 2510) {
// nic neděláme -> pauza mezi znaky}
}else if (timeCount < 2600) {
drawScreen(note3);
} else if (timeCount < 2710) {
// nic neděláme -> pauza mezi znaky}
}else if (timeCount < 2800) {
drawScreen(note5);
} else if (timeCount < 2910) {
// nic neděláme -> pauza mezi znaky}
}else if (timeCount < 3000) {
drawScreen(note3);
} else if (timeCount < 3110) {
// nic neděláme -> pauza mezi znaky}
}else if (timeCount < 3200) {
drawScreen(note6);
} else if (timeCount < 3310) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 3400) {
drawScreen(note5);
} else if (timeCount < 3510) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 3600) {
drawScreen(note3);
} else if (timeCount < 3710) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 3800) {
drawScreen(note5);
} else if (timeCount < 3910) {
// nic neděláme -> pauza mezi znaky
} else if (timeCount < 4000) {
drawScreen(note2);
} else if (timeCount < 4110) {
// nic neděláme -> pauza mezi znaky
} else {
// a zase od začátku...
timeCount = 0;
}
}
void drawScreen(byte buffer2[]) {
// zapínáme každý řádek v sérii
for (byte i = 0; i < 8; i++) {
setColumns(buffer2[i]); // nastav sloupce pro tento konkrétní řádek
digitalWrite(rows[i], LOW);
delay(2); // nastav na 50 až 100, chceš-li vidět multiplexní efekt!!!
digitalWrite(rows[i], HIGH);
}
}
void setColumns(byte b) {
digitalWrite(COL_1, (b >> 0) & 0x01); // získat 1 bit: 10000000
digitalWrite(COL_2, (b >> 1) & 0x01); // získat 2 bit: 01000000
digitalWrite(COL_3, (b >> 2) & 0x01); // získat 3 bit: 00100000
digitalWrite(COL_4, (b >> 3) & 0x01); // získat 4 bit: 00010000
digitalWrite(COL_5, (b >> 4) & 0x01); // získat 5 bit: 00001000
// digitalWrite(COL_6, (b >> 5) & 0x01); // získat 6 bit: 00000100
// digitalWrite(COL_7, (b >> 6) & 0x01); // získat 7 bit: 00000010
// digitalWrite(COL_8, (b >> 7) & 0x01); // získat 8 bit: 00000001
}