Stap 5: De code: volledige code
Hier voeg ik de volledige code als referentie. Het was geschreven in BascomAVR maar het moet vrij gemakkelijk te vertalen naar C of voor de arduino. Ik commentaar allermeest naar de stappen neem maar contact met me als iets niet duidelijk aan u.$regfile = "m8def.dat" ' registerbestand voor de atmega8 ' verklaring van de variabelen "Aliassing pinnen "Richting van de pinnen
$crystal = 8000000 ' 8 MHz kloksnelheid
$baud = 1200 ' baudrate = 1200
Dim tellen als geheel getal
Dim syscount als byte
Dim ik als byte
Dim temp als geheel getal
Dim gewicht as Integer
Dim comm(4) als byte
Dim calc(3) als geheel getal
Dim weightwanted als geheel getal
Dim weightwantedram als ERAM integer ' opgeslagen in EEPROM
Dim percentplus als byte
Dim percentplusram als ERAM byte ' opgeslagen in EEPROM
Dim percentmin als byte
Dim percentminram als ERAM byte ' opgeslagen in EEPROM
Dim topvalue als geheel getal
Dim lowvalue als geheel getal
Een Alias Pind.2
B Alias Pind.4
Rode Alias PORTD.5
Groene Alias PORTD.6
Gele Alias PORTD.7
Config A = Input
Config B = Input
Config portd.3 = input
Config portd.5 = Output
Config PORTD.6 = Output
Config PORTD.7 = Output
config serialin = gebufferde, grootte = 18, bytematch = 10 ' 18 bytes gebufferd en triggers interrupt na ontvangst van een LF
' installatie van het LCD-scherm
Config Lcdpin = speld, Db4 = Portc.3, Db5 = Portc.2, Db6 = Portc.1, Db7 = Portc.0, E = Portc.4, Rs = Portc.5
Config Lcd 16 x 2 =
cursor uitschakelen
' het instellen van bepaalde pinnen op 1
Set B
set pind.2
set pind.3
' configuratie van de externe interrupts
Config Int0 = stijgende
Op Int0 Getencoder
Config int1 = Falling
int1 menu
Inschakelen Interrupts
Int0 inschakelen
Int1 inschakelen
CLS ' duidelijk scherm
Reset graaf
Reset gewicht
Reset syscount
' hoofdlus
doen
Selecteer zaak syscount ' afhankelijk van de syscount een scherm zullen worden geselecteerd voor het LCD-scherm
waitms 25
CLS ' duidelijk schermgeval van 0: ' hoofdscherm geval 1: ' het instellingenscherm voor gewicht Zoek 1,1 geval 2: ' instellingenscherm voor overgewicht Zoek 1,1 Case 3: ' ondergewicht instellingenscherm .End select lus ' einde van de hoofdlus Getencoder: ' veroorzaakt door INT0. Leest de roterende beweging van de roterende encoder waitus 250 menu: ' veroorzaakt door INT1. Leest de drukknop van de roterende encoder INCR syscount ' syscount verhoogt. Deze variabele wordt gebruikt om te beslissen welk scherm wordt weergegeven waitms 150 terugkeer serial0charmatch: ' wordt geactiveerd door de seriële interrupt voor i = 1 tot en met 18 ' leest de benodigde bytes in variabelen en dumpt de andere bytes om te legen van de buffer voor i = 1 tot en met 4 ' vertalen ascii t/m dec Als comm(1) > 0 dan calc(1) = comm (1) * 1000 ' maakt 1 nummer uit 4 tekens terugkeer
weightwanted = weightwantedram ' leest deze 3 variabelen in de EEPROM en slaat ze in globale variabelen
percentplus = percentplusram
PercentMin = percentminram
Zoek 1,1 ' schrijft de gewenste gegevens naar het LCD-scherm
LCD-weightwanted; "Gr"
Zoek 1, 8
LCD "-"; percentmin; " %"
Zoek 1, 13
LCD "+"; percentplus; " %"
Zoek 2,1
LCD gewicht; "Gr"
Reset Red ' alle LEDs uitgeschakeld
Reset groen
Reset geel
topvalue = weightwanted * percentplus ' berekening van alle benodigde waarden.
topvalue = topvalue / 100
topvalue = weightwanted + topvalue
lowvalue = weightwanted * percentmin
lowvalue = lowvalue / 100
lowvalue = weightwanted - lowvalue
Als gewicht < = topvalue en gewicht > = lowvalue dan groen ingesteld ' Hiermee stelt u de juiste status-LED
Als gewicht > topvalue stel geel
Als gewicht < lowvalue stel rood
LCD "Setup:"
Zoek 1,8
LCD "Gewicht"
weightwanted = aantal ' leest de roterende encoder en stelt het gewenste gewicht
Zoek 2,8
LCD-weightwanted
LCD "Setup:"
Zoek 1,8
LCD "+ %"
percentplus = aantal ' leest de roterende encoder en stelt de overgewicht
Zoek 2,8
LCD-percentplus
Zoek 1,1
LCD "Setup:"
Zoek 1,8
LCD "-%"
PercentMin = aantal ' leest de roterende encoder en stelt de ondergewicht
Zoek 2,8
LCD-percentmin
Als A = 1 Then
Als B = 0 dan Incr tellen anders Decr graaf
End If
GiFr = 64 ' debounce
Terugkeer
Als syscount > 3 dan syscount = 0
Selecteer zaak syscount
geval van 0: percentminram = percentmin ' schrijft aan EEPROM
geval 1: aantal = weightwanted
geval 2: weightwantedram = weightwanted ' schrijft aan EEPROM
Graaf = percentplus
Case 3: percentplusram = percentplus ' schrijft aan EEPROM
Graaf = percentmin
.End select
GiFr = 128 ' debounce
gewicht = 0 ' Hiermee stelt u de variabelen
voor i = 1 tot en met 3
calc(i) = 0
volgende
Als ik = 9 dan comm(1) = inkey()
Als ik 10 dan comm(2) = inkey() =
Als ik = 11 then comm(3) = inkey()
Als ik = 12 dan comm(4) = inkey()
Als ik <> 9 en ik <> 10 en ik <> 11 en ik <> 12 dan temp = inkey()
volgende
Als comm(i) > 47 dan
comm(i) = comm (i)-48
anders
comm(i) = 0
eind als
volgende
Als comm(2) > 0 dan calc(2) = comm (2) * 100
Als comm(3) > 0 dan calc(3) = comm (3) * 10
gewicht = calc(1) + calc(2)
gewicht = gewicht + calc(3)
gewicht = gewicht + comm(4)
einde