我正在尝试使用Arduino微控制器(尝试过Arduino UNO、Arduino FIO)从电位计读取数据,并通过串行通信接口将其接入Simulink(我尝试过的波特率范围为57600-921600)。
以下是Arduino源代码:
我将其与Tera Term软件进行了接口,相应的值在3V或0V时会立即更改。
但是,当我尝试使用仪器控制工具箱将其与Simulink模型进行接口时:
以下是Arduino源代码:
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
*/
#define ana_pin A0
void setup() {
analogReference(DEFAULT);
Serial.begin(57600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(ana_pin);
// print out the value you read:
Serial.print(sensorValue);
// delay(500); // delay in between reads for stability
}
我将其与Tera Term软件进行了接口,相应的值在3V或0V时会立即更改。
但是,当我尝试使用仪器控制工具箱将其与Simulink模型进行接口时:
当数值从3V的ASCII表示方式变为0V时,存在10秒的延迟。
块的采样时间为0.01
秒,模型配置参数已相应调整(我尝试了1秒或更长时间,但延迟仍然存在。另外,我能够从另一个传感器和LPC1768开发板记录数据,没有任何延迟。我还尝试在Simulink中使用Arduino支持库:)
看起来没有接收到任何数据,如您可以从PNG文件中的Scope1
看到,状态信号始终为0
。我还附上了在Simulink中的Arduino块的硬件实现属性:
你能帮我理解发生了什么以及如何解决这个问题吗?
Serial.print(sensorValue);
替换为Serial.println(sensorValue);
;这将添加一个终止字符\n
(或Windows上的\r\n
)。大多数串行函数等待特殊字符以知道传输何时结束。在您失败的情况下,我认为Simulink作用域具有10秒的超时时间。 - Arno Bozo