无法使用Arduino从串行设备获取数据

时间:2014-06-30 09:58:07

标签: serial-port arduino sensor


       我试图从超声波燃料传感器(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提供了比例电压。即使这样也无法工作。 那么,出了什么问题呢?请指导我。

4 个答案:

答案 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连接器,它终于工作了。