11.06.2011, 19:20
Da kann ich evtl. weiterhelfen...
Meine Session heute bestand darin, einzelne Messages vom plappernden Bus zu lesen, also nicht auf Anfrage.
Dieser Code hier:
...versetzt den ELM in Bus-Monitoring-Mode, welcher auf Gerät B0h (FB-Empfänger) lauscht.
Drückt man nun eine Taste auf dem Schlüssel (z.B.) "Open", dann erscheint im Serial-Monitor:
Der erste Block nach leeren Werten gefiltert ergibt:
Also: A8FFB00286 im Array.
Das kann man jetzt in einem Programm verwendet, welches genau diese Zeichenfolge erkennt, und dann ggf. eine Reaktion auslöst![Idee Idee](https://www.corvetteforum.de/images/smilie/idee.gif)
Natürlich könnte man Zeile 13 ( Serial1.print("ATMTB0"); ) auch gegen etwas anderes austauschen, z.B. gegen ATMT10, um Nachrichten vom PCM mitzulauschen.
Oder gegen ein ATMA, um ALLES mitzuschneiden, ich weiß aber nicht, ob der Arduino das in der Form schafft, ohne daß der 128 Byte-Inputbuffer überläuft.
Weiteres später, wenn meine Forschungen zum Packet-Mode weiter sind...
Meine Session heute bestand darin, einzelne Messages vom plappernden Bus zu lesen, also nicht auf Anfrage.
Dieser Code hier:
Code:
# Code für Arduino Mega, Serial1=ELM
char buffer[128] ; int a = 0; int b = 0; int pointer = 0; int zchn = 0;
void setup() {
Serial.begin(9600); Serial1.begin(9600); // Serialports konfigurieren
Serial1.print("ATZ"); Serial1.print((char)13); delay(500);
Serial1.print("ATL0"); Serial1.print((char)13); delay(500);
Serial1.print("ATH1"); Serial1.print((char)13); delay(500);
Serial1.print("ATFD"); Serial1.print((char)13); delay(500);
Serial1.print("ATE0"); Serial1.print((char)13); delay(500);
Serial1.flush();
Serial1.print("ATMTB0"); Serial1.print((char)13); delay(500);
Serial.println("ready...");
}
void loop() {
pointer = 0;
while (zchn != 13) {
while (Serial1.available() < 1) {}
buffer[pointer] = Serial1.read();
zchn = (buffer[pointer]);
Serial.print(" Buffer "); Serial.print(pointer); Serial.print(" = "); Serial.write(buffer[pointer]); Serial.println();
if (zchn !=32) pointer++; }
Serial.println("Message gelesen!"); zchn = 0; pointer = 0;
}
...versetzt den ELM in Bus-Monitoring-Mode, welcher auf Gerät B0h (FB-Empfänger) lauscht.
Drückt man nun eine Taste auf dem Schlüssel (z.B.) "Open", dann erscheint im Serial-Monitor:
Zitat:ready...
Buffer 0 = A
Buffer 1 = 8
Buffer 2 =
Buffer 2 = F
Buffer 3 = F
Buffer 4 =
Buffer 4 = B
Buffer 5 = 0
Buffer 6 =
Buffer 6 = 0
Buffer 7 = 2
Buffer 8 =
Buffer 8 = 8
Buffer 9 = 6
Buffer 10 =
Buffer 10 =
Message gelesen!
Buffer 0 = C
Buffer 1 = A
Buffer 2 =
Buffer 2 = C
Buffer 3 = 4
Buffer 4 =
Buffer 4 = B
Buffer 5 = 0
Buffer 6 =
Buffer 6 = 1
Buffer 7 = 0
Buffer 8 =
Buffer 8 = 2
Buffer 9 = 2
Buffer 10 =
Buffer 10 = 0
Buffer 11 = 8
Buffer 12 =
Buffer 12 = C
Buffer 13 = E
Buffer 14 =
Buffer 14 =
Message gelesen!
Der erste Block nach leeren Werten gefiltert ergibt:
Zitat: Buffer 0 = A
Buffer 1 = 8
Buffer 2 = F
Buffer 3 = F
Buffer 4 = B
Buffer 5 = 0
Buffer 6 = 0
Buffer 7 = 2
Buffer 8 = 8
Buffer 9 = 6
Also: A8FFB00286 im Array.
Das kann man jetzt in einem Programm verwendet, welches genau diese Zeichenfolge erkennt, und dann ggf. eine Reaktion auslöst
![Idee Idee](https://www.corvetteforum.de/images/smilie/idee.gif)
Natürlich könnte man Zeile 13 ( Serial1.print("ATMTB0"); ) auch gegen etwas anderes austauschen, z.B. gegen ATMT10, um Nachrichten vom PCM mitzulauschen.
Oder gegen ein ATMA, um ALLES mitzuschneiden, ich weiß aber nicht, ob der Arduino das in der Form schafft, ohne daß der 128 Byte-Inputbuffer überläuft.
Weiteres später, wenn meine Forschungen zum Packet-Mode weiter sind...