sitze in den Endzügen meines Projektes eines Tachoumbaus bei dem ich vor Allem Can-Bus Signale übersetzen musste.
Jetzt sitze ich an einem Problem, wo ich irgendwie nicht weiterkomme.
Beim alten Tacho gibt es digitale Signale, die dann in einem Can-Bus Signal ausgegeben werden. Diese Aufgabe muss nun das Arduino Due übernehmen.
Ich muss bei dem Byte6 eines Can-Bus Signals einen Wert ausgeben der sich aus mehreren Faktoren zusammensetzt. (Zahlen in Hex)
Tür-vorne links = 01
Tür-vorne rechts = 02
Tür-hinten links = 04
Tür-hinten rechts = 08
Heckklappe = 10
Wenn also z.B. die Tür vorne rechts, hinten links und die Heckklappe offen sind, muss über den Byte6 der Wert 16 (hex) ausgeben werden.
Für jedes der Signale gibt es jeweils einen digitalen input.
Wie gehe ich da am Besten mit Variablen und if-Abfragen ran?
Hier schonmal der Anfang von meinem Code:
void setup() {
//start serial connection
Serial.begin(9600);
//configure pin 2 as an input and enable the internal pull-up resistor
pinMode(4, INPUT_PULLUP); //Tür VO RE
pinMode(5, INPUT_PULLUP); //Tür VO LI
pinMode(6, INPUT_PULLUP); //Tür HI RE
pinMode(7, INPUT_PULLUP); //Tür HI LI
pinMode(8, INPUT_PULLUP); //Heckklappe
}
void loop() {
//read the pushbutton value into a variable
int TUERVR = digitalRead(4);
int TUERVL = digitalRead(5);
int TUERHR = digitalRead(6);
int TUERHL = digitalRead(7);
int HECK = digitalRead(8);
}
Die Idee war meinerseits zu sagen die Variable z.B. TUERVR = 00 und wenn der taster gedrückt ist, dass die Variable dann auf 02 änder. Die Variablen dann in einer einfachen Addition addiere.
Ich weiß halt leider nur nicht wie ich die Variablen über eine if-Abfrage ändern kann.
Dies ist eine Art Hack, es hängt von HIGH und LOW ab, um als 1 und 0 angesehen zu werden. Es wird funktionieren, aber es ist keine gute Codierungspraxis. Arduino könnte eines Tages entscheiden, HIGH und LOW in einen formalen Enum-Typ zu ändern, und Sie könnten in Schwierigkeiten geraten (der Compiler wird sich beschweren).
BTW welchen Datentyp hat digitalRead()? Tatsächlich ist der Typ int, daran wird sich auch in Zukunft nichts mehr ändern. Da ist die Gefahr viel größer, daß LOW und HIGH einmal umdefiniert werden.
Ausgabe in Bin ist falsch.... aber selbst wenn ich auf HEX ändere kommen falsche Ergebnisse raus. Ab einem bestimmten Ergebnis scheint er nicht weiterzuzählen....
Abgesehen davon, daß digitalRead() keinesfalls irgendwann einmal CHANGE usw. liefern sollte, und damit diese Definition absolut unprofessionell ist, um nicht zu sagen völlig bekloppt,
steht in meiner Arduino.h eindeutig
int digitalRead(uint8_t pin);
Aber ich merke schon, mit meinem Minimalismus bin ich wohl nicht mehr auf der Höhe der Zeit. Ich wurde noch nach Stunden bezahlt, nicht nach Anzahl Zeilen. Und ein guter Teil meiner Arbeit bestand darin, anderer Leute Code so zusammenzustreichen, daß er hinterher auch funktioniert hat.