программирование связи xbee arduino

Я попытался протестировать систему, и я не уверен, связана ли проблема с xbee, кодом передачи или кодом получения. Прежде чем опубликовать свой код, я объясню, что мы делаем с сигналами. У нас есть три аналоговых сигнала, которые будут последовательно отправляться через один xbee с использованием arduino и xbee Shield. Мы хотим отправить эти сигналы на принимающий xbee, где Arduino будет выводить эти сигналы для подключения к третьему Arduino через провода, которые будут использоваться в программе Simulink. Мы используем arduino mega для передающей стороны и arduino uno для принимающей стороны. Мне сказали, что мне нужно сделать последовательную потоковую передачу, но я не уверен, как это делается. Я понимаю, что xbee и arduinos оцифровывают сигналы, но мы надеемся получить сигнал, очень похожий на аналоговые сигналы, которые мы передаем. Мы очень признательны за любую помощь!
Вот как я настроил свои xbees (серия 1) в режиме AT:

Передача Xbee:
Канал: 10
Pan id: 1234
MY: 10
DL: 11
Прием Xbee:
Канал: 10
Идентификатор панорамы: 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);  
    }  
}

person user3430282    schedule 20.03.2014    source источник


Ответы (1)


Похоже, вы используете модули XBee в «режиме AT» или «прозрачном последовательном» режиме, когда все, что принимается через последовательный порт модуля A, отправляется из последовательного порта модуля B, и наоборот.

Если это так, может помочь ваша первоначальная разработка с последовательными портами ваших двух устройств, подключенных напрямую друг к другу. Разработайте там свой последовательный протокол, а затем попробуйте запустить его с установленными модулями XBee в качестве замены последовательного кабеля.

Подумайте о формате данных, которые вы отправляете, и о том, как вы будете обрабатывать их на другом конце. Как вы будете разделять показания и определять, к какому аналоговому входу они относятся? С вашим текущим кодом вы печатаете показания на отдельных строках, но не будет ясно, какая из них A0. Может быть, вы хотите отправить их в одну строку с запятой между каждым чтением?

На принимающей стороне вам нужно преобразовать текст обратно в целое число, используя функцию C, например atoi() или strtoul().

Если вы пытаетесь создать аналоговый выход на Arduino, это может быть возможно с цифровым выходом, использующим ШИМ (широтно-импульсная модуляция). Это Instructable неплохо описывает эту концепцию. .

person tomlogic    schedule 21.03.2014