Course temps Conseil (3 / 4 étapes)

Étape 3: programme

Voici le programme pour elle. J’ai utilisé la bibliothèque Debounce pour réduire le bruit d’entrée depuis les boutons. La procédure de l’horloge est de horloge libres de Rob Faludi. Je dois être honnête, j’ai emprunté le code pour tester un bouton long/court et je ne me souviens plus où. Désolé ! Je tiens également à remercier Graynomad des forums Arduino pour m’avoir aidé à démêler les problèmes initiaux, que j’ai eu avec l’affichage. (Juste que les gens sachent, vous devez seulement alterner Trck une fois que tous les registres sont chargés, pas après chacun d’eux. Si vous le faites après chacun d’eux, vous vous retrouvez avec les images fantômes et l’affichage semble mauvais!)

Je présente également mes excuses, je ne suis pas le meilleur un commenter mon code. Je suis en train d’obtenir mieux en mieux et que je vais le faire. Si vous avez des questions à ce sujet s’il vous plaît demander je vais essayer et répondre !

#include < Debounce.h >

/*
Compte à rebours

Utilisation - trois boutons : Mode, heure et Minute.

Appuyez brièvement sur Mode = timer Start/Pause
Appuyez longuement sur Mode (2.5 s) = mode de réglage de minuterie entrée/sortie

Avec minuteur en pause Appuyez sur des minutes et des heures pour réinitialiser l’horloge

En mode de réglage de la minuterie, appuyez sur Heure/Minute à paramètres incrément d’heure.

*/

#define timeroffest 0 //adjustment d’erreur dans le calendrier

#define resetPin 8
#define minutePin 9
#define hourPin 10
#define sloPin 11

Debounce minutePinDB = Debounce (25, minutePin) ;
Debounce hourPinDB = Debounce (25, hourPin) ;

#define debounce 50 / / ms debounce période pour éviter le scintillement quand appuyant sur ou en relâchant le bouton
#define holdTime 2500 / / ms hold période : combien de temps à attendre pour la presse + tenue d’événement

#define Tserial 4
#define Tclk 6
#define Trck 5

#define DP_BIT B00001000

caractère de Byte [10] = {}
B01110111, B00010100, B10110011, B10110110, B11010100, B11100110, B11100111, B00110100, B11110111, B11110100} ;

runMode booléen = false ;
setMode booléen = false ;
Boolean exécuter = 0, réinitialiser = 0, lent = false ;

int = deuxième 118 minutes = 0, heure = 0 ; déclarer des variables de temps de travail

int sMin = 30, sHour = 2 ; déclarer des variables de temporisation

unsigned long autostart = 0 ;

void setup() {}

pinMode (resetPin, entrée) ; broches pour les commutateurs normalement ouverts régler l’heure
pinMode (minutePin, entrée) ;
pinMode (hourPin, entrée) ;
pinMode (sloPin, INPUT) ;

pinMode (Tserial, sortie) ;
pinMode (Tclk, sortie) ;
pinMode (Trck, sortie) ;

digitalWrite (Trck, faible) ;

checkButtons() ;

minute = sMin ;
heure = sHour ;

Séquence d’Intro
outputChar(129) ; r
outputChar(0) ; CLR
outputChar(0) ; CLR
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;

outputChar(0) ; CLR
outputChar(129) ; r
outputChar(0) ; CLR
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;

outputChar(0) ; CLR
outputChar(0) ; CLR
outputChar(129) ; r
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;

outputChar(195) ; t
outputChar(0) ; CLR
outputChar(129) ; r
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;

outputChar(0) ; CLR
outputChar(195) ; t
outputChar(129) ; r
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;

outputChar(199) ; b B11000111
outputChar(195) ; t B11000011
outputChar(129) ; r B10000001
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(2000) ;

outputChar(0) ; CLR
outputChar(0) ; CLR
outputChar(0) ; CLR
digitalWrite (Trck, élevé) ;
digitalWrite (Trck, faible) ;
Delay(250) ;
}

