Paso 6: El código que usé
/ * ### # Arduino POV 5 LEDs # ### circuito: 5 LEDs cada personaje se le da un 5 x 5 red para representarla es por ejemplo "H" es O O O O OOOOO O O O O cada una de estas líneas verticales está hecha de un solo número para la "H" ejemplo los números son 16 31,4,4,4,31 O O 8 O O 4 OOOOO 2 O O 1 O O 31 es 16 + 8 + 4 + 2 + 1 (todos los leds se encienden) 4 es 0 + 0 + 4 + 0 + 0 (sólo medio led iluminado) / / 7/13 - empezó con proyecto mal fatal / / 11/13 V4 - neede para cambiar desde bytes a char para el golpe de teclado. 11/29 V5 Retire insertar espacios en blanco y atado con alambre del interruptor correctamente / funciona bastante bien para cualquier mensaje caracteres menos de 11 / 12/2 v6 - empezar a añadir en función del tiempo / / 12/5 - v7 cambiar muestra el tiempo por defecto * / #define VERSION "1.00a0" #include / / utilizar el RTC tiempo #include "Wire.h" #define DS1307_ADDRESS 0x68 cadena stringOne = ""; const int DataPin = 4; const int IRQpin = 3; PS2Keyboard teclado; const int corto debug = 0; const int corto debug2 = 0; const int corto debug3 = 0; const int corto debug4 = 0; int charBreak = 1750; char retrasar tiempo int betweenColumns = 685; int LED1 = 6; int LED2 = 2; int LED3 = 5; int LED4 = 8; int LED5 = 7; int switchPina = 10; interruptor de láminas, centro de la pantalla int ps2Power = 11; energía para el teclado / / para el tiempo int segundo = 0, minutos = 0, hora = 0; el tiempo de inicio en //needed 00:00:00 para recepción datos const int totChar = 13; char arrayTextos [totChar]; int textArrayindx = 0; char textDsply [totChar]; ---configuración---void setup() {keyboard.begin (DataPin, IRQpin); / / teclado Wire.begin(); / / tiempo / / Serial.begin(9600); if(debug) {delay(1000); Serial.println ("prueba de teclado:");} stringOne = String(""); pinMode (LED1, salida); pinMode (LED2, salida); pinMode (LED3, salida); pinMode (LED4, salida); pinMode (LED5, salida); pinMode (switchPina, entrada); Reed switch pinMode (ps2Power, salida); PS2 teclado digitalWrite (switchPina, HIGH); digitalWrite (ps2Power, HIGH); para comprobar los leds luz digitalWrite (LED 1, elevado); prende el LED de delay(500); digitalWrite (LED2, alto); prende el LED de delay(500); digitalWrite (LED 3, alto); prende el LED de delay(500); digitalWrite (LED4, alto); prende el LED de delay(500); digitalWrite (LED5, alto); prende el LED de delay(500); } / /---/ /---bucle---void loop() {/ / la idea es: / / por defecto será el tiempo. / si tecla entrar, entonces interrumpir el tiempo y mostrar el mensaje. Si (keyboard.available()) {/ / leer la entrada byte char c = keyboard.read(); if(debug) {/ / revisar algunas de las claves especiales si (c == PS2_ENTER) {Serial.print("^");} else if (c == PS2_TAB) {Serial.print("[Tab]");} else if (c == PS2_ESC) {Serial.print("[ESC]");} else if (c == PS2_PAGEDOWN) {Serial.print("[PgDn]");} else if (c == PS2_PAGEUP) {Serial.print("[PgUp]");} else if (c == PS2_LEFTARROW) {Serial.print("[Left]");} else if (c == PS2_RIGHTARROW) {Serial.print("[Right]");} else if (c == PS2_UPARROW) {Serial.print("[Up]");} else if (c == PS2_DOWNARROW) {Serial.print("[Down]");} más Si (c == PS2_DELETE) {Serial.print("[Del]");} else {/ / de lo contrario, sólo imprimir todos los caracteres normales Serial.print(c);}} Delay(10); evita abrumar el puerto serie / si Pulse la tecla enter y arrayTextos no es vacía si (c == PS2_ENTER) {si (textArrayindx > = 1) {showIt();} else {showTime();}} / / llegar aquí significa sólo una parte del mensaje así que añadirlo a la matriz / / byte entrante a la arrayTextos de matriz de mensaje [textArrayindx] = c; textArrayindx ++; } else {showTime();}} ---funciones por el tiempo---/ /---anular showTime() {mientras que (keyboard.available() == 0) {/ / ahora es necesario crear la cadena a mostrar en lugar de simplemente imprimir en el / / serie corriente printDate(); / / delay(1000);}} / /---bytes bcdToDec(byte val) {/ / convierte binario codificado decimal a decimal normal números retorno ((val/16 * 10) + (val % 16));} / /---anular printDate() {/ rearme el puntero de registro Wire.beginTransmission(DS1307_ADDRESS); byte cero = 0 x 00; Wire.Write(Zero); Wire.endTransmission(); Wire.requestFrom (DS1307_ADDRESS, 7); int = segundo bcdToDec(Wire.read()); int minutos = bcdToDec(Wire.read()); int hora = bcdToDec(Wire.read() & 0b111111); 24 horas tiempo int lunes a viernes = bcdToDec(Wire.read()); 0-6-> el domingo - sábado int monthDay = bcdToDec(Wire.read()); int mes = bcdToDec(Wire.read()); int año = bcdToDec(Wire.read()); if(debug) {//print la fecha CE 01/03/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); } / / creamos la cadena ser displayerd / si hora = 0 y luego cambiar a 12 / / hr más que 12 entonces restarán 12 si (hora > = 13) {hora = (hora - 12);} stringOne += horas; stringOne += ":"; stringOne += minutos; stringOne += ":"; += stringOne segundo; int val2 = digitalRead(switchPina); Si (val2 == baja) {delay (26); / / displayString("12:34:00"); / / displayString(stringOne); para (int i = 0; i < = (stringOne.length()); i ++) {displayChar(stringOne[i]);}} stringOne = "";} ---funciones para sólo el mensaje---/ /---void showIt() {mientras que (keyboard.available() == 0) {/ / test para ver lo que las cadenas if(debug3) {Serial.println(textArray); Serial.println(textDsply); Delay(3000); } sensorTest(); } / / llegar medios algo presionado / si sólo Enter key y luego mostrar el tiempo / / si nada entonces un nuevo mensaje comienza char c = keyboard.read(); Si (c == PS2_ENTER) {clearIt(); showTime();} else {clearIt(); arrayTextos [textArrayindx] = c; textArrayindx ++;}} ---void sensorTest() {int val = digitalRead(switchPina); if (val == LOW) {/ necesita retrasar basado en tamaño de mensaje int numberBlanks = (totChar - textArrayindx) / 2; if(debug) {delay(1000); Serial.println(numberBlanks); } Si (numberBlanks < = 1) {delay (12);} else if (numberBlanks == 2) {delay (26);} else if (numberBlanks == 3) {delay (30);} else if (numberBlanks == 4) {delay (35);} else if (numberBlanks == 5) {delay (40);} else if (numberBlanks == 6) {delay (45);} para (int k = 0; kdisplayChar(textArray[k]); }}} / /---anular clearIt() {/ / obtener aquí significa otra corriente ha comenzado / lo necesita vaciar arrayTextos y empezar de nuevo / bucle a través de la matriz y sustituya los caracteres / / y restablecer el número de índice (int z = 0; z
(textDsply [z] = ' '); (arrayTextos [z] = ' '); textArrayindx = 0; }} int a [] = {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 i [] = {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}; números 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}; n9 de int [] = {0, 28,20, 20,31}; int [n0] = {0,31,17, 17,31}; eos de int [] = {0, 1, 0, 0, 0}; int [excl] = {0, 29, 0, 0, 0}; ques de int [] = {8, 19, 20, 8, 0}; int equ [] = {0, 10,10,10,0}; int puntos [] = {0,10,0}; void displayLine (int line) {int myline; myline = línea; si (myline > = 16) {digitalWrite (LED 1, elevado); myline-= 16;} else {digitalWrite (LED 1, LOW);} si (myline > = 8) {digitalWrite (LED2, alto); myline-= 8;} else {digitalWrite (LED2, LOW);} si (myline > = 4) {digitalWrite (LED 3, alto); myline-= 4;} else {digitalWrite (LED 3, LOW);} si (myline > = 2) {digitalWrite (LED4, alto); myline-= 2;} else {digitalWrite (LED4, LOW);} si (myline > = 1) {digitalWrite (LED5 ALTO); myline-= 1;} Else {digitalWrite (LED5, LOW);}} void displayChar (char c) {si (c == 'a') {para (int i = 0; i < 5; i ++) {displayLine (un [i]); delayMicroseconds (betweenColumns) ;} displayLine(0);} Si (c == 'b') {para (int i = 0; i < 5; i ++) {displayLine (b [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'c') {para (int i = 0; i < 5; i ++) {displayLine (c2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == había ') {para (int i = 0; i < 5; i ++) {displayLine (d [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'e') {para (int i = 0; i < 5; i ++) {displayLine (e [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'f') {para (int i = 0; i < 5; i ++) {displayLine (f [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'g') {para (int i = 0; i < 5; i ++) {displayLine (g [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'h') {para (int i = 0; i < 5; i ++) {displayLine (h [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'i') {para (int se = 0; se < 5; it ++) {displayLine (i [it]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'j') {para (int i = 0; i < 5; i ++) {displayLine (j [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'k') {para (int i = 0; i < 5; i ++) {displayLine (k [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'l') {para (int i = 0; i < 5; i ++) {displayLine (l [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == estoy ') {para (int i = 0; i < 5; i ++) {displayLine (m [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == ' n ') {para (int i = 0; i < 5; i ++) {displayLine (n [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'o') {para (int i = 0; i < 5; i ++) {displayLine (o [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'p') {para (int i = 0; i < 5; i ++) {displayLine (p [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'q') {para (int i = 0; i < 5; i ++) {displayLine (q [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'r') {para (int i = 0; i < 5; i ++) {displayLine (r [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == de ') {para (int i = 0; i < 5; i ++) {displayLine (s [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == ' t ') {para (int i = 0; i < 5; i ++) {displayLine (t [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'u') {para (int i = 0; i < 5; i ++) {displayLine (u [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'v') {para (int i = 0; i < 5; i ++) {displayLine (v [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'w') {para (int i = 0; i < 5; i ++) {displayLine (w [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'x') {para (int i = 0; i < 5; i ++) {displayLine (x [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'y') {para (int i = 0; i < 5; i ++) {displayLine (y [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == 'z') {para (int i = 0; i < 5; i ++) {displayLine (z [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '. ') {para (int i = 0; i < 5; i ++) {displayLine (ex [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '?') {para (int i = 0; i < 5; i ++) {displayLine (ques [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '.') {para (int i = 0; i < 5; i ++) {displayLine (eos [i]); delayMicroseconds (betweenColumns) ;} displayLine(0);} Si (c == '=') {para (int i = 0; i < 5; i ++) {displayLine (ecuación [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == ':') {para (int i = 0; i < 3; i ++) {displayLine (puntos [i]); delayMicroseconds (betweenColumns);} displayLine(0);} números si (c == '1') {para (int i = 0; i < 5; i ++) {displayLine (n1 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '2') {para (int i = 0; i < 5; i ++) {displayLine (n2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '3') {para (int i = 0; i < 5; i ++) {displayLine (n3 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '4') {para (int i = 0; i < 5; i ++) {displayLine (n4 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '5') {para (int i = 0; i < 5; i ++) {displayLine (n5 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '6') {para (int i = 0; i < 5; i ++) {displayLine (n6 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '7') {para (int i = 0; i < 5; i ++) {displayLine (n7 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '8') {para (int i = 0; i < 5; i ++) {displayLine (n8 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '9') {para (int i = 0; i < 5; i ++) {displayLine (n9 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '0') {para (int i = 0; i < 5; i ++) {displayLine (n0 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} delayMicroseconds(charBreak); }