Diagrames d'estat
De El raconet d'en Jordi
Contingut |
Introducció
Un diagrama d'estats és una eina molt útil per elaborar programes.
Es tracta de representar gràficament els estats d'un sistema i les condicions que impliquen un canvi d'estat. Cada estat el represente per un cercle i cada transició per una fletxa.
Veiem un exemple
Requeriment
Volem dissenyar un sistema de control d'una persiana que puja quan hi ha poca llum i baixa quan hi ha molta. En valors intermedis es queda igual (així estalviem energia)
Diagrama de blocs
Definir el hardware ens ajudarà a definir els estats i les condicions.
Necessitarem 2 sortides per controlar el motor, dos entrades digitals pels finals de cursa i una entrada ADC per mesurar la llum mitjançant una LDR.
Esquema electrònic
Únicament cal tenir en compte que hem de fer servir el L293D per amplificar la intensitat de les sortides.
Conveni de variables
| 0 | 1 | |
| in3 | la persiana no està a l'extrem inferior | la persiana està a l'extrem inferior |
| in4 | la persiana no està a l'extrem superior | la persiana està a l'extrem superior |
| molta llum | poca llum | |
| adc2 | > 128 | < 64 |
| out0=0 | out0=1 | |
| out1=0 | motor aturat | motor pujant |
| out1=1 | motor baixant | motor aturat |
Diagrama d'estats
Programa
El diagrama d'estat simplifica molt la programació. Cada estat és una etiqueta, i es representa per un valor del registre b1, i les condicions de transició s'estudien en un bucle principal. Inicialment no coneguem l'estat, per tant esperem un canvi de llum per entrar en la màquina d'estats:
b1=0
inici:
readadc 2,b0
if b0 < 64 then pujant
if b0 > 128 then baixant
goto inici
observa:
readadc 2,b0
if b0 < 64 and b1=3 then pujant
if b0 > 128 and b1=4 then baixant
if pin3 = 1 and b1=2 then abaix
if pin4 = 1 and b1=1 then adalt
goto observa
pujant:
high 0
low 1
b1=1
goto observa
baixant:
low 0
high 1
b1=2
goto observa
abaix:
low 0
low 1
b1=3
goto observa
adalt:
low 0
low 1
b1=4
goto observa



