Billig DMX testare (4 / 7 steg)
Steg 4: Introduktion till statligt maskin logik
Om du inte är bekant med eller inte har använt statliga maskin logik i programmering, är det det enklaste sättet att dela komplexa problem i hanterbara lägen och statliga övergångar. En av de enklaste sätten att genomföra en tillståndsdator är att använda en strömbrytare uttalande.
Exempel av en tillståndsdator som använder en switch-sats:
Switch(State) {första i mål:
processen starttillstånd
bryta;
fall STATE1:
processen STATE1 staten
bryta;
fall klart:
clearAll();
State = INITIAL;
bryta;
standard:
bryta;
}
Beroende på tillståndet finns det bara några giltiga nycklar. Låt oss ta en titt på den första staten kallas INITIAL. Som ni kan se från tillståndsdiagram INITIALT tillstånd kan bara ha följande nycklar: 0-9 och "*" (asterisk), annars är det ett formatfel.
Statliga Nycklar Nästa tillstånd Kommentar Inledande 0-9 START1 X
* WILDCARD1 * @
Något annat inledande formatera fel
Här är ett kodstycke som visar hur jag genomfört Starttillstånd:
char nyckel = keypad.getKey (); < br > om (nyckel! = NO_KEY) {
Switch(State) {
fall INITIAL:
X
IF(validKeys0to9(Key)) {
POS = displayKey (nyckel, pos);
storeKey(key);
State = START1;
} else om (validWildCard(key)) {
// *@
POS = displayKey (nyckel, pos);
State = WILDCARD1;
} annat {
invalidFormat();
clearAll();
}
bryta;
Som ni ser skapat jag några hjälpare funktioner för att göra koden lätt att läsa.
Validera nyckel * < br > / / returnerar true om giltigt, annars falskt
int validWildCard (int nyckel) {
int giltiga = 0;
Switch(Key) {
fallet "*":
giltiga = 1;
bryta;
}
returnera giltiga.
}
< br > / / validera nyckel 0-9
returnera true om giltigt, annars falskt
int validKeys0to9 (int nyckel) {
int giltiga = 0;
Switch(Key) {
fallet "0":
fall '1':
fallet "2":
fallet "3":
fallet "4":
fallet "5":
fallet "6":
fallet "7":
fallet "8":
fall '9':
giltiga = 1;
bryta;
}
returnera giltiga.
}