void loop() {}

Si (setMode == true) {}
setTime() ;
}
ElseIf (runMode == true) {}
Clock() ;
}

Si (heure == 0 & & minute == 0 & & setMode == false) {}
runMode = false ;
displayFin() ;
}
ElseIf (lent == true) displaySlo() ;
d’autre displayOut() ;

Si (runMode == 0 & & reset == 1) {}
deuxième = 118 ;
minute = sMin ;
heure = sHour ;
Reset = 0 ;
}

checkButtons() ; exécute une fonction qui vérifie les boutons de réglage
}

setTime() Sub {}
public static boolean minStat = false hrStat = false ;
int minBut, hrBut ;

minutePinDB.update() ;
hourPinDB.update() ;

minBut = minutePinDB.read() ;
hrBut = hourPinDB.read() ;

Si (hrBut == LOW & & hrStat == false) {}
sHour = sHour + 1 ;
Si sHour (sHour > 9) = 0 ;
hrStat = true ;
}
Si (hrBut == HIGH & & hrStat == true) {}
hrStat = false ;
}

Si (minBut == LOW & & minStat == false) {}
sMin = sMin + 1 ;
Si (sMin > 59) sMin = 0 ;
minStat = true ;
}
Si (minBut == HIGH & & minStat == true) {}
minStat = false ;
}

heure = sHour ;
minute = sMin ;
deuxième = 118 ;
}

void checkButtons() {}

public static long btnDnTime ; fois que la touche a été enfoncée
public static long btnUpTime ; fois que la touche a été relâchée
public static boolean ignoreUp = false ; s’il faut ignorer le bouton libérer car le clic + cale a été déclenché
public static int R = 0 ; État du bouton mode
public static int Rstate = 0 ;

R = digitalRead(resetPin) ; lire l’état du bouton Mode
Tester la touche enfoncée et stocker le temps d’arrêt
Si (R == LOW & & Rstate == HIGH & & (millis() - btnUpTime) > long(debounce))
{
btnDnTime = millis() ;
}
Test pour le bouton et stocker le temps haut
Si (R == HIGH & & Rstate == LOW & & (millis() - btnDnTime) > long(debounce) & & setMode == false)
{
Si (ignoreUp == false) runMode =! runMode ; tester si le mode de réglage bas-haut doit être activée/désactivée
else ignoreUp = false ;
btnUpTime = millis() ;
}
Tester la touche maintenue enfoncée pendant plus longtemps que le temps de maintien
Si (R == LOW & & (millis() - btnDnTime) > long(holdTime))
{
setMode =! setMode ; activer/désactiver le mode de réglage de mode de synchronisation, ou vice versa
runMode = 0 ;
ignoreUp = true ;
btnDnTime = millis() ;
}
Rstate = R ;

minutePinDB.update() ;
hourPinDB.update() ;

Si (runMode == 0) {}
Si (minutePinDB.read() == LOW & & hourPinDB.read() == faible) réinitialiser = 1 ;
}

Si (digitalRead(sloPin) == faible) lent = true ;

}

clock() Sub {}
public static unsigned lastTick long = 0 ; mettre en place une variable locale pour contenir la dernière fois que nous avons déménagé avant une seconde
(les variables statiques sont initialisées une fois et conservent leurs valeurs entre les appels de fonction)

déplacement vers l’avant une seconde chaque 1000 millisecondes
Si (millis() - lastTick > = 500 + timeroffest) {}
lastTick = millis() ;
deuxième--;
}

Remettez une minute toutes les 60 secondes
Si (second < 0) {}
minute--;
deuxième = 118 ; remettre les secondes à zéro
}

reculer d’une heure toutes les 60 minutes
Si (minute < 0) {}
heure--;
minute = 59 ; remettre les minutes à zéro}
}

Si (heure < 0) {}
heure = 0 ; remettre les heures à zéro
}

}

void displayOut() {}

public static byte dp_bit = 0 ;

set_bit octet = 0 ;

