- รบกวนดู Code ให้หน่อยครับ การติดต่อระหว่าง Arduino โดยใช้ XBee ทำไม Serial Monitor ไม่แสดงค่า
---------------------------------------------------------------------------------------------------------------------------------------
1) Arduino XBee Cordinator AT ( ส่งค่าไปยัง Routor AT และ รับค่ามาแสดงที่ Serial Monitor )
include <SoftwareSerial.h>
#define RxD 2
#define TxD 3
SoftwareSerial mySerial(RxD, TxD); // RX, TX
char incoming;
char incoming_2;
void setup() {
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
mySerial.begin(9600);
}
void loop() {
if (Serial.available()) {
char incoming_2 = Serial.read();
mySerial.write(incoming_2);
}
else if (mySerial.available()) {
char incoming = mySerial.read();
Serial.println(incoming);
}
}
---------------------------------------------------------------------------------------------------------------------------
2) Arduino Routor AT ( วัดอุณหภูมิ , รับค่าจาก Cordinator ,ควบคุมRelay, ส่งค่าอุณหภูมิกลับไปยัง Cordinator )
#include <OneWire.h>
#include <SoftwareSerial.h>
#define RxD 2
#define TxD 3
SoftwareSerial mySerial(RxD,TxD); // RX, TX
int DS18S20_Pin = 4; //DS18S20 Signal pin on digital 4
#define Relay_fan_1 5
#define Relay_fan_2 6
#define Relay_fan_3 7
#define Relay_fan_4 8
char incoming;
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 4
void setup(void) {
Serial.begin(9600);
pinMode(Relay_fan_1, OUTPUT);
pinMode(Relay_fan_2, OUTPUT);
pinMode(Relay_fan_3, OUTPUT);
pinMode(Relay_fan_4, OUTPUT);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
mySerial.begin(9600);
}
void loop(void) {
float temperature = getTemp();
if (mySerial.available()) {
incoming = mySerial.read();
switch(incoming) {
case 't' : mySerial.println(temperature);break;
case 'a' : digitalWrite(Relay_fan_1,HIGH);break;
case 'b' : digitalWrite(Relay_fan_2,HIGH); break;
case 'c' : digitalWrite(Relay_fan_3,HIGH);break;
case 'd' : digitalWrite(Relay_fan_4,HIGH);break;
case 'v' : digitalWrite(Relay_fan_1,LOW);break;
case 'w' : digitalWrite(Relay_fan_2,LOW); break;
case 'y' : digitalWrite(Relay_fan_3,LOW);break;
case 'z' : digitalWrite(Relay_fan_4,LOW);break;
}
}
}
// ยังมีอีก แต่ยาว เป็น Code ของ DS18S20
-----------------------------------------------------------------------------------------------------------
- ผม ทดลองส่งค่า จาก Cordinator ผ่าน XCTU ( ควบคุมRelayได้ , รับค่าอุณหภูมิได้ )
- แต่เมื่อลองส่งข้อมูลผ่าน Serial Monitor ( ควบคุมRelayได้ , ไม่มีค่าอุณหภูมิแสดง )
- ผมเลยสงสัยว่า เป็นเพราะ Code ส่วนนี้หรือเปล่า
else if (mySerial.available()) { //เมื่อมีข้อมูล ส่งมาจาก XBee
char incoming = mySerial.read(); //อ่านข้อมูล ที่ส่งมากจาก XBee เก็บไว้ใน ตัวแปร incoming
Serial.println(incoming); //แสดงค่า incoming ผ่าน Serial Monitor
}
----------------------------------------------------------------------------------------------------------
- หรือต้องเปลี่ยน จาก mySerial.println เป็น mySerial.write
case 't' : mySerial.println(temperature);break;
------------------------------------------------------------------------------------------------------------
- ผมอ่าน Textbook เค้าใช้ RX = pin0 , TX = pin1 แล้วใช้ Serial เลย
ผมใช้ SoftwareSerial.h มันดูง่ายกว่า
ผมเอาต้นแบบมาจาก เวปนี้
http://thaieasyelec.com/article-wiki/embedded-electronics-application/learning-xbee-with-xbee-series-2-starter-kit.html
----------------------------------------------------------------------------------------------------------
- รบกวนด้วยครับ ขอบคุณครับ
รบกวนดู Code ให้หน่อยครับ การติดต่อระหว่าง Arduino โดยใช้ XBee ทำไม Serial Monitor ไม่แสดงค่า
---------------------------------------------------------------------------------------------------------------------------------------
1) Arduino XBee Cordinator AT ( ส่งค่าไปยัง Routor AT และ รับค่ามาแสดงที่ Serial Monitor )
include <SoftwareSerial.h>
#define RxD 2
#define TxD 3
SoftwareSerial mySerial(RxD, TxD); // RX, TX
char incoming;
char incoming_2;
void setup() {
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
mySerial.begin(9600);
}
void loop() {
if (Serial.available()) {
char incoming_2 = Serial.read();
mySerial.write(incoming_2);
}
else if (mySerial.available()) {
char incoming = mySerial.read();
Serial.println(incoming);
}
}
---------------------------------------------------------------------------------------------------------------------------
2) Arduino Routor AT ( วัดอุณหภูมิ , รับค่าจาก Cordinator ,ควบคุมRelay, ส่งค่าอุณหภูมิกลับไปยัง Cordinator )
#include <OneWire.h>
#include <SoftwareSerial.h>
#define RxD 2
#define TxD 3
SoftwareSerial mySerial(RxD,TxD); // RX, TX
int DS18S20_Pin = 4; //DS18S20 Signal pin on digital 4
#define Relay_fan_1 5
#define Relay_fan_2 6
#define Relay_fan_3 7
#define Relay_fan_4 8
char incoming;
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 4
void setup(void) {
Serial.begin(9600);
pinMode(Relay_fan_1, OUTPUT);
pinMode(Relay_fan_2, OUTPUT);
pinMode(Relay_fan_3, OUTPUT);
pinMode(Relay_fan_4, OUTPUT);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
mySerial.begin(9600);
}
void loop(void) {
float temperature = getTemp();
if (mySerial.available()) {
incoming = mySerial.read();
switch(incoming) {
case 't' : mySerial.println(temperature);break;
case 'a' : digitalWrite(Relay_fan_1,HIGH);break;
case 'b' : digitalWrite(Relay_fan_2,HIGH); break;
case 'c' : digitalWrite(Relay_fan_3,HIGH);break;
case 'd' : digitalWrite(Relay_fan_4,HIGH);break;
case 'v' : digitalWrite(Relay_fan_1,LOW);break;
case 'w' : digitalWrite(Relay_fan_2,LOW); break;
case 'y' : digitalWrite(Relay_fan_3,LOW);break;
case 'z' : digitalWrite(Relay_fan_4,LOW);break;
}
}
}
// ยังมีอีก แต่ยาว เป็น Code ของ DS18S20
-----------------------------------------------------------------------------------------------------------
- ผม ทดลองส่งค่า จาก Cordinator ผ่าน XCTU ( ควบคุมRelayได้ , รับค่าอุณหภูมิได้ )
- แต่เมื่อลองส่งข้อมูลผ่าน Serial Monitor ( ควบคุมRelayได้ , ไม่มีค่าอุณหภูมิแสดง )
- ผมเลยสงสัยว่า เป็นเพราะ Code ส่วนนี้หรือเปล่า
else if (mySerial.available()) { //เมื่อมีข้อมูล ส่งมาจาก XBee
char incoming = mySerial.read(); //อ่านข้อมูล ที่ส่งมากจาก XBee เก็บไว้ใน ตัวแปร incoming
Serial.println(incoming); //แสดงค่า incoming ผ่าน Serial Monitor
}
----------------------------------------------------------------------------------------------------------
- หรือต้องเปลี่ยน จาก mySerial.println เป็น mySerial.write
case 't' : mySerial.println(temperature);break;
------------------------------------------------------------------------------------------------------------
- ผมอ่าน Textbook เค้าใช้ RX = pin0 , TX = pin1 แล้วใช้ Serial เลย
ผมใช้ SoftwareSerial.h มันดูง่ายกว่า
ผมเอาต้นแบบมาจาก เวปนี้http://thaieasyelec.com/article-wiki/embedded-electronics-application/learning-xbee-with-xbee-series-2-starter-kit.html
----------------------------------------------------------------------------------------------------------
- รบกวนด้วยครับ ขอบคุณครับ