我试图从超声波燃料传感器(the link)读取数据。该设备的波特率为9600.设备基本上以固定的时间间隔发送数据。我能够读取PC中的输出使用终端软件。以下是一个样本。
例如:* XD,205B,00,0000,0031,0000,0000,空#
我正在尝试通过设备中提供的串口将此设备连接到Arduino,当我看到串行监视器时,输出不正确。以下是示例。
5320215115451166102572432302302432302302302302432303816623024323023023023024323023023023051822281141463
String incoming_char; // Will hold the incoming character from the Serial Port.
void setup()
{
//Initialize serial ports for communication.
Serial.begin(9600);
Serial1.begin(9600);
Serial.println("Starting Communication with Fuel Sensor");
}
void loop()
{
//If a character comes in from the cellular module...
if(Serial1.available() >0)
{
incoming_char=String(Serial1.read()); // Get the character from the cellular serial port.
Serial.print(incoming_char); // Print the incoming character to the terminal.
}
}
Arduino由USB供电,而设备则由12V电源供电。 器件的电压电平Tx-GND = -5.44V,Rx-GND = -8.22V。
我最初认为问题可能是因为电压范围并制作了一个分压器电路并为Arduino提供了比例电压。即使这样也无法工作。 那么,出了什么问题呢?请指导我。
答案 0 :(得分:0)
由于您使用的是Serial1,我假设您使用的是Arduino Mega?
从你的问题我会说问题不是电压等,但更有可能是你如何阅读数据。您假设传感器将返回char值。是否有关于返回内容的规范?
我使用Arduino创建了一个类似的项目。除了我的超声波设备被用作测距仪。有详细信息here。正如您在代码中看到的那样,范围从传感器返回为两个字节的整数。
您需要了解Ultra Sonic燃油传感器的返回和读取方式。
答案 1 :(得分:0)
好吧,我首先建议您将其连接到模拟引脚进行读取。你必须通过测量和分配找到燃料高度和电压之间的比率。然后在代码中插入乘法并设置它看起来像高度而不仅仅是电压
答案 2 :(得分:0)
这只是一个疯狂的猜测,因为我没有Arduino Mega(我有Duemilanove和Uno),但我已经参与了我遇到类似你所遇到的问题的项目。有时在delay()
块上添加void loop()
有助于为arduino提供足够的时间从缓冲区读取字节。对于9600波特率,读取1个字节通常需要大约1 ms,因此需要添加延迟。
void loop()
{
//If a character comes in from the cellular module...
if(Serial1.available() >0)
{
incoming_char=String(Serial1.read()); // Get the character from the cellular serial port.
Serial.print(incoming_char); // Print the incoming character to the terminal.
}
delay(100);
}
答案 3 :(得分:0)
谢谢大家!对于你的价值输入。问题是,我试图将RS232串行(负电压工作)连接到Arduino中使用的TTL串行接口(0到一些正电压工作)。显然,我正在向Arduino提供负电压,而预计会给出正电压。所以,得到了一个RS232-to-TTL连接器,它终于工作了。