public static byte secFlash ;
public static unsigned long mise à jour = 0 ;

octet de sortie ;

Si (millis() - mise à jour > = 4) {}

mise à jour = millis() ;

Si (secFlash! = seconde) {}
dp_bit ^ = DP_BIT ; bit de bascule la DP
secFlash = seconde ;
}
d’autre if(runMode == false) {}
dp_bit = DP_BIT ;
}

Si (setMode == true) {}
SET_BIT ^ = DP_BIT ;
}
else set_bit = 0 ;

outputChar (personnage [minute % 10] ^ set_bit) ;
outputChar (personnage [minute/10]) ;
outputChar (caractère [heure] ^ dp_bit) ;

digitalWrite (Trck, élevé) ; verrouillage des données à l’OPs
digitalWrite (Trck, faible) ;
}
}

Sub displayFin()
{
public static unsigned flashtimer long = 0 ;
flash statique octets = true ;
public static int flashdelay = 0 ;

int flashtime [2] = {}
250, 750} ;

Si (millis() - flashtimer > flashdelay) {}
Flash = 1 - flash ;
flashtimer = millis() ;
flashdelay = flashtime [flash] ;
}

Si (flash == true) {}
outputChar(B10010111) ;
outputChar(B10000101) ;
outputChar(B11100011) ;
}
else {}
outputChar(B00000000) ;
outputChar(B00000000) ;
outputChar(B00000000) ;
}
digitalWrite (Trck, élevé) ; verrouillage des données à l’OPs
digitalWrite (Trck, faible) ;
}

Sub displaySlo()
{
public static unsigned slowtimer long = 0 ;
public static byte flashslow = true ;
public static int slowdelay = 0, slowcount = 0 ;

int slowtime [2] = {}
200, 500} ;

Si (millis() - slowtimer > slowdelay) {}
flashslow = 1 - flashslow ;
slowtimer = millis() ;
slowdelay = slowtime [flashslow] ;
slowcount ++ ;
}

Si (flashslow == true) {}
outputChar(character[0]) ;
outputChar(B01000011) ;
outputChar(character[5]) ;
}
else {}
outputChar(B00000000) ;
outputChar(B00000000) ;
outputChar(B00000000) ;
}
digitalWrite (Trck, élevé) ; verrouillage des données à l’OPs
digitalWrite (Trck, faible) ;

Si (slowcount > = 21) {}
lente = false ;
slowcount = 0 ;
}
d’autre lent = true ;

}

void outputChar (byte c) {}
pour (int i = 0; i < = 7; i ++) {}
digitalWrite (Tserial, bitRead(c, i)) ;
digitalWrite (Tclk, élevé) ;
digitalWrite (Tclk, faible) ;
}
}

Articles Liés

Menthe-compteur de succès (arrêter de fumer!) de taille avec Arduino

Menthe-compteur de succès (arrêter de fumer!) de taille avec Arduino

il arrive un moment dans la vie de mettre des choses puériles derrière et abandonner de mauvaises habitudes. Certains, comme fumer, peuvent être sacrément dur sans encouragement constant. Il était temps pour moi de combiner mon passe-temps favori ave
Huile, filtre à huile et filtre à air changer sur une Citroen C3 2006-2008

Huile, filtre à huile et filtre à air changer sur une Citroen C3 2006-2008

la Citroën C3 est une belle voiture, mon seul véritable grognent actuellement est qu'il n'y a pas de manuel Haynes dehors encore et il garde ayant été retardé.Donc, je vous écris une partie de mes notes comme instructables sur des choses comme je le
LAP Timer mini 4WD (capteur infrarouge)

LAP Timer mini 4WD (capteur infrarouge)

SalutationsContinuer à développer à partir de mon projet Lap Timer sur la fonction est un outil pour tour de temps de mesure pour mini 4WD course sur le circuit. Cet outil très utile pour analyser le voyage dans le temps sur différents types de circu
BRICOLAGE aéroglisseur RC !

BRICOLAGE aéroglisseur RC !

