Skalor för folkdiktatur människor (5 / 6 steg)
Steg 5: Koden: full koden
Här tillägga jag fullständig koden som referens. Det skrevs i BascomAVR men det bör vara ganska lätt att översätta det till C eller för arduino. Jag kommentera de flesta stegen men kontakta mig om något är inte klart för dig.$regfile = "m8def.dat" ' registret fil för atmega8 "deklaration av variabler "Aliassing stift "Riktning av stiften
$crystal = 8000000 ' 8 MHz clockspeed
$baud = 1200 "baudvärde = 1200
Dim räknas som heltal
Dim syscount som byte
Dim jag som byte
Dim temp som heltal
Dim vikt som heltal
Dim comm(4) som byte
Dim calc(3) som heltal
Dim weightwanted som heltal
Dim weightwantedram som Johnny heltal "lagras i EEPROM
Dim percentplus som byte
Dim percentplusram som Johnny byte "lagras i EEPROM
Dim percentmin som byte
Dim percentminram som Johnny byte "lagras i EEPROM
Dim topvalue som heltal
Dim lowvalue som heltal
Ett Alias Pind.2
B Alias Pind.4
Röd Alias PORTD.5
Gröna Alias PORTD.6
Gul Alias PORTD.7
Config A = Input
Config B = ingång
Config portd.3 = ingång
Config portd.5 = utgång
Config PORTD.6 = utgång
Config PORTD.7 = utgång
config serialin = buffrat, storlek = 18, bytematch = 10 ' 18 byte buffrade och utlöser avbrott på att få en LF
"inställning av LCD
Config Lcdpin = Pin, Db4 = Portc.3, Db5 = Portc.2, Db6 = Portc.1, Db7 = Portc.0, E = Portc.4, Rs = Portc.5
Config Lcd = 16 x 2
markören bort
' ange vissa stift till 1
Uppsättning B
ställa in pind.2
ställa in pind.3
"konfiguration av externa avbrotten
Config Int0 = stigande
På Int0 Getencoder
Config int1 = fallande
på int1 menyn
Aktivera avbrott
Aktivera Int0
Aktivera int1
CLS "klar skärm
Återställa räkningen
Återställa vikt
Återställa syscount
"huvudloop
göra
Välj ärende syscount "beroende på syscount en skärm kommer att väljas för lcd
waitms 25
CLS "klar skärmfall 0: "huvudskärmen fall 1: "setup vikt skärm Leta upp 1,1 fall 2: "installationsskärmen för överviktiga Leta upp 1,1 fall 3: ' underviktig Setupskärmen End markerar loop "slutet av huvudsakliga slingan Getencoder: "utlöses av INT0. Läser den roterande rörelse av rotary encoder waitus 250 menyn: "utlöses av INT1. Läser på knappen av rotary encoder INCR syscount "ökar syscount. Denna variabel används för att bestämma vad skärmen visas waitms 150 returnera serial0charmatch: "utlöses av seriell avbrottet för i = 1 till 18 "läser behövs byte i variabler och dumpar de andra byte för att tömma bufferten för i = 1 till 4 ' översätta ascii till dec om comm(1) > 0 då calc(1) = comm (1) * 1000 "gör 1 nummer av 4 caracters returnera
weightwanted = weightwantedram ' läser dessa 3 variabler i EEPROM och lagrar dem i globala variabler
percentplus = percentplusram
percentmin = percentminram
Leta upp 1,1 "skriver önskade data till LCD-skärmen
LCD weightwanted; "Gr"
Leta upp 1, 8
LCD "-"; percentmin; " %"
Leta upp 1, 13
LCD "+"; percentplus; " %"
Leta upp 2,1
LCD-vikt; "Gr"
Återställ röda "stängs alla lampor
återställa grön
återställa gul
topvalue = weightwanted * percentplus ' beräkning av alla nödvändiga värden.
topvalue = topvalue / 100
topvalue = weightwanted + topvalue
lowvalue = weightwanted * percentmin
lowvalue = lowvalue / 100
lowvalue = weightwanted - lowvalue
om vikt < = topvalue och vikt > = lowvalue sedan ställa in Green "anger korrekt status-LED
om vikt > topvalue ange sedan gul
om vikt < lowvalue ange sedan röd
LCD "Setup:"
Leta upp 1,8
LCD "Gewicht"
weightwanted = antal "läser rotary encoder och anger önskad vikt
Leta upp 2,8
LCD-weightwanted
LCD "Setup:"
Leta upp 1,8
LCD "+ %"
percentplus = antal "läser rotary encoder och anger övervikt
Leta upp 2,8
LCD-percentplus
Leta upp 1,1
LCD "Setup:"
Leta upp 1,8
LCD "-%"
percentmin = antal "läser rotary encoder och anger undervikt
Leta upp 2,8
LCD-percentmin
Om A = 1 då
Om B = 0 då Incr räkna annat Decr Count
Slut om
GiFr = 64 ' Dämpningstid
Returnera
om syscount > 3 då syscount = 0
Välj ärende syscount
fall 0: percentminram = percentmin ' skriver till EEPROM
fall 1: antal = weightwanted
fall 2: weightwantedram = weightwanted ' skriver till EEPROM
count = percentplus
fall 3: percentplusram = percentplus ' skriver till EEPROM
count = percentmin
End markerar
GiFr = 128 ' Dämpningstid
vikt = 0 "återställer variabler
för i = 1 till 3
calc(i) = 0
Nästa
om jag = 9 då comm(1) = inkey()
om jag = 10 då comm(2) = inkey()
om jag = 11 då comm(3) = inkey()
om jag = 12 då comm(4) = inkey()
om jag <> 9 och jag <> 10 och jag <> 11 och jag <> 12 sedan temp = inkey()
Nästa
om comm(i) > 47 sedan
comm(i) = comm (i)-48
annat
comm(i) = 0
slut om
Nästa
om comm(2) > 0 då calc(2) = comm (2) * 100
om comm(3) > 0 då calc(3) = comm (3) * 10
vikt = calc(1) + calc(2)
vikt = vikt + calc(3)
vikt = vikt + comm(4)
slutet