Я попытался протестировать систему и не уверен, что проблема в xbee, коде передачи или коде получения. Прежде чем опубликовать свой код, я объясню, что мы делаем с сигналами. У нас есть три аналоговых сигнала, которые будут передаваться последовательно через один xbee с использованием экрана arduino и xbee. Мы хотим отправить эти сигналы принимающему xbee, где arduino будет выводить эти сигналы для подключения к третьему arduino через провода, которые будут использоваться в программе Simulink. Мы используем Arduino Mega для передающей стороны и Arduino Uno для принимающей стороны. Мне сказали, что мне нужно выполнять последовательную потоковую передачу, но я не уверен, как это сделать. Я понимаю, что xbee и arduinos оцифровывают сигналы, но мы надеемся получить сигнал, очень похожий на аналоговые сигналы, которые мы передаем. Любая помощь очень ценится!
Вот как я настроил свои xbees (серия 1) в режиме AT:
Передача Xbee:
Канал: 10
Pan id: 1234
МОЙ: 10
DL: 11
Получение Xbee:
Канал: 10
Pan ID: 1234
МОЙ: 11
DL: 10
Передача кода Arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
// read the input on analog pins
int sensorValue1 = analogRead(A0);
int sensorValue2 = analogRead(A1);
int sensorValue3 = analogRead(A2);
// print out the value you read:
Serial.println(sensorValue1);
Serial.println(sensorValue2);
Serial.println(sensorValue3);
delay(1);
}
Получение кода Arduino:
int received1=8;
int received2=9;
int received3=10;
void setup(){
pinMode(received1, OUTPUT);
pinMode(received2, OUTPUT);
pinMode(received3, OUTPUT);
Serial.begin(9600);
}
void loop(){
if(Serial.available() )
{
byte output1 = Serial.read();
byte output2 = Serial.read();
byte output3 = Serial.read();
digitalWrite(received1, HIGH);
digitalWrite(received2, HIGH);
digitalWrite(received3, HIGH);
}
}
Похоже, вы используете модули XBee в режиме «AT» или «прозрачный последовательный», где все, что поступает на последовательный порт модуля A, отправляется из последовательного порта модуля B, и наоборот.
Если это так, то это может помочь выполнить начальную разработку с последовательными портами двух ваших устройств, подключенных напрямую друг к другу. Разработайте ваш последовательный протокол и попробуйте запустить его с установленными модулями XBee в качестве замены последовательного кабеля.
Рассмотрите формат данных, которые вы отправляете, и как вы будете обрабатывать их на другом конце. Как вы будете разделять показания и определять, к какому аналоговому входу они относятся? С вашим текущим кодом вы печатаете показания в отдельных строках, но не будет понятно, что A0
, Может быть, вы хотите отправить их в одной строке с запятой между каждым чтением?
На приемном конце вам нужно преобразовать текст обратно в целое число, используя функцию C, например atoi()
или же strtoul()
,
Если вы пытаетесь создать аналоговый выход на Arduino, это может быть возможно с цифровым выходом, который использует ШИМ (широтно-импульсная модуляция). это Instructable делает достойную работу по описанию этой концепции.
Других решений пока нет …