O. introduction :Ce guide vous montre comment construire un modèle d'aéroglisseur. Vous pouvez conduire sur sol lisse à des vitesses différentes avec une télécommande. Construire cet aéroglisseur vous coûtera 800-1000 RMB.ATTENTION : Veuillez lire la
Accueil bar avec top bar régénéré de quilles

Accueil bar avec top bar régénéré de quilles

Le rêve. J'ai toujours rêvé de construire ma barre de sous-sol pour une dizaine d'années. Mes amis, tous m'ont déjà entendu dire, "je travaille sur mon bar...bla bla bla" depuis mes 20 ans. J'ai été la construction de pièces pour aller dans la b
Comment faire un Jar « fraise » d’une cruche en plastique reciblée

Comment faire un Jar « fraise » d’une cruche en plastique reciblée

je recherchez un autre Pot de fraises, mais ne se soucient pas de l'étiquette de prix élevé. J'ai pensé que « Vous savez, je parie que je peux faire un truc que j'ai à la maison. »Alors, j'ai fait, et je ne pense pas qu'il s'est avéré trop mal.Le pla
Croissant d’or de verre

Croissant d’or de verre

Or peut être cultivé dans un four à micro-ondes, apparemment de rien du tout. La vérité est que les quarks constituant or sont toujours là, présente dans le courant magnétique. Ils doivent simplement être pris tout à l'heure et le lieu même. La situa
Comment faire le Chlorate de Potassium

Comment faire le Chlorate de Potassium

le chlorate de potassium (kclo3) est un oxydant puissant et n'est pas seulement utilisé dans fireworks, mais pour la plupart en explosives compasitions.Chlorate de potassium est généralement un type de sel et a donc un aspect de ce sel serait. Toutef
Comment mesurer la température très précisément avec un Arduino et un Conseil de capteur de température TSYS01.

Comment mesurer la température très précisément avec un Arduino et un Conseil de capteur de température TSYS01.

Alors qu'il étudiait à l'Université, nous avons été contestés dans le cadre d'un travail en cours dans la conception d'une boîte avec un contrôle très précis de la température. Si le projet devait réussir, plusieurs boîtes devaient être construits et
Intel® Edison Conseil : Surveillance de la température IoT

Intel® Edison Conseil : Surveillance de la température IoT

ITO n'est plus limité à juste le fabricant amateurs et les passionnés. Il a attiré l'attention des entreprises qui veulent démarrer une nouvelle révolution industrielle, à l'aide de l'ITO. De milieux de travail intelligente pour augmenter la producti
Conseils pour vous gagner de l’argent supplémentaire en temps serré

Conseils pour vous gagner de l’argent supplémentaire en temps serré

Extrémités répondre constitue toujours un défi, et la plupart des gens sortent de la nouvelle année un pire tad pour usure financièrement en raison de toutes leurs transactions de Noël. Alors qu'il peut prendre quelques mois pour se remettre en forme
Six conseils pour les courses

Six conseils pour les courses

Préparez-vous pour le jour de la course avec ces lignes directrices nutritionnelles. De troc communauté en ligne en plein essor dispose de planches originales de message contenu et animé avec des milliers de sujets d'intérêt pour les personnes active
Conseils pour le jour de la course

Conseils pour le jour de la course

êtes-vous prêt pour la grande course ? Dave illustre certains facile avant la course d'échauffement des techniques pour vous aider à atteindre une performance de pointe. Pour aider les participants à se préparer pour leurs activités sportives, voloda
DODGE MAGNUM d’échappement conseils pour voir la course voiture fait ON WATERJET/ASPIRE/MACH3

DODGE MAGNUM d’échappement conseils pour voir la course voiture fait ON WATERJET/ASPIRE/MACH3

échappement inox personnalisé, conseils sur ma voiture d'exposition avec une image j'ai acquis auprès de google thenmodified et conçu l'image en fonction de découpe de profil dans aspirent, puis utilisé mach 3 couper dehors sur le jet d'eau