POV klocka & meddelande Visa w/RTC och PS/2 tangentbord (6 / 7 steg)
Steg 6: Koden jag använde
/ * ### # Arduino POV för 5 lysdioder # ### krets: 5 lysdioder varje tecken ges en 5 x 5 rutnät för att representera den sig själv till exempel "H" är O O O O OOOOO O O O O vart och ett av dessa vertikala linjer är gjord av ett enda nummer för "H" exempel siffrorna är 31,4,4,4,31 16 O O 8 O O 4 OOOOO 2 O O 1 O O 31 är 16 + 8 + 4 + 2 + 1 (alla LED lyser) 4 är 0 + 0 + 4 + 0 + 0 (endast mitten led lyser) / / 7/13 - började med olycksalige projekt / / 11/13 V4 - neede att ändra fron byte till röding för tangentbord stroke. 11/29 V5 bort infoga tomma celler och trådbunden switch korrekt / / fungerar ganska bra för någon meddelande mindre än 11 tecken / / 12/2 v6 - börja att lägga till tidsfunktion / / 12/5 - v7 förändrats visar tid som standard * / #define VERSION "1.00a0" #include / / använda RTC tid #include "Wire.h" #define DS1307_ADDRESS 0x68 String stringOne = ""; CONST int DataPin = 4; CONST int IRQpin = 3; PS2Keyboard tangentbord; CONST kort int debug = 0; CONST kort int debug2 = 0; CONST kort int debug3 = 0; CONST kort int debug4 = 0; int charBreak = 1750; char fördröja tiden int betweenColumns = 685; int LED1 = 6; int LED2 = 2; int LED3 = 5; int LED4 = 8; int LED5 = 7. int switchPina = 10; Reed switch att centrera display int ps2Power = 11; Power för tangentbord / för tiden int näst = 0, minut = 0, timme = 0; starttid på 00:00:00 //needed att ta emot data const int totChar = 13. char textArray [totChar]; int textArrayindx = 0; char textDsply [totChar]; ---setup---void setup() {keyboard.begin (DataPin, IRQpin); / / tangentbord Wire.begin(); / / tid / / Serial.begin(9600), if(debug) {delay(1000); Serial.println ("tangentbord Test:");} stringOne = String(""); pinMode (LED1, OUTPUT); pinMode (LED2, OUTPUT); pinMode (LED3, OUTPUT); pinMode (LED4, OUTPUT); pinMode (LED5, OUTPUT); pinMode (switchPina, ingång); Reed switch pinMode (ps2Power, produktionen); PS2 Tangentbord digitalWrite (switchPina, hög); digitalWrite (ps2Power, hög); testa för att se alla lysdioder ljus digitalWrite (LED1, hög); Set LED på delay(500); digitalWrite (LED2, hög); Set LED på delay(500); digitalWrite (LED3, hög); Set LED på delay(500); digitalWrite (LED4, hög); Set LED på delay(500); digitalWrite (LED5, hög); Set LED på delay(500); } / /---/ /---slinga---void loop() {/ / idén är: / / standard kommer att vara i tid. / / om tangentnedslag, sedan störa tid och Visa meddelande. om (keyboard.available()) {/ / läsa inkommande byte char c = keyboard.read(); if(debug) {/ / kontrollera om några av de speciella tangenterna om (c == PS2_ENTER) {Serial.print("^");} else om (c == PS2_TAB) {Serial.print("[Tab]");} annars om (c == PS2_ESC) {Serial.print("[ESC]");} else om (c == PS2_PAGEDOWN) {Serial.print("[PgDn]");} annars om (c == PS2_PAGEUP) {Serial.print("[PgUp]");} annars om (c == PS2_LEFTARROW) {Serial.print("[Left]");} annars om (c == PS2_RIGHTARROW) {Serial.print("[Right]");} annars om (c == PS2_UPARROW) {Serial.print("[Up]");} annars om (c == PS2_DOWNARROW) {Serial.print("[Down]");} annat om (c == PS2_DELETE) {Serial.print("[Del]");} annat {/ / annars, bara Skriv ut alla vanliga tecken Serial.print(c);}} Delay(10); förhindrar överväldigande den seriella porten / / om tryck på Enter och textarray inte är tom om (c == PS2_ENTER) {om (textArrayindx > = 1) {showIt();} annat {showTime();}} / / få här innebär bara en del av meddelandet så Lägg det till matrisen / / Lägg till inkommande byte till meddelande array textArray [textArrayindx] = c; textArrayindx ++; {} annat {showTime();}} ---funktioner för tiden bara---/ /---void showTime() {medan (keyboard.available() == 0) {/ / nu måste skapa strängen ska visas i stället för att bara skriva ut till den / / seriell ström printDate(); / / delay(1000);}} / /---byte bcdToDec(byte val) {/ / konvertera binary coded decimal till normala decimal nummer tillbaka ((val/16 * 10) + (val % 16));} / /---void printDate() {/ / Reset register pekaren Wire.beginTransmission(DS1307_ADDRESS); byte noll = 0x00; Wire.write(Zero); Wire.endTransmission(); Wire.requestFrom (DS1307_ADDRESS, 7); int näst = bcdToDec(Wire.read()); int minut = bcdToDec(Wire.read()); int timme = bcdToDec(Wire.read() & 0b111111); 24 timmars tid int vardag = bcdToDec(Wire.read()); 0-6-> söndag - lördag int monthDay = bcdToDec(Wire.read()); int månad = bcdToDec(Wire.read()); int år = bcdToDec(Wire.read()); IF(debug) {//print dag 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); } / / skapa strängen för att vara displayerd / / om timme = 0 då ändra till 12 / / om hr greter än 12 subtrahera sedan 12 om (timme > = 13) {timme = (timme - 12);} stringOne += timme; stringOne += ":"; stringOne += minut. stringOne += ":"; stringOne += andra; int värde2 = digitalRead(switchPina); om (värde2 == låg) {fördröjning (26). / / displayString("12:34:00"); / / displayString(stringOne); för (int jag = 0; jag < = (stringOne.length()); i ++) {displayChar(stringOne[i]);}} stringOne = "";} ---funktioner för meddelandet endast---/ /---void showIt() {medan (keyboard.available() == 0) {/ / test för att se hur strängarna ser ut if(debug3) {Serial.println(textArray); Serial.println(textDsply); Delay(3000); } sensorTest(); } / / få här betyder något tryckte / / om bara anger du nyckeln och sedan Visa tid / om något annat då ett nytt meddelande börjar char c = keyboard.read(); om (c == PS2_ENTER) {clearIt(); showTime();} annat {clearIt(); textArray [textArrayindx] = c; textArrayindx ++;}} ---void sensorTest() {int val = digitalRead(switchPina); om (val == låg) {/ / behöver fördröja baserat på storleken på meddelandet int numberBlanks = (totChar - textArrayindx) / 2, if(debug) {delay(1000); Serial.println(numberBlanks); } om (numberBlanks < = 1) {dröjsmål 12.} annars om (numberBlanks == 2) {fördröjning (26);} else om (numberBlanks == 3) {fördröjning (30);} annat if (numberBlanks == 4) {fördröjning (35);} annat if (numberBlanks == 5) {fördröjning (40);} annat if (numberBlanks == 6) {fördröjning (45);} för (int k = 0; k
displayChar(textArray[k]); {}}} / /---void clearIt() {/ / få här innebär en annan ström har startat / / så behöver tömma textArray och börja om / / loop genom matrisen och ersätta tecken / / och återställa indexnumret för (int z = 0; z
(textDsply [z] = ' "); (textArray [z] = ' "); textArrayindx = 0; {}} int en [] = {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 jag [] = {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 [] = {30, 1, 1, 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}; nummer 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 exkl [] = {0, 29, 0, 0, 0}; int frå [] = {8, 19, 20, 8, 0}; int equ [] = {0, 10,10,10,0}; int kolon [] = {0,10,0}; void displayLine (int linje) {int Linnea; Linnea = linje; om (Linnea > = 16) {digitalWrite (LED1, hög), Linnea-= 16.} annat {digitalWrite (LED1, låg);} om (Linnea > = 8) {digitalWrite (LED2, hög), Linnea-= 8.} annat {digitalWrite (LED2, låg);} om (Linnea > = 4) {digitalWrite (LED3, hög); Linnea-= 4.} annat {digitalWrite (LED3, låg);} om (Linnea > = 2) {digitalWrite (LED4, hög), Linnea-= 2;} annat {digitalWrite (LED4, låg);} om (Linnea > = 1) {digitalWrite (LED5 HÖG); Linnea-= 1.} annat {digitalWrite (LED5, låg);}} void displayChar (char c) {om (c == "a") {för (int jag = 0; jag < 5; i ++) {displayLine (en [i]), delayMicroseconds (betweenColumns) ;} displayLine(0);} om (c == 'b') {för (int jag = 0; jag < 5; i ++) {displayLine b [i], delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "c") {för (int jag = 0; jag < 5; i ++) {displayLine (c2 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == hade ") {för (int jag = 0; jag < 5; i ++) {displayLine d [i], delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "e") {för (int jag = 0; jag < 5; i ++) {displayLine e [i], delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "f") {för (int jag = 0; jag < 5; i ++) {displayLine f [i]; delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "g") {för (int jag = 0; jag < 5; i ++) {displayLine (g [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "h") {för (int jag = 0; jag < 5; i ++) {displayLine (h [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "i") {för (int det = 0; det < 5; it ++) {displayLine i [it], delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "j") {för (int jag = 0; jag < 5; i ++) {displayLine (j [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "k") {för (int jag = 0; jag < 5; i ++) {displayLine (k [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "l") {för (int jag = 0; jag < 5; i ++) {displayLine (l [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == är ") {för (int jag = 0; jag < 5; i ++) {displayLine (m [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == 'n') {för (int jag = 0; jag < 5; i ++) {displayLine (n [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "o") {för (int jag = 0; jag < 5; i ++) {displayLine (o [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "p") {för (int jag = 0; jag < 5; i ++) {displayLine (p [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "q") {för (int jag = 0; jag < 5; i ++) {displayLine (q [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "r") {för (int jag = 0; jag < 5; i ++) {displayLine (r [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == 's ") {för (int jag = 0; jag < 5; i ++) {displayLine s [i]; delayMicroseconds (betweenColumns);} displayLine(0);} om (c == 't') {för (int jag = 0; jag < 5; i ++) {displayLine t [i], delayMicroseconds (betweenColumns);} displayLine(0);} om (c == 'u') {för (int jag = 0; jag < 5; i ++) {displayLine (u [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "v") {för (int jag = 0; jag < 5; i ++) {displayLine (v [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "w") {för (int jag = 0; jag < 5; i ++) {displayLine (w [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "x") {för (int jag = 0; jag < 5; i ++) {displayLine (x [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "y") {för (int jag = 0; jag < 5; i ++) {displayLine (y [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "z") {för (int jag = 0; jag < 5; i ++) {displayLine (z [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '!') {för (int jag = 0; jag < 5; i ++) {displayLine (exkl [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "?') {för (int jag = 0; jag < 5; i ++) {displayLine (frå [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == ".") {för (int jag = 0; jag < 5; i ++) {displayLine (eos [i]), delayMicroseconds (betweenColumns) ;} displayLine(0);} om (c == '=') {för (int jag = 0; jag < 5; i ++) {displayLine (equ [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == ':') {för (int jag = 0; jag < 3; i ++) {displayLine (kolon [i]), delayMicroseconds (betweenColumns);} displayLine(0);} numrerar om (c == '1') {för (int jag = 0; jag < 5; i ++) {displayLine (n1 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '2') {för (int jag = 0; jag < 5; i ++) {displayLine (n2 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '3') {för (int jag = 0; jag < 5; i ++) {displayLine (n3 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '4') {för (int jag = 0; jag < 5; i ++) {displayLine (n4 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == "5") {för (int jag = 0; jag < 5; i ++) {displayLine (n5 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '6') {för (int jag = 0; jag < 5; i ++) {displayLine (n6 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '7') {för (int jag = 0; jag < 5; i ++) {displayLine (n7 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '8') {för (int jag = 0; jag < 5; i ++) {displayLine (n8 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '9') {för (int jag = 0; jag < 5; i ++) {displayLine (n9 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} om (c == '0') {för (int jag = 0; jag < 5; i ++) {displayLine (n0 [i]), delayMicroseconds (betweenColumns);} displayLine(0);} delayMicroseconds(charBreak); }