wenn ich bei if nur eine bedingung festlege funktionierts einwandfrei
der arduino reagiert und sendet auf ner anderen id die gewünschte nachricht
verwende ich aber && und setze 2 bedingungen dann geht nichts mehr
und ein weiteres problem habe ich sind 2 dieser bedingungen erfüllt und es kommt eine dritte hinzu
hätte ich gerne das mein programm solange auf jener id eine nachricht sendet bis eben eine andere bedingung wieder erfüllt ist
so funktionierts
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
//********************************Setup Loop*********************************//
void setup() {
Serial.begin(9600);
Serial.println("CAN Write - Testing transmission of CAN Bus messages");
delay(1000);
if(Canbus.init(CANSPEED_125)) //Initialise MCP2515 CAN controller at the specified speed
Serial.println("CAN Init ok");
else
Serial.println("Can't init CAN");
delay(1000);
}
//********************************Main Loop*********************************//
void loop(){
tCAN message;
if (mcp2515_check_message())
{
if (mcp2515_get_message(&message))
{
if(message.id == 0x084 and message.data[] <= 0x04)
{
message.id = 0x011; //formatted in HEX
message.header.rtr = 0;
message.header.length = 8; //formatted in DEC
message.data[0] = 0x00;
message.data[1] = 0x00;
message.data[2] = 0x00;
message.data[3] = 0x00;
message.data[4] = 0x00;
message.data[5] = 0xE4; //formatted in HEX
message.data[6] = 0x00;
message.data[7] = 0x00;
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
mcp2515_send_message(&message);
delay(90); }
}
}
}
setze ich die 2te Bedingung mit && gehts nicht mehr
(message.id == 0x084 and message.data[1] <= 0x04)&&(message.id == 0x010 and message.data[5] < 0xEC)
message.id kann doch nicht gleichzeitig 0x084 und 0x010 sein. Da geht immer nur entweder - oder.
Gehört da nicht eher eine oder-Verknüpfung dazwischen?
ok kann ich also nicht auf 2 ids zuhören zur seben zeit
1x id 010 und 1x id 084
also die 2 bedinungen müssen erfüllt sein
sendet id 10 eine gewisse nachricht und zur gleichen zeit die id 84 eine gewisse nachricht dann soll der arduino auf id 11 etwas senden....kann dauernd sein solange diese bedinungen erfüllt sind oder eben nur 5x oder 6x
das spiellt dann keine rolle da entsprechendes gerät ab der 4ten oder 5 ten nachricht darauf reagiert
ist fürs auto
quasi ist schalterstellung d und geschwindigkeit xx dann sende id11 message xxx
kangool001:
aber es geht ja darum das wenn ich nur eine bedingung stelle es funktioniert
schreibe ich aber if ((1te cannachricht) && (2te cannachricht andere id))
dann gehts nichtmehr....
dann bekomme ich keine antwort mehr vom can shield
Dann muss Du das eben 'oder' verknüpfen: Wenn die eine ODER die andere Nachricht ankommt, dann tu was. Es können ja nicht beide Nachrichten gleichzeitig ankommen
also if ((1te cannachricht) || (2te cannachricht andere id))
Wenn Du auf beide abfragen willst, können die ja nur nacheinander kommen. Dann musst Du dir merken, dass die erste gekommen ist, und das dann bei der 2. abfragen ( also ob die 1. vorher schon da war ). Das geht dann nicht mehr in einer Abfrage.
ok dann muss ich nach einer lösung suchen....denn es müssen beide nachrichten wahr sein um die aktion aus zu lösen...da ist dan 'oder' nicht die richtige lösung un meinem fall
kangool001:
ok dann muss ich nach einer lösung suchen....denn es müssen beide nachrichten wahr sein um die aktion aus zu lösen...da ist dan 'oder' nicht die richtige lösung un meinem fall
Dann wird es eben etwas komplizierter, denn die können ja nicht gleichzeitig kommen. Da wirst Du - wie schon geschrieben - mit Merkern arbeiten müssen.
Kommen die beiden Messages denn unmittelbar hintereinander? Ich denke, wenn da beliebig viel anderes dazwischen kommt, soll es doch sicher auch nicht auslösen, oder?
id 10 kommen nur 4 verschidene nachrichten E0 E4 E8 EC (schalterrposition automatik PRND)
und id 84 ändert sich je nach geschwindigkeit
und später kommt noch eine dritte id dazu 131 sind die parksensoren/steuergerät
ich möchte mit dem arduino eben das parkmodul an und ausschalten indem ich die abfrage vom steuergrät (signalconfig) von id10 auf id11 geändert habe
um eben zu realisieren das pdc nicht nur bei R angeht sondern auch vorwärtsfahren bei geschwindigkeit xx (ca 10kmh)
beim original geht pdc eben nur an wenn auf id10 E4 (R) gesendet wird
id 11 ist nicht belegt somit gibts auch keine kollision mit irgendeiner anderen nachricht bzw id auf dem can-bus
Sorry - aber Deine Posts lesen sich echt ermüdend.
Bitte benutze große Buchstaben, auch Satzzeichen wurden nicht nur erfunden, um damit Schüler quälen zu können.