Paso 5: El código: completo código
Aquí añado el código completo como referencia. Fue escrito en BascomAVR pero debe ser bastante fácil de traducir a C o para arduino. Comentar la mayoría de los pasos pero por favor me si algo no es claro para usted.$regfile = "m8def.dat" ' archivo de registro para el atmega8 ' declaración de las variables «Pernos de la existencia de alias ' Dirección de los pines
$crystal = 8000000 8 megaciclos clockspeed
$baud = 1200 ' baudrate = 1200
Dim cuenta como entero
syscount DIM como byte
Dim yo como byte
Dim temp como entero
Dim peso entero
Dim comm(4) como byte
Dim calc(3) como entero
Dim weightwanted como entero
Dim weightwantedram como entero ERAM ' almacenado en la EEPROM
Dim percentplus como byte
Dim percentplusram como byte ERAM ' almacenado en la EEPROM
Dim percentmin como byte
Dim percentminram como byte ERAM ' almacenado en la EEPROM
Dim topvalue como entero
Dim trámites como entero
Un Pind.2 de Alias
B Alias Pind.4
Alias rojas PORTD.5
Verde Alias PORTD.6
Amarillo Alias PORTD.7
Configuración A = entrada
Configuración B = entrada
Portd.3 config = entrada
Config portd.5 = salida
Config PORTD.6 = salida
Config PORTD.7 = salida
config serialin = tamponada, tamaño = 18, bytematch = 10 18 bytes intermedia y activa interrupción en la recepción de un LF
' configuración de la pantalla 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
cursor apagado
' establecer ciertos pines 1
Set B
Set pind.2
Set pind.3
' configuración de las interrupciones externas
config Int0 = aumento
De Int0 Getencoder
Config int1 = caída
en el menú de int1
Habilitar interrupciones
Habilitar la Int0
Permiten int1
CLS ' borrar pantalla
Restablecer cuenta
Peso de RESET
Syscount RESET
' bucle principal
hacer
Seleccione caso syscount ' según syscount se seleccionará una pantalla para la pantalla lcd
waitms 25
CLS ' borrar pantallacaso 0: ' pantalla principal caso 1: "pantalla de configuración del peso localizar 1,1 caso 2: "pantalla de configuración del sobrepeso localizar 1,1 caso 3: "pantalla de configuración del peso inferior al normal final seleccione loop ' fin de bucle principal GetEncoder: ' desencadenada por INT0. Lee el movimiento de rotación del codificador rotatorio waitus 250 menú: ' desencadenada por INT1. Lee el pulsador del codificador rotatorio syscount incr ' aumenta syscount. Esta variable se utiliza para decidir qué pantalla se muestra waitms 150 volver serial0charmatch: ' activa la interrupción serial para i = 1 a 18 ' Lee los bytes necesarios en las variables y los otros bytes para vaciar el buffer de las descargas para i = 1 a 4 ' traducir de ascii a Dic Si comm(1) > 0 then calc(1) = comm (1) * 1000 ' hace que 1 número fuera de 4 caracteres volver
weightwanted = weightwantedram ' Lee estas 3 variables en la EEPROM y los almacena en variables globales
percentplus = percentplusram
percentmin = percentminram
localizar 1,1 ' escribe los datos deseados en la pantalla lcd
LCD weightwanted; "Gr"
Localice 1, 8
LCD "-"; percentmin; " %"
Localice 1, 13
LCD "+"; percentplus; " %"
localizar 2,1
peso del LCD; "Gr"
reiniciar Red ' apaga todos los LEDs
restablecer verde
restablecer amarillo
topvalue = weightwanted * percentplus ' cálculo de todos los valores necesarios.
topvalue = topvalue / 100
topvalue = weightwanted + topvalue
trámites = weightwanted * percentmin
trámites = trámites / 100
trámites = weightwanted - trámites
Si peso < = topvalue y peso > = trámites luego Green y ' establece el LED de estado correcto
Si peso > topvalue establezca amarillo
Si peso < trámites luego set rojo
LCD "configuración:"
localizar 1,8
LCD "Peso"
weightwanted = count ' Lee el codificador rotatorio y establece el peso deseado
localizar 2,8
LCD weightwanted
LCD "configuración:"
localizar 1,8
LCD "+ %"
percentplus = count ' Lee el codificador rotatorio y el sobrepeso se establece
localizar 2,8
LCD percentplus
localizar 1,1
LCD "configuración:"
localizar 1,8
LCD "-%"
percentmin = count ' Lee el codificador rotatorio y establece el peso insuficiente
localizar 2,8
LCD percentmin
Si A = 1 entonces
Si B = 0 entonces Incr cuenta cuenta de Decr otra cosa
End If
GiFr = 64 ' debounce
Volver
Si syscount > 3 entonces syscount = 0
Seleccione caso syscount
caso 0: percentminram = percentmin ' escribe en la EEPROM
caso 1: cuenta = weightwanted
caso 2: weightwantedram = weightwanted ' escribe en la EEPROM
cuenta = percentplus
caso 3: percentplusram = percentplus ' escribe en la EEPROM
cuenta = percentmin
final seleccione
GiFr = 128 ' debounce
peso = 0 ' reinicia variables
para i = 1 a 3
Calc(i) = 0
siguiente
Si i = 9 entonces comm(1) = inkey()
Si i = 10 then comm(2) = inkey()
Si i = 11 then comm(3) = inkey()
Si i = 12 entonces comm(4) = inkey()
Si me <> 9 y me <> 10 ya <> 11 y yo 12 temp entonces <> = inkey()
siguiente
Si comm(i) > 47 entonces
COMM(i) = comm (i) -48
otra cosa
COMM(i) = 0
terminar si
siguiente
Si comm(2) > 0 then calc(2) = comm (2) * 100
Si comm(3) > 0 then calc(3) = comm (3) * 10
peso = calc(1) + calc(2)
peso = peso + calc(3)
peso = peso + comm(4)
final