POV horloge & Message afficher w/RTC et clavier PS/2 (6 / 7 étapes)

Étape 6: Le code que j’ai utilisé

/ * ### # Arduino POV pour 5 LEDs # ### Circuit: 5 LEDs chaque caractère est donné un 5 x 5 grille pour le représenter est auto, par exemple, « H » est O O O O OOOOO O O O O chacune de ces lignes verticales est issu d’un seul numéro pour le « H » exemple les nombres sont 16 31,4,4,4,31 O O 8 O O 4 OOOOO 2 O O 1 O O 31 est de 16 + 8 + 4 + 2 + 1 (tous les voyants sont allumés) 4 est 0 + 0 + 4 + 0 + 0 (seulement le milieu dirigé allumé) / / 7/13 - a commencé avec l’infortuné projet / / 11/13 V4 - neede changer fron octets de char pour la course du clavier. 11/29 V5 enlever insert flans et interrupteur câblé correctement / / fonctionne assez bien pour tout message de moins de 11 caractères / / 12/2 v6 - commencer à ajouter la fonction heure / / 12/5 - v7 changé indiquant l’heure par défaut * / #define VERSION « 1.00a0 » #include / / utiliser le CCF temps #include « Wire.h » #define DS1307_ADDRESS 0x68 String stringOne = "" ; const int DataPin = 4 ; const int IRQpin = 3 ; PS2Keyboard clavier ; const int court debug = 0 ; const int court debug2 = 0 ; const int court debug3 = 0 ; const short int debug4 = 0 ; int charBreak = 1750 ; retarder le char temps int betweenColumns = 685 ; int LED1 = 6 ; int LED2 = 2 ; int DEL3 = 5 ; int LED4 = 8 ; int DEL5 = 7 ; int switchPina = 10 ; interrupteur Reed pour centrer l’affichage int ps2Power = 11 ; alimentation pour clavier / / pour le moment int second = 0, minutes = 0, heure = 0 ; l’heure de début sur 00:00:00 //needed à recv données const int totChar = 13 ; char textArray [totChar] ; int textArrayindx = 0 ; char textDsply [totChar] ; ---installation---void setup() {keyboard.begin (DataPin, IRQpin); / / clavier Wire.begin(); / / time / / Serial.begin(9600) ; if(debug) {delay(1000) ; Serial.println ("Test de clavier:");} stringOne = String("") ; pinMode (LED1, sortie) ; pinMode (LED2, sortie) ; pinMode (DEL3, sortie) ; pinMode (LED4, sortie) ; pinMode (DEL5, sortie) ; pinMode (switchPina, entrée) ; Reed switch pinMode (ps2Power, sortie) ; PS2 clavier digitalWrite (switchPina, HIGH) ; digitalWrite (ps2Power, HIGH) ; tester pour voir toutes les leds lumière digitalWrite (LED1, élevé) ; la valeur de la LED sur delay(500) ; digitalWrite (LED2, élevé) ; la valeur de la LED sur delay(500) ; digitalWrite (DEL3, élevé) ; la valeur de la LED sur delay(500) ; digitalWrite (LED4, élevé) ; la valeur de la LED sur delay(500) ; digitalWrite (DEL5, élevé) ; la valeur de la LED sur delay(500) ; } / /---/ /---boucle---void loop() {/ / l’idée est: / / par défaut sera le temps. / / si AVC clé entré, puis perturber le temps et montrer le message. Si (keyboard.available()) {/ / lire la nouvelle byte char c = keyboard.read() ; if(debug) {/ / check pour certains des touches spéciales si (c == PS2_ENTER) {Serial.print("^");} ElseIf (c == PS2_TAB) {Serial.print("[Tab]");} ElseIf (c == PS2_ESC) {Serial.print("[ESC]");} ElseIf (c == PS2_PAGEDOWN) {Serial.print("[PgDn]");} ElseIf (c == PS2_PAGEUP) {Serial.print("[PgUp]");} ElseIf (c == PS2_LEFTARROW) {Serial.print("[Left]");} ElseIf (c == PS2_RIGHTARROW) {Serial.print("[Right]");} ElseIf (c == PS2_UPARROW) {Serial.print("[Up]");} ElseIf (c == PS2_DOWNARROW) {Serial.print("[Down]");} else Si (c == PS2_DELETE) {Serial.print("[Del]");} else {/ / sinon, viens d’imprimer tous les caractères normaux Serial.print(c);}} Delay(10) ; empêche une écrasante le port série / / if Appuyez sur la touche entrée et textarray n’est pas vide si (c == PS2_ENTER) {si (textArrayindx > = 1) {showIt();} else {showTime();}} / / get ici signifie juste une autre partie du message donc l’ajouter au tableau / / ajouter les octets entrants pour le message tableau textArray [textArrayindx] = c ; textArrayindx ++ ; } else {showTime();}} ---fonctions pour le moment seulement---/ /---void showTime() {tandis que (keyboard.available() == 0) {/ / besoin maintenant créer la chaîne à afficher au lieu d’imprimer juste au / / série stream printDate(); / / delay(1000);}} / /---octets bcdToDec(byte val) {/ / Convert décimale codée en binaire en décimal normal nombres retour ((val/16 * 10) + (val % 16));} / /---void printDate() {/ / réinitialiser le registre de pointeur Wire.beginTransmission(DS1307_ADDRESS) ; octet zéro = 0 x 00 ; Wire.Write(Zero) ; Wire.endTransmission() ; Wire.requestFrom (DS1307_ADDRESS, 7) ; int = deuxième bcdToDec(Wire.read()) ; minute d’int = bcdToDec(Wire.read()) ; int h = bcdToDec(Wire.read() & 0b111111) ; 24 heures temps int jour de la semaine = bcdToDec(Wire.read()) ; 0-6-> dimanche - samedi int monthDay = bcdToDec(Wire.read()) ; int mois = bcdToDec(Wire.read()) ; année int = bcdToDec(Wire.read()) ; if(Debug) {//print la date EG 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) ; } / / Créez la chaîne pour être displayerd / / if heure = 0 puis changer à 12 / / if greter hr à 12 puis soustraire 12 si (heure > = 13) {heure = (h - 12);} stringOne += heure ; stringOne += ":" ; stringOne += minute ; stringOne += ":" ; stringOne += deuxième ; val2 int = digitalRead(switchPina) ; Si (val2 == faible) {retard (26); / / displayString("12:34:00"); / / displayString(stringOne) ; pour (int i = 0; j’ai < = (stringOne.length()); i ++) {displayChar(stringOne[i]);}} stringOne = "";} ---fonctions du message seulement---/ /---void showIt() {si (keyboard.available() == 0) {/ / test pour voir ce que les chaînes ressemblent if(debug3) {Serial.println(textArray) ; Serial.println(textDsply) ; Delay(3000) ; } sensorTest() ; } / / get ici signifie quelque chose de pressé / / si juste saisie touche puis sur Afficher l’heure / / si rien d’autre, puis un nouveau message commence char c = keyboard.read() ; Si (c == PS2_ENTER) {clearIt() ; showTime();} else {clearIt() ; textArray [textArrayindx] = c; textArrayindx ++;}} ---void sensorTest() {int val = digitalRead(switchPina) ; if (val == faible) {/ / besoin de retarder la fonction de taille de message int numberBlanks = (totChar - textArrayindx) / 2; if(debug) {delay(1000) ; Serial.println(numberBlanks) ; } Si (numberBlanks < = 1) {retard (12);} ElseIf (numberBlanks == 2) {retard (26);} else if (numberBlanks == 3) {retard (30);} ElseIf (numberBlanks == 4) {retard (35);} ElseIf (numberBlanks == 5) {retard (40);} ElseIf (numberBlanks == 6) {retard (45);} pour (int k = 0; k

