Étape 5: Le code : plein de code
Ici, j’ai ajouter le code complet comme une référence. Il a été écrit en BascomAVR, mais il devrait être assez facile de le traduire à C ou pour arduino. J’ai s’exprimaient la plupart des étapes, mais veuillez communiquer avec moi si quelque chose n’est pas clair pour vous.$regfile = « m8def.dat » "fichier de Registre pour l’atmega8 ' Déclaration des variables ' Pins aliassing « Direction des broches
$crystal = 8000000 8 MHz fréquence
$baud = 1200 "baudrate = 1200
Dim count as integer
Dim syscount as byte
Dim i as byte
Dim temp as integer
Poids Dim as Integer
Dim comm(4) as byte
Dim calc(3) as integer
Dim weightwanted as integer
Dim weightwantedram as integer ERAM "stockés en EEPROM
Dim percentplus as byte
Dim percentplusram as byte ERAM "stockés en EEPROM
Dim percentmin as byte
Dim percentminram as byte ERAM "stockés en EEPROM
Dim topvalue as integer
Dim lowvalue as integer
Un Alias Pind.2
B Alias Pind.4
Rouge Alias PORTD.5
Vert Alias PORTD.6
Jaune Alias PORTD.7
Config A = entrée
B config = entrée
Config portd.3 = entrée
Config portd.5 = sortie
Config PORTD.6 = sortie
Config PORTD.7 = sortie
config serialin = mise en mémoire tampon, taille = 18, bytematch = 10 18 octets mis en mémoire tampon et déclenche l’interruption en recevant un LF
« le programme d’installation de l’écran LCD
Config Lcdpin = Pin, Db4 = Portc.3, Db5 = Portc.2, Db6 = Portc.1, Db7 = Portc.0, E = Portc.4, Rs = Portc.5
Lcd de config = 16 x 2
curseur hors
"affectant certaines broches 1
Série B
Set pind.2
Set pind.3
« configuration des interruptions externes
Config Int0 = montante
Sur Int0 Getencoder
Int1 config = Falling
int1 menu
Activer les interruptions
Activez Int0
Activez int1
CLS ' efface l’écran
Réinitialiser compteur
Poids de réinitialisation
Remise à zéro syscount
' boucle principale
faire
Sélectionnez la case syscount ' selon syscount un écran est sélectionné pour l’écran lcd
waitms 25
CLS ' efface l’écrancase 0: ' écran principal cas 1: ' écran de configuration poids localiser 1,1 cas 2: « l’écran « surpoids » localiser 1,1 case 3: ' l’écran « insuffisant » end select boucle "fin de la boucle principale GetEncoder: ' déclenchée par INT0. Lit le mouvement de rotation de la molette waitus 250 menu: ' déclenchée par INT1. Lit le bouton de la molette syscount incr ' augmente syscount. Cette variable est utilisée pour décider quel écran apparaît waitms 150 retour serial0charmatch: ' est déclenchée par l’interruption de la série pour i = 1 to 18 "lit les octets nécessaires dans des variables et les autres octets pour vider la mémoire tampon des vidages pour i = 1 à 4 ' traduire ascii à déc si comm(1) > 0 then calc(1) = comm (1) * 1000 ' formule 1 série de 4 caractères retour
weightwanted = weightwantedram ' lit ces 3 variables dans l’EEPROM et les stocke dans des variables globales
percentplus = percentplusram
PercentMin = percentminram
localiser le 1,1 ' écrit les données souhaitées dans l’écran lcd
LCD weightwanted ; « Gr »
localiser 1, 8
Écran LCD »-«; percentmin; " %"
localiser 1, 13
Écran LCD "+"; percentplus; " %"
localiser les 2,1
poids de l’écran LCD ; « Gr »
réinitialiser le rouge ' désactive toutes les LEDs
réinitialiser le vert
réinitialiser le jaune
TopValue = weightwanted * percentplus ' calcul de toutes les valeurs nécessaires.
TopValue = topvalue / 100
TopValue = weightwanted + topvalue
lowvalue = weightwanted * percentmin
lowvalue = lowvalue / 100
lowvalue = weightwanted - lowvalue
Si poids < = topvalue et poids > = assouplir et établir le vert ' définit le voyant d’état correct
Si poids > topvalue puis définissez jaune
Si poids < assouplir puis définissez rouge
écran LCD "Setup: »
localiser les 1,8
écran LCD « Poids »
weightwanted = count ' lit la molette et définit le poids désiré
localiser les 2,8
LCD weightwanted
écran LCD "Setup: »
localiser les 1,8
écran LCD « + % »
percentplus = count ' lit la molette et définit le surpoids
localiser les 2,8
LCD percentplus
localiser 1,1
écran LCD "Setup: »
localiser les 1,8
écran LCD »-% "
PercentMin = count ' lit la molette et définit l’insuffisance pondérale
localiser les 2,8
LCD percentmin
Si A = 1 Then
Si B = 0 alors Incr comptent d’autre Decr comte
End If
GiFr = 64 ' debounce
Retour
Si syscount > 3 alors syscount = 0
Sélectionnez la case syscount
case 0: percentminram = percentmin ' écrit dans l’EEPROM
cas 1: count = weightwanted
cas 2: weightwantedram = weightwanted ' écrit dans l’EEPROM
Count = percentplus
case 3: percentplusram = percentplus ' écrit dans l’EEPROM
Count = percentmin
end select
GiFr = 128 ' debounce
poids = 0 ' réinitialise variables
pour i = 1 à 3
Calc(i) = 0
prochaine
Si j’ai = 9 then comm(1) = inkey()
Si j’ai = 10 then comm(2) = inkey()
Si j’ai = 11 then comm(3) = inkey()
Si j’ai = 12 then comm(4) = inkey()
Si j’ai <> 9 et j’ai <> 10 et j’ai <> 11 et j’ai <> 12 puis temp = inkey()
prochaine
si comm(i) > 47 puis
comm(i) = comm (i) -48
d’autre
comm(i) = 0
fin si
prochaine
si comm(2) > 0 then calc(2) = comm (2) * 100
si comm(3) > 0 then calc(3) = comm (3) * 10
poids = calc(1) + calc(2)
poids = poids + calc(3)
poids = poids + comm(4)
fin