Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serial port 无法使用Arduino从串行设备获取数据_Serial Port_Arduino_Sensors - Fatal编程技术网

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

Serial port 无法使用Arduino从串行设备获取数据,serial-port,arduino,sensors,Serial Port,Arduino,Sensors,我正在尝试从超声波燃油传感器()读取数据。该设备的波特率为9600。该设备基本上以固定的时间间隔发送数据。我能够使用终端软件在PC中读取输出。下面给出了一个示例 例如:*XD,205B,00000000,3100000000,null 35; 我正试图通过设备中提供的串行端口将此设备连接到Arduino,当我看到串行监视器时,输出不正确。下面是示例 53202151154511610257243230243230243230381662302432302302432305182228114146


我正在尝试从超声波燃油传感器()读取数据。该设备的波特率为9600。该设备基本上以固定的时间间隔发送数据。我能够使用终端软件在PC中读取输出。下面给出了一个示例

例如:*XD,205B,00000000,3100000000,null 35;

我正试图通过设备中提供的串行端口将此设备连接到Arduino,当我看到串行监视器时,输出不正确。下面是示例

532021511545116102572432302432302432303816623024323023024323051822281141463

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提供比例电压。即使这样也不起作用。
那么,出了什么问题?请指导我

既然您使用的是Serial1,我假设您使用的是Arduino Mega

根据你的问题,我想说问题不在于电压等,而更可能在于你如何读取数据。您假设传感器将返回char值。有没有关于退货的规格说明

我使用Arduino创建了一个类似的项目。除了我的超声波设备被用作测距仪。这里有一些细节。正如您在代码中看到的,传感器返回的范围为两字节整数


您需要找出超声波燃油传感器返回的数据,并以类似的方式读取。

好的,我建议您首先将其连接到模拟管脚以进行读取。您必须通过测量和分割来找到燃油高压和电压之间的比率。然后在代码中插入乘法,然后设置它,它将看起来像高电压,而不仅仅是电压。这只是一个猜测,因为我没有Arduino Mega(我有Duemilanove和Uno),但我在一些项目中遇到过与您类似的问题。有时在
void loop()
块上添加
delay()
会有所帮助,并为arduino提供足够的时间从缓冲区读取字节。对于9600波特率,读取1字节通常需要1毫秒,因此需要增加延迟

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);
}

谢谢大家!!问题是,我试图将RS232串行接口(适用于负电压)连接到Arduino中使用的TTL串行接口(适用于0到一些正电压)。很明显,我给Arduino提供了负电压,而它应该提供正电压。所以,我们得到了一个RS232到TTL的连接器,它终于工作了。

您混淆了ASCII和二进制数据。有些东西正在将字符串中的字符显示为整数而不是字符。Ya Hans,我切换到Serial.write,现在它正在打印垃圾字符。显然,这个字符集正在转换为数字。嗨,GolgiDevang,我使用的是Arduino Mega 2560。实际上,规范说它使用ASCII,它的格式是“(*XD、efgh、ij、klmn、abcd、opqr、stuv、wxyz).好的,我认为您使用串行与LCD显示器通信是对的吗?您是否尝试将硬编码打印到屏幕上。我还注意到传感器描述有两个输出:RS232和模拟。这两个输出是同时输出还是有开关?您是否在PC上使用带DB9接口的RS232进行了测试?您好,GolgiDevang,我只是使用串行接口,因为所需的数据只在串行输出中给出。我用DB9连接器进行了测试,它向我显示了输出。看来,问题现在已经解决了。感谢您的输入。嗨,用户3792207,问题是,我们不仅仅是在寻找高度。我们在寻找表面温度,信号质量ns将成为此串行输出的一部分。哦,好吧,很抱歉,我当时无法帮助您。我在这方面相对较新。抱歉,我无法提供更多帮助,我希望您的项目进展顺利。没有问题,用户3792207。甚至,我对此也是新手。似乎,我已经跨越了一个障碍。希望也能跨越其他障碍。感谢您的投入。嗨,格林。感谢您的投入。