Étape 10 : programmation
Algorithme deBoucle principale
- Récupérer l’heure du module RTC (en heure et Minutes)
- Si le temps est différent Affichage de l’heure
- Répétez
Affichage de l’heure
- Temps intermédiaire en quatre chiffres. (à l’aide de / div 10)
- Pour chaque affichage 7 segments, déménager segments à afficher des chiffres
Chiffre d’affichage
- Placer la logique de décodeur. Traduire int en sept segments vous passez votre commande.
- Déplacez les servos nécessaires à partir de X degrés. Déplacer les degrés de servos Y (où X est la position de sortie, et Y est la position de l’avion.
Échantillon
#include < Wire.h >
#include « RTClib.h »RTC_DS1307 CCF ;
segA court = 0 ; Broche d’affichage 14
segB court = 1 ; Pivot d’affichage 16
segC court = 2 ; Goupille de l’affichage 13
segD court = 3 ; Broche 3 d’affichage
segE court = 4 ; Broche d’affichage 5
segF court = 5 ; Broche d’affichage 11
segG court = 6 ; Axe de l’écran 15segA_OUT court = 110 ;
segB_OUT court = 110 ;
segC_OUT court = 110 ;
segD_OUT court = 110 ;
segE_OUT court = 110 ;
segF_OUT court = 110 ;
segG_OUT court = 110 ;segA_IN court = 90 ;
segB_IN court = 90 ;
segC_IN court = 90 ;
segD_IN court = 90 ;
segE_IN court = 90 ;
segF_IN court = 90 ;
segG_IN court = 90 ;int temps = 2000 ;
DateTime datePast ;
DateTime dateNow ;maintien de la maison
void setup() {}
Serial.Begin(9600) ;
Wire.Begin() ;
RTC.begin() ;
RTC.adjust (DateTime (__DATE__, __TIME__)) ;
datePast = RTC.now() ;
}boucle principale
void loop() {}
dateNow = RTC.now() ;
Si (! () datePast.hour() == dateNow.hour() & & datePast.minute() == dateNow.hour()))
{
displayNumber(dateNow.hour()*100+dateNow.minute()) ;
datePast = dateNow ;
}
}Étant donné un certain nombre, nous affichons 10:22
Après traversant les 4 numéros, l’écran reste éteint
void displayNumber (int afficher) {}
pour (int digit = 4; chiffres > 0; chiffres--) {}
lightNumber (afficher 10 %, un chiffre) ;
Afficher / = 10 ;
}démarrer le mouvement
Serial.Print ("T") ; Serial.println(Time) ;
}{} void move (int servo, int position)
Serial.Print("#") ;
Serial.Print(servo) ;
Serial.Print ("P") ;
Serial.Print(position) ;
}Compte tenu d’un certain nombre, se met en marche ces segments
Si le nombre == 10, puis éteignez le nombre
void lightNumber (int numberToDisplay, int segment) {}int offset = (segment - 1) * 7 ;
Switch (numberToDisplay) {}case 0 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_OUT) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_IN) ;
rupture ;cas 1 :
déplacer (segA + offset, segA_IN) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_IN) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_IN) ;
déplacer (segG + offset, segG_IN) ;
rupture ;cas 2 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_IN) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_OUT) ;
déplacer (segF + offset, segF_IN) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;cas 3 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_IN) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;cas 4 :
déplacer (segA + offset, segA_IN) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_IN) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;cas no 5 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_IN) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;
cas 6 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_IN) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_OUT) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;
cas 7 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_IN) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_IN) ;
déplacer (segG + offset, segG_IN) ;
rupture ;
cas 8 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_OUT) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;
cas 9 :
déplacer (segA + offset, segA_OUT) ;
déplacer (segB + offset, segB_OUT) ;
déplacer (segC + offset, segC_OUT) ;
déplacer (segD + offset, segD_OUT) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_OUT) ;
déplacer (segG + offset, segG_OUT) ;
rupture ;
cas no 10 :
déplacer (segA + offset, segA_IN) ;
déplacer (segB + offset, segB_IN) ;
déplacer (segC + offset, segC_IN) ;
déplacer (segD + offset, segD_IN) ;
déplacer (segE + offset, segE_IN) ;
déplacer (segF + offset, segF_IN) ;
déplacer (segG + offset, segG_IN) ;
rupture ;
}
}
Autres
Vous devrez également vous mettre horloge RTC la première fois. Cela lui donnera une heure de départ égale à celle de votre ordinateur. Vous aurez besoin de la bibliothèque de CCF pour exécuter le code suivant.
#include
#include « RTClib.h »RTC_DS1307 CCF ;
annuler le programme d’installation () {}
Serial.Begin(57600) ;Wire.Begin() ;
RTC.begin() ;
if (!. {RTC.isrunning())}
Serial.println ("RTC n'est pas running!") ;
RTC.adjust (DateTime (__DATE__, __TIME__)) ;
}
}