Arduino Uno Code to Mega

Gast #4435409
Lesenswert?
• ▲
▼
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
Gast #4435437
Lesenswert?
• ▲
▼
Nachtrag:

Habe auf dem Mega folgendes getestet:

Jegliche XBee Funktionen in Serial-Funktionen gewandelt (Im Grund 
überall wo "XBee" stand durch "Serial" ersetzt.

Nun kommen die Daten im C# Programm auch einwandfrei an. Ich kann COM9 
auswählen (XBee-USB-Explorer) und kann Daten vom Uno empfangen und am 
COM10 wie sonst üblich per Kabel die Daten vom Mega.

Ich sehe da nur eine Stelle, die Probleme macht:
Die XBee-Ansteueruzng via SoftwareSerial am Mega. Ist da etwas zu 
beachten?

Gruß,

Steffen
Gast #4435441
Lesenswert?
• ▲
▼
Fünfig geworden.


"Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.