Hallo, ich möchte gerne auf 6 verschiedenen Zustände reagieren: zustand a; zustand b; zustand c; zustand d; zustand e; zustand f; Dies Zustände können auch in verschiedenen Kombinationen bzw. gemeinsam auftreten. Da ich nun nicht alle 63 möglichen Kombinationen so... if( zustand a == 0 && zustand b == 1 && zustand c == 0 && zustand d == 1 && zustand e == 0 && zustand f == 0 ) tu was; ...vordefinieren will, wollte ich fragen, welche Möglichkeiten es gibt, dies anders zu realisieren. Würde mich freuen, wenn mir hierzu jemand weiterhelfen könnte. Gruß Axel
jeden zustand ein bit in einen byte zuordnen und dann nur noch das byte vergleichen?
Na wie sieht es mit 1 2 4 8 16 32 aus?
"bau" dir eine Zustandsmatrix, welche als "Adressbits" deine Zustände hat, und an der jeweiligen Adresse die benötigte Funktion. Deine Matrix muß dann genau 2^5 Adressen haben. Alle Adressen müssen sinnhafte Werte haben. Z.B. Zustand fedcba 001010 = Adresse 10 dezimal --> Wert 67 001011 = Adresse 11 dezimal -_> Wert 99 in deinem Array an Adrese 10 steht dann "67", welches gleichbedeutend ist mit der Aktion "LED grün einschalten" (oder was weiß ich was du machen möchtest) der Zustand 001011 ist unerlaubt. Daher bewirkt "99" die Aktion "Hupe einschalten" (oder sonstewas)
Bei vielen verschiedenen Aktionen würde ich das ganze als Funktionspointer-Array deklarieren und die Zustände dann als Index ins Array verwenden. PROGMEM const void (*FuncPtr[64])(void) = { (void *) GetAdc0, (void *) GetAdc1, (void *) GetAdc2, (void *) GetAdc3, .... (void *) LCD_Line1, (void *) LCD_Line2, (void *) RLY_Out, (void *) EPILOG, }; int main(void) { void (*fp)(void); /* pointer to function */ fp = (void *) pgm_read_word_near(FuncPtr + StateSum); (*fp)(); Gruß Anja
Hallo,
danke für die schnellen Antworten.
Eine Zustandsmatrix brauche ich in jedem Fall, die die einzelnen
@Vivil: Was meinst du mit:
> Na wie sieht es mit 1 2 4 8 16 32 aus?
zustand a = 0 * 1
zustand b = 1 * 2
zustand c = 0 * 4
zustand d = 1 * 8
zustand e = 0 * 16
zustand f = 0 * 32
Summe = 10
if ( Summe == 10 )
send("Zustand b und a detektiert")
Allerdings muss ich ja die Zahlenwerte auch irgendwo hinterlegen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.