Hallo zusammen,
folgende Ausgangssituation:
Ich habe ein C# Programm geschrieben, dass über den Serialport und ein
XBee-Explorer-Board einen Befehl an ein Arduino Uno+XBee-Shield sendet.
Dieses sendet dann dementsprechend die Werte der 6 ADCs. Das
funktioniert auch reibungslos.
Nun habe ich den Code des Unos genoimmen und 1 zu 1 auf den MEGA
überspielt. Das XBEE-Shield inkl. Sensoren habe ich 1 zu 1 am MEGA
angeschlossen. Die Pin-Belegung ist auch die selbe. Funktionieren tut es
allerdings nicht. Die LED, die den Empfang von Daten signalisiert
leuchtet auf, aber die Sende-LED nicht. Warum?!?! Die Logik ist die
selbe und die Pins, die der Mega für das XBee-Shield verwendet sind die
gleichen wie beim Uno (SoftwareSerial Pin 2 & 3).
Habt ihr Tipps?
Hier der Programmcode des Uno:
1 | #include <SoftwareSerial.h>
|
2 |
|
3 | #define MWB 10
|
4 |
|
5 | #define DataRequest 0x51
|
6 |
|
7 | SoftwareSerial XBee(2, 3);
|
8 |
|
9 | void setup() {
|
10 | XBee.begin(9600);
|
11 | }
|
12 |
|
13 |
|
14 | void loop() {
|
15 | uint8_t DataRequested=0;
|
16 | uint8_t IncomingData=0;
|
17 | int Lux1,Lux2,Lux3,IR1,IR2,IR3;
|
18 |
|
19 |
|
20 | if (XBee.available() > 0) {
|
21 | IncomingData = XBee.read();
|
22 | if(IncomingData==DataRequest){
|
23 | DataRequested=1;
|
24 | }
|
25 | IncomingData=0;
|
26 | }
|
27 |
|
28 | if(DataRequested==1){
|
29 | Lux1 = analogReadMWB(A0,MWB);
|
30 | IR1 = analogReadMWB(A3,MWB);
|
31 | Lux2 = analogReadMWB(A1,MWB);
|
32 | IR2 = analogReadMWB(A4,MWB);
|
33 | Lux3 = analogReadMWB(A2,MWB);
|
34 | IR3 = analogReadMWB(A5,MWB);
|
35 |
|
36 | XBee.print("UNO");
|
37 | XBee.print(":");
|
38 | XBee.print(Lux1);
|
39 | XBee.print(":");
|
40 | XBee.print(Lux2);
|
41 | XBee.print(":");
|
42 | XBee.print(Lux3);
|
43 | XBee.print(":");
|
44 | XBee.print(IR1);
|
45 | XBee.print(":");
|
46 | XBee.print(IR2);
|
47 | XBee.print(":");
|
48 | XBee.println(IR3);
|
49 |
|
50 | DataRequested=0;
|
51 | }
|
52 | }
|
53 |
|
54 |
|
55 | int analogReadMWB(uint8_t Channel, int Cycles){
|
56 | int Buffer=0;
|
57 | for(int i=0;i<Cycles;i++){Buffer+=analogRead(Channel);}
|
58 | return Buffer/Cycles;
|
59 | }
|
..und der Code des Megas:
1 | #include <SoftwareSerial.h>
|
2 |
|
3 | #define MWB 10
|
4 |
|
5 | #define DataRequest 0x51
|
6 |
|
7 | SoftwareSerial XBee(2,3);
|
8 |
|
9 | void setup() {
|
10 | XBee.begin(9600);
|
11 | }
|
12 |
|
13 |
|
14 | void loop() {
|
15 | uint8_t DataRequested=0;
|
16 | uint8_t IncomingData=0;
|
17 | int Lux4,IR4;
|
18 |
|
19 |
|
20 | if (XBee.available() > 0) {
|
21 | IncomingData = XBee.read();
|
22 | if(IncomingData==DataRequest){
|
23 | DataRequested=1;
|
24 | }
|
25 | IncomingData=0;
|
26 | }
|
27 |
|
28 | if(DataRequested==1){
|
29 | Lux4 = analogReadMWB(A0,MWB);
|
30 | IR4 = analogReadMWB(A1,MWB);
|
31 |
|
32 | XBee.print("MEGA");
|
33 | XBee.print(":");
|
34 | XBee.print(Lux4);
|
35 | XBee.print(":");
|
36 | XBee.println(IR4);
|
37 |
|
38 | DataRequested=0;
|
39 | }
|
40 |
|
41 | }
|
42 |
|
43 |
|
44 | int analogReadMWB(uint8_t Channel, int Cycles){
|
45 | int Buffer=0;
|
46 | for(int i=0;i<Cycles;i++){Buffer+=analogRead(Channel);}
|
47 | return Buffer/Cycles;
|
48 | }
|
Ich habe ebenfalls getestet, ob das XBee-Shield des Unos oder des Mega
falsch eingestellt ist, aber das ist kein problem. Den Code des Megas
kann ich auf den Uno packen und es funktioniert. Ebenfalls kann ich die
XBee-Shields beliebig tauschen und es funktioniert weiterhin auf dem
Uno. Also warum funktioniert es nicht auf dem Mega?
Vll noch die XBee-Infos, auch wenn ich mir da sicher bin:
USB-Exploer am PC (eingestellt als Broadcast)
MY: BABA
SH: 13A200
SL: 40E823C4
DH: 0
DL: FFFF
XBee Device 1 am Uno:
MY: BABA
SH: 13A200
SL: 40E82352
DH: 3A200
DL: 40E823C4
XBee Device 2 am Mega:
MY: BABA
SH: 13A200
SL: 40E82337
DH: 3A200
DL: 40E823C4
Lieben gruß,
Steffen