Stap 6: De code die ik gebruikt
/ * ### # Arduino POV voor 5 LEDs # ### Circuit: 5 LEDs elk teken wordt gegeven een 5 x 5 raster om haar te vertegenwoordigen is zelf bijvoorbeeld "H" is O O O O OOOOO O O O O elk van deze verticale lijnen uit een enkel getal voor de "H bestaat" voorbeeld de nummers zijn 31,4,4,4,31 16 O O 8 O O 4 OOOOO 2 O O 1 O O 31 is 16 + 8 + 4 + 2 + 1 (alle leds verlicht) 4 is 0 + 0 + 4 + 0 + 0 (alleen het midden led brandt) / / 7/13 - begonnen met zieke fated project / / 11/13 V4 - neede overstappen fron byte op char voor de toetsenbord-streek. 11/29 V5 verwijderen invoegen spaties en bedrade schakelaar correct / / werkt vrij goed voor om het even welk bericht minder dan 11 tekens / / 12/2 v6 - beginnen met het toevoegen van de functie time / / 12/5 - v7 veranderd met de tijd als een standaard * / #define versie "1.00a0" #include / / gebruiken de RTC tijd #include "Wire.h" #define DS1307_ADDRESS 0x68 String stringOne = ""; Const int DataPin = 4; Const int IRQpin = 3; PS2Keyboard toetsenbord; Const korte int debug = 0; Const korte int debug2 = 0; Const korte int debug3 = 0; Const korte int debug4 = 0; int charBreak = 1750; char vertragen tijd int betweenColumns = 685; int LED1 = 6; int LED2 = 2; int LED3 = 5; int LED4 = 8; int LED5 = 7; int switchPina = 10; reed switch rietschakelaar naar het midden van de weergave int ps2Power = 11; vermogen voor keyboard / / voor de int keer tweede = 0, minuten = 0, uur = 0; de begintijd op 00:00:00 //needed aan recv gegevens const int totChar = 13; char textArray [totChar]; int textArrayindx = 0; char textDsply [totChar]; ---setup---void setup {keyboard.begin (DataPin, IRQpin); / / toetsenbord Wire.begin(); / / tijd / / Serial.begin(9600); if(debug) {delay(1000); Serial.println ("Test toetsenbord:");} stringOne = String(""); pinMode (LED1, uitvoer); pinMode (LED2, uitvoer); pinMode (LED3, uitvoer); pinMode (LED4, uitvoer); pinMode (LED5, uitvoer); pinMode (switchPina, INPUT); reed switch pinMode (ps2Power, OUTPUT); PS2 toetsenbord digitalWrite (switchPina, hoge); digitalWrite (ps2Power, hoge); testen om te zien alle leds licht digitalWrite (LED1, hoge); instellen van de LED op delay(500); digitalWrite (LED2, hoge); instellen van de LED op delay(500); digitalWrite (LED3, hoge); instellen van de LED op delay(500); digitalWrite (LED4, hoge); instellen van de LED op delay(500); digitalWrite (LED5, hoge); instellen van de LED op delay(500); } / /---/ /---loop---void loop {/ / idee is: / / standaard zal worden de tijd / / als belangrijkste lijn ingevoerd, dan tijd verstoren en bericht weergeven. Als (keyboard.available()) {/ / Lees de inkomende byte char c = keyboard.read(); if(debug) {/ / check voor een aantal van de speciale toetsen als (c == PS2_ENTER) {Serial.print("^");} anders als (c == PS2_TAB) {Serial.print("[Tab]");} anders als (c == PS2_ESC) {Serial.print("[ESC]");} anders als (c == PS2_PAGEDOWN) {Serial.print("[PgDn]")}; anders als (c == PS2_PAGEUP) {Serial.print("[PgUp]");} anders als (c == PS2_LEFTARROW) {Serial.print("[Left]");} anders als (c == PS2_RIGHTARROW) {Serial.print("[Right]");} anders als (c == PS2_UPARROW) {Serial.print("[Up]")}; anders als (c == PS2_DOWNARROW) {Serial.print("[Down]");} anders Als (c == PS2_DELETE) {Serial.print("[Del]");} else {/ / anders gewoon afdrukken alle normale tekens Serial.print(c);}} delay(10); voorkomt dat overweldigend de seriële poort / / als treffer naar de steken toonsoort en textarray is niet leeg als (c == PS2_ENTER) {als (textArrayindx > = 1) {showIt();} else {showTime();}} / / get hier middelen gewoon een ander deel van het bericht zo toe te voegen aan de array / / inkomende byte toevoegen aan het bericht matrix textArray [textArrayindx] = c; textArrayindx ++; } else {showTime();}} ---functies voor alleen de tijd---/ /---void showTime() {terwijl (keyboard.available() == 0) {/ / nu wilt maken van de tekenreeks die wordt weergegeven in plaats van alleen afdrukken op de / / serieel stream printDate(); / / delay(1000);}} / /---byte bcdToDec(byte val) {/ / Convert binary coded decimal naar gewone decimale getallen terugkeer ((val/16 * 10) + (val % 16));} / /---void printDate() {/ / Reset de aanwijzer register Wire.beginTransmission(DS1307_ADDRESS); byte nul = 0x00; Wire.write(Zero); Wire.endTransmission(); Wire.requestFrom (DS1307_ADDRESS, 7); int tweede = bcdToDec(Wire.read()); int minuut = bcdToDec(Wire.read()); int uur = bcdToDec(Wire.read() & 0b111111); 24 uur tijd int weekdag = bcdToDec(Wire.read()); 0-6-> zondag - zaterdag int monthDay = bcdToDec(Wire.read()); int maand = bcdToDec(Wire.read()); int. jaar = bcdToDec(Wire.read()); if(debug) {//print de datum EG 3/1/11 23:59:59 Serial.print(month); Serial.Print("/"); Serial.Print(monthDay); Serial.Print("/"); Serial.Print(Year); Serial.Print(""); Serial.Print(hour); Serial.Print(":"); Serial.Print(Minute); Serial.Print(":"); Serial.println(Second); } / / create de tekenreeks worden van displayerd / / als uur = 0 dan overstappen op 12 / / als hr greter dan 12 dan 12 aftrekken als (uur > = 13) {uur = (uur - 12);} stringOne += uur; stringOne += ":"; stringOne += minuut; stringOne += ":"; stringOne += tweede; int val2 = digitalRead(switchPina); Als (val2 == LOW) {vertraging (26); / / displayString("12:34:00"); / / displayString(stringOne); voor (int i = 0; ik < = (stringOne.length()); i ++) {displayChar(stringOne[i]);}} stringOne = "";} ---functies voor het bericht alleen---/ /---void showIt() {terwijl (keyboard.available() == 0) {/ / test om te zien hoe de snaren eruit ziet if(debug3) {Serial.println(textArray); Serial.println(textDsply); delay(3000); } sensorTest(); } / / get hier betekent iets gedrukt / / als gewoon enter sleutel dan tijd weergeven / / als iets anders dan een nieuw bericht begint char c = keyboard.read(); Als (c == PS2_ENTER) {clearIt(); showTime();} else {clearIt(), textArray [textArrayindx] = c; textArrayindx ++;}} ---void sensorTest() {int val = digitalRead(switchPina); als (val == LOW) {/ / wilt uitstellen op basis van grootte van bericht int. numberBlanks = (totChar - textArrayindx) / 2; if(debug) {delay(1000); Serial.println(numberBlanks); } Als (numberBlanks < = 1) {vertraging (12);} anders als (numberBlanks == 2) {vertraging (26);} else if (numberBlanks == 3) {vertraging (30);} else if (numberBlanks == 4) {vertraging (35);} else if (numberBlanks == 5) {vertraging (40);} else if (numberBlanks == 6) {vertraging (45);} voor (int k = 0; kdisplayChar(textArray[k]); }}} / /---void clearIt() {/ / get hier betekent is begonnen met een andere stroom / / moeten dus leeg textArray en herbegin / / lus via de array en vervang de tekens / / en reset het indexnummer voor (int z = 0; z
(textDsply [z] = ' '); (textArray [z] = ' '); textArrayindx = 0; }} int een [] = {1, 6, 26, 6, 1}; int b [] = {31 21 21, 10, 0}; int c2 [] = {14, 17, 17, 10, 0}; int d [] = {31 17, 17, 14, 0}; int e [] = {31 21 21, 17, 0}; int f [] = {31 20, 20, 16, 0}; int g [] = {14, 17, 19, 10, 0}; int h [] = {31, 4, 4, 4, 31}; int ik [] = {0, 17, 31, 17, 0}; int j [] = {0, 17, 30, 16, 0}; int k [] = {31, 4, 10, 17, 0}; int l [] = {31, 1, 1, 1, 0}; int m [] = {31 12, 3, 12, 31}; int [n] = {31 12, 3, 31, 0}; int o [] = {14, 17, 17, 14, 0}; int p [] = {31 20, 20, 8, 0}; int q [] = {14, 17, 19, 14, 2}; int r [] = {31, 20, 22, 9, 0}; int s [] = {8 21 21, 2, 0}; int t [] = {16, 16, 31, 16, 16}; int u [] = {1, 1, 30, 30, 0}; int v [] = {24, 6 1, 6, 24}; int w [] = {28, 3, 12, 3, 28}; int x[] = {17, 10, 4, 10, 17}; int y [] = {17, 10, 4, 8, 16}; int z [] = {19, 21, 21, 25, 0}; getallen int n1 [] = {0, 0, 31, 0, 0}; int n2 [] = {17, 19, 21, 25, 0}; int n3 [] = {0, 17, 21, 21, 31}; int n4 [] = {28, 4, 4, 31, 0}; int n5 [] = {0, 29 21, 21, 23}; int n6 [] = {31, 5, 5, 7, 0}; int n7 [] = {0, 16,16, 16,31}; int n8 [] = {0, 31, 21, 21, 31}; int n9 [] = {0, 28,20, 20,31}; int n0 [] = {0,31,17, 17,31}; int eos [] = {0, 1, 0, 0, 0}; int excl [] = {0, 29, 0, 0, 0}; int vragen [] = {8, 19, 20, 8, 0}; int equ [] = {0, 10,10,10,0}; int dubbele punt [] = {0,10,0}; VOID displayLine (int lijn) {int myline; myline = lijn; als (myline > = 16) {digitalWrite (LED1, hoge); myline-= 16;} else {digitalWrite (LED1, laag);} als (myline > = 8) {digitalWrite (LED2, hoge); myline-= 8;} anders {digitalWrite (LED2, laag);} als (myline > = 4) {digitalWrite (LED3, hoge); myline-= 4;} anders {digitalWrite (LED3, laag);} als (myline > = 2) {digitalWrite (LED4, hoge); myline-= 2;} else {digitalWrite (LED4, laag);} als (myline > = 1) {digitalWrite (LED5 HOGE); myline-= 1;} else {digitalWrite (LED5, laag);}} VOID displayChar (char c) {als (c == 'a') {voor (int i = 0; ik < 5; i ++) {displayLine (een [i]); delayMicroseconds (betweenColumns) ;} displayLine(0);} Als (c == 'b') {voor (int i = 0; ik < 5; i ++) {displayLine (b [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'c') {voor (int i = 0; ik < 5; i ++) {displayLine (c2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == had') {voor (int i = 0; ik < 5; i ++) {displayLine (d [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == "e") {voor (int i = 0; ik < 5; i ++) {displayLine (e [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'f') {voor (int i = 0; ik < 5; i ++) {displayLine (f [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'g') {voor (int i = 0; ik < 5; i ++) {displayLine (g [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'h') {voor (int i = 0; ik < 5; i ++) {displayLine (h [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'i') {voor (int het = 0; het < 5; it ++) {displayLine (i [it]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'j') {voor (int i = 0; ik < 5; i ++) {displayLine (j [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'k') {voor (int i = 0; ik < 5; i ++) {displayLine (k [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'l') {voor (int i = 0; ik < 5; i ++) {displayLine (l [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == ben ') {for (int i = 0; ik < 5; i ++) {displayLine (m [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'n') {for (int i = 0; ik < 5; i ++) {displayLine (n [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'o') {voor (int i = 0; ik < 5; i ++) {displayLine (o [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'p') {voor (int i = 0; ik < 5; i ++) {displayLine (p [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'q') {voor (int i = 0; ik < 5; i ++) {displayLine (q [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'r') {voor (int i = 0; ik < 5; i ++) {displayLine (r [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == de ') {voor (int i = 0; ik < 5; i ++) {displayLine (s [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 't') {voor (int i = 0; ik < 5; i ++) {displayLine (t [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'u') {voor (int i = 0; ik < 5; i ++) {displayLine (u [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == "v") {voor (int i = 0; ik < 5; i ++) {displayLine (v [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'w') {voor (int i = 0; ik < 5; i ++) {displayLine (w [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'x') {for (int i = 0; ik < 5; i ++) {displayLine (x [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c 'y' ==) {voor (int i = 0; ik < 5; i ++) {displayLine (y [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == 'z') {voor (int i = 0; ik < 5; i ++) {displayLine (z [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '!') {for (int i = 0; ik < 5; i ++) {displayLine (excl [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '?') {for (int i = 0; ik < 5; i ++) {displayLine (vragen [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '.') {for (int i = 0; ik < 5; i ++) {displayLine (eos [i]); delayMicroseconds (betweenColumns) ;} displayLine(0);} Als (c == '=') {for (int i = 0; ik < 5; i ++) {displayLine (equ [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == ':') {voor (int i = 0; ik < 3; i ++) {displayLine (dikke darm [i]); delayMicroseconds (betweenColumns);} displayLine(0);} getallen als (c == '1') {voor (int i = 0; ik < 5; i ++) {displayLine (n1 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '2') {voor (int i = 0; ik < 5; i ++) {displayLine (n2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '3') {voor (int i = 0; ik < 5; i ++) {displayLine (n3 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '4') {voor (int i = 0; ik < 5; i ++) {displayLine (n4 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '5') {voor (int i = 0; ik < 5; i ++) {displayLine (n5 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == "6") {voor (int i = 0; ik < 5; i ++) {displayLine (n6 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c '7' ==) {voor (int i = 0; ik < 5; i ++) {displayLine (n7 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '8') {voor (int i = 0; ik < 5; i ++) {displayLine (n8 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '9') {voor (int i = 0; ik < 5; i ++) {displayLine (n9 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Als (c == '0') {voor (int i = 0; ik < 5; i ++) {displayLine (n0 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} delayMicroseconds(charBreak); }