ขอถามเกี่ยวกับเรื่องการเขียนโปรแกรมเพื่อควบคุมการส่งข้อมูลหน่อยครับ
การ Config ของ Xbee ก็เป็นไปตามภาพเลยครับ สิ่งที่ผมต้องการคือไม่ให้ส่งข้อมูลพร้อมกัน โดยให้เรียงกันแบบนี้ครับ
Client A ,Client B ,Client C ,Client A ,Client B ,Client C ,Client A ,Client B ,Client C
แบบนี้อ่ะครับ
โดยวิธีที่ผมใช้คือ ผมจะให้ฝั่ง Sever ส่ง a กระจายออกไป Xbee ทุกตัวจะรับ a ได้หมด แต่ผมจะเขียนโปรแกรมที่ Client A เท่านั้นที่เมื่อเจอ A แล้วทำงาน จากนั้น Client A จะอ่านค่าจาก Sensor แล้วส่งค่ากลับมาให้ Server เมื่อ Server รับค่ามาแล้วจะแสดงออกทาง Computer แล้ว Server ถึงจะส่ง b ออกไป การทำงานก็จะทำแบบนี้ไปเรื่อยๆ (ลักษณะแบบ token ครับ ใช้การกำหนดสิทธิ์กับ Client ตัวไหนให้มีสิทธิ์ส่ง) ผมเลยอยากจะถามครับว่าจะเขียนโปรแกรมฝั่ง Server ยังไงให้ทำงานได้แบบนี้อ่ะครับ
โดยอันนี้เป็น Code ฝั่ง Client ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
#include <ADXL345.h>
void setup()
{
Serial.begin(9600);
delay(100);
}
void loop()
{
while(Serial.available() > 0) {
char var = (char)Serial.read();
Serial.flush();
if(var == 'a'){ // บรรทัดนี้ Client B และ C จะเป็น 'b' กับ 'c' ตามลำดับ
(โปรแกรมจะอ่านค่าจาก Sensor แล้วเก็บค่าไว้ในตัวแปร fZg)
Serial.print('A'); // บรรทัดนี้ Client B และ C จะเป็น 'B' กับ 'C' ตามลำดับ
Serial.println(fZg);
delay(60);
break;
}
}
}
ส่วน Code ฝั่ง Server จะเป็น Code ฝั่งนี้ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
String readString = "";
void setup()
{
Serial.begin(9600);
Serial2.begin(9600);
delay(100);
}
void loop()
{
Serial2.print('a');
if (Serial2.available() > 0) {
while (Serial2.available()) {
delay(3);
if (Serial2.available() > 0) {
char node1 = Serial2.read();
readString += node1;
if(node1 == '\n'){
Serial.print(readString);
readString = "";
break;
}
}
}
}
Serial2.print('b');
if (Serial2.available() > 0) {
while (Serial2.available()) {
delay(3);
if (Serial2.available() > 0) {
char node1 = Serial2.read();
readString += node1;
if(node1 == '\n'){
Serial.print(readString);
readString = "";
break;
}
}
}
}
Serial2.print('c');
if (Serial2.available() > 0) {
while (Serial2.available()) {
delay(3);
if (Serial2.available() > 0) {
char node1 = Serial2.read();
readString += node1;
if(node1 == '\n'){
Serial.print(readString);
readString = "";
break;
}
}
}
}
}
ซึ่งไม่รู้ว่าเขียนผิดตรงไหนยังไง ผมอยากให้เป็นไปตามโฟล์ชาร์ทแบบนี้อ่ะครับ
ซึ่งผลที่ได้มันเป็นแบบนี้อ่ะครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ซึ่งบางอันก็เรียงเป็น A C B (1)
บางอันก็ส่งค่าติดกัน (2)
ซึ่งผมต้องการให้ส่งเป็นแบบนี้ครับ A B C (3)
บางทีการรับข้อมูลก็หยุดครับ เดาว่าข้อมูลอาจจะชนกันครับ
ผมควรจะแก้ที่ตรงไหนดีครับ หรือถ้าใครมีวิธีการส่งข้อมูลให้เป็นแบบ A B C วิธีอื่นก็ขอคำแนะนำด้วยครับผม ขอบคุณครับ
ขอถามเรื่องการเขียนโปรแกรมบน Arduino ใช้งานกับ ZigBee หน่อยครับ
การ Config ของ Xbee ก็เป็นไปตามภาพเลยครับ สิ่งที่ผมต้องการคือไม่ให้ส่งข้อมูลพร้อมกัน โดยให้เรียงกันแบบนี้ครับ
Client A ,Client B ,Client C ,Client A ,Client B ,Client C ,Client A ,Client B ,Client C
แบบนี้อ่ะครับ
โดยวิธีที่ผมใช้คือ ผมจะให้ฝั่ง Sever ส่ง a กระจายออกไป Xbee ทุกตัวจะรับ a ได้หมด แต่ผมจะเขียนโปรแกรมที่ Client A เท่านั้นที่เมื่อเจอ A แล้วทำงาน จากนั้น Client A จะอ่านค่าจาก Sensor แล้วส่งค่ากลับมาให้ Server เมื่อ Server รับค่ามาแล้วจะแสดงออกทาง Computer แล้ว Server ถึงจะส่ง b ออกไป การทำงานก็จะทำแบบนี้ไปเรื่อยๆ (ลักษณะแบบ token ครับ ใช้การกำหนดสิทธิ์กับ Client ตัวไหนให้มีสิทธิ์ส่ง) ผมเลยอยากจะถามครับว่าจะเขียนโปรแกรมฝั่ง Server ยังไงให้ทำงานได้แบบนี้อ่ะครับ
โดยอันนี้เป็น Code ฝั่ง Client ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ส่วน Code ฝั่ง Server จะเป็น Code ฝั่งนี้ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ซึ่งผลที่ได้มันเป็นแบบนี้อ่ะครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ผมควรจะแก้ที่ตรงไหนดีครับ หรือถ้าใครมีวิธีการส่งข้อมูลให้เป็นแบบ A B C วิธีอื่นก็ขอคำแนะนำด้วยครับผม ขอบคุณครับ