displayChar(textArray[k]) ; }}} / /---void clearIt() {/ / get ici signifie un autre flux a commencé / / donc besoin de vider les textArray et recommencer / / boucle à travers le tableau et remplacer les caractères / / et réinitialiser le numéro d’index de (int z = 0; z

(textDsply [z] = ' ') ; (textArray [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} ; les numéros 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 ques [] = {8, 19, 20, 8, 0} ; int equ [] = {0, 10,10,10,0} ; int du côlon [] = {0,10,0} ; void displayLine (int ligne) {int myline ; myline = ligne ; if (myline > = 16) {digitalWrite (LED1, élevé); myline-= 16;} else {digitalWrite (LED1, LOW);} si (myline > = 8) {digitalWrite (LED2, élevé); myline-= 8;} else {digitalWrite (LED2, LOW);} si (myline > = 4) {digitalWrite (DEL3, élevé); myline-= 4;} else {digitalWrite (DEL3, LOW);} si (myline > = 2) {digitalWrite (LED4, élevé); myline-= 2;} else {digitalWrite (LED4, LOW);} si (myline > = 1) {digitalWrite (DEL5 ÉLEVÉ) ; myLine-= 1;} else {digitalWrite (DEL5, LOW);}} void displayChar (char c) {si (c == « a ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (un [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « b ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (b [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « c ») {pour (int i = 0; i < 5; i ++) {displayLine (c2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == avait ') {pour (int i = 0; j’ai < 5; i ++) {displayLine (d [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « e ») {pour (int i = 0; i < 5; i ++) {displayLine (e [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « f ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (f [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « g ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (g [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « h ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (h [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « i ») {pour (int il = 0; il < 5; TI ++) {displayLine (i [it]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « j ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (j [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « k ») {pour (int i = 0; i < 5; i ++) {displayLine (k [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « l ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (l [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == suis ') {pour (int i = 0; j’ai < 5; i ++) {displayLine (m [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == ' ne) {pour (int i = 0; i < 5; i ++) {displayLine (n [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « o ») {pour (int i = 0; i < 5; i ++) {displayLine (o [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « p ») {pour (int i = 0; i < 5; i ++) {displayLine (p [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « q ») {pour (int i = 0; i < 5; i ++) {displayLine (q [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « r ») {pour (int i = 0; i < 5; i ++) {displayLine (r [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == de ') {pour (int i = 0; j’ai < 5; i ++) {displayLine (s [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c ' t ==') {pour (int i = 0; j’ai < 5; i ++) {displayLine (t [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « u ») {pour (int i = 0; i < 5; i ++) {displayLine (u [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « v ») {pour (int i = 0; i < 5; i ++) {displayLine (v [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « w ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (w [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « x ») {pour (int i = 0; i < 5; i ++) {displayLine (x [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « y ») {pour (int i = 0; j’ai < 5; i ++) {displayLine (y [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « z ») {pour (int i = 0; i < 5; i ++) {displayLine (z [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '!') {pour (int i = 0; i < 5; i ++) {displayLine (excl [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '?') {pour (int i = 0; i < 5; i ++) {displayLine (ques [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == '.') {pour (int i = 0; i < 5; i ++) {displayLine (eos [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « = ») {pour (int i = 0; i < 5; i ++) {displayLine (equ [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == ':') {pour (int i = 0; j’ai < 3; i ++) {displayLine (côlon [i]); delayMicroseconds (betweenColumns);} displayLine(0);} numéros si (c == « 1 ») {pour (int i = 0; i < 5; i ++) {displayLine (n1 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 2 ») {pour (int i = 0; i < 5; i ++) {displayLine (n2 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 3 ») {pour (int i = 0; i < 5; i ++) {displayLine (n3 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 4 ») {pour (int i = 0; i < 5; i ++) {displayLine (n4 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 5 ») {pour (int i = 0; i < 5; i ++) {displayLine (n5 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 6 ») {pour (int i = 0; i < 5; i ++) {displayLine (n6 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 7 ») {pour (int i = 0; i < 5; i ++) {displayLine (n7 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 8 ») {pour (int i = 0; i < 5; i ++) {displayLine (n8 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 9 ») {pour (int i = 0; i < 5; i ++) {displayLine (n9 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} Si (c == « 0 ») {pour (int i = 0; i < 5; i ++) {displayLine (n0 [i]); delayMicroseconds (betweenColumns);} displayLine(0);} delayMicroseconds(charBreak) ; }

Articles Liés

Arduino Analog Hard Drive POV horloge

Arduino Analog Hard Drive POV horloge

ce travail est basé sur le travail de deux autres personnes qui ont fait un excellent travail ouvrant la voie à mon projet.Auteur : vishnubobSon travail a été basé sur la version de Ian Smiths du même type d'horloge.http://www.Ian.org/HD-Clock/Utilis
Horloge temps réel (RTC) avec LinkIt ONE

Horloge temps réel (RTC) avec LinkIt ONE

Toujours coincé avec un projet qui a besoin d'une horloge temps réel (une horloge qui vous indique la date et le temps et pas seulement le nombre de secondes (milli) écoulé depuis que vous connecté à l'alimentation) ?Vous avez 2 possibilités :Utilise
Réglage d’une horloge temps réel (RTC) avec une Micro Arduino Pro

Réglage d’une horloge temps réel (RTC) avec une Micro Arduino Pro

Pour beaucoup de projets, vous devez être en mesure de savoir le temps réel. Qu'il soit secondes précises, l'heure du jour ou la date du mois, un Module d'horloge RTC en temps réel est la réponse à ce besoin.Avec une consommation de faible puissance,
POV horloge $

POV horloge $

À l'aide de l'horloge POV PIC16F84A par 5VOLTS
Horloge RTC en affichage à LED de 4 chiffres et 7 Segments

Horloge RTC en affichage à LED de 4 chiffres et 7 Segments

Bonjour, tous!!Il s'agit de mon projet d'une horloge numérique avec RTC (Real Time Clock) à l'aide d'un affichage à LED de 04 chiffres et 07 segments dont les caractéristiques de température et d'humidité.Pour contrôler l'affichage, j'ai utilisé un A
Horloge numérique trimode avec ATtiny85 et RTC

Horloge numérique trimode avec ATtiny85 et RTC

Bonjour tout le monde,C'est mon premier projet à l'aide de microcontrôleur ATtiny85 et sont équipées d'une horloge temps réel (RTC), travailler avec elle.L'utilisation de ATtiny85 est un moyen très intéressant de réduire vos projets Arduino dans une
Disque dur horloge - persistance rétinienne

Disque dur horloge - persistance rétinienne

1. un certain POV horloges là-bas, pourquoi est-ce particulier ?Eh bien, principalement parce que c'est le mien. Il y a un certain POV horloges là-bas sur le web à l'aide de toutes sortes de mécanismes d'affichage, des châssis, des contrôleurs. Celui
Message SMS GSM SIM900 Arduino quotidien

Message SMS GSM SIM900 Arduino quotidien

À l'aide de SeeedStudio GSM SIM900 Shield Arduino et http://www.netfro SMSVue d'ensembleJ'ai recherché un moyen de suivre l'activité dans le bâtiment qui a service de puissance et de la cellule, mais aucun service de WiFi, je me suis tourné d'un bouc
Recyclé horloge disque dur - FuneLab

Recyclé horloge disque dur - FuneLab

Bonjour à tous !Il s'agit de ma cinquième projet sur Instructables & merci tout le monde aimé cela.Vous avez un disque dur cassé ? Vous mettre dans la Corbeille ou le vendre sur Ebay pour quelques dollars ? Oh non !Préparez-vous à transformer votre d
Horloge engrenage avec commande de moteur pas à pas de bois

Horloge engrenage avec commande de moteur pas à pas de bois

Encore une autre horloge à engrenages en bois. Cette conception s'inspire Instructable de DickB1 (ci-contre en bas).Cependant, au lieu de conduire l'horloge avec un pendule magnétique pulsé, j'ai utilisé une petite commande de moteur.Tout d'abord, j'
Horloge 3 - réveil geek Arduino-basé de sage

Horloge 3 - réveil geek Arduino-basé de sage

Wise horloge 3 est une open source, hautement hackable horloge geek qui montre beaucoup plus que le temps. Sa fonction principale est d'afficher des citations modifiables par l'utilisateur provient d'une carte SD (comme celles utilisées dans les appa
Horloge disque dur (HDD horloge avec Arduino Uno)

Horloge disque dur (HDD horloge avec Arduino Uno)

Il s'agit d'un amusant projet qui peut être fait facilement et également à moindre coût. Dans ce instructable nous allons expliquer étape par étape comment faire cette belle horloge POV.Matériel utilisé :Arduino Uno,Minuscule CCF modul,ULN 2003,Diode
DCF77 Signal Analyzer horloge

DCF77 Signal Analyzer horloge

Horloge Arduino DCF77 & analyseur de signauxVous pouvez aussi voir cette horloge sur myweb site ici page DCF77 Analyzer horlogeCette horloge affiche le DCF77 time code reçu et décodé sur trois 8 x 8 matricielle affiche et infos date, heure et signal
Horloge de grand bois nixie

Horloge de grand bois nixie

Comme beaucoup d'entre vous l'ont déjà compris, je suis un peu accro nixie.Il s'agit de ma troisième horloge nixie, et en ce qui concerne les précédents son processus décisionnel a été entièrement documenté dans un instructable, afin que tout le mond