Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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

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
Java Arduino Ping)传感器在显示一些结果后突然停止_Java_Arduino_Ping - Fatal编程技术网

Java Arduino Ping)传感器在显示一些结果后突然停止

Java Arduino Ping)传感器在显示一些结果后突然停止,java,arduino,ping,Java,Arduino,Ping,我有一个传感器(HC-SR04),连接正确 我在没有接地的情况下启动它(否则它甚至不想启动),并且它一直将0写入串行窗口(距离)。一旦我将其插入接地引脚,我会得到几行正确的距离读数,然后它停止并挂起,串行窗口中不再出现结果,并且电路板本身似乎处于故障状态,我需要将其从USB拔下,断开接地,然后重新插入USB 问题的原因可能是什么 代码: #定义echoPin 2//echoPin #定义触发器引脚4//触发器引脚 #定义LED引脚13//板载LED int maximumRange=200;//

我有一个传感器(HC-SR04),连接正确

我在没有接地的情况下启动它(否则它甚至不想启动),并且它一直将0写入串行窗口(距离)。一旦我将其插入接地引脚,我会得到几行正确的距离读数,然后它停止并挂起,串行窗口中不再出现结果,并且电路板本身似乎处于故障状态,我需要将其从USB拔下,断开接地,然后重新插入USB

问题的原因可能是什么

代码:

#定义echoPin 2//echoPin
#定义触发器引脚4//触发器引脚
#定义LED引脚13//板载LED
int maximumRange=200;//所需的最大范围
int minimumRange=0;//所需的最小范围
长持续时间、距离;//用于计算距离的持续时间
int currentDistance=0;
无效设置(){
Serial.begin(9600);
引脚模式(trigPin,输出);
pinMode(echoPin,输入);
引脚模式(LED引脚,输出);//使用LED指示灯(如果需要)
}
void循环(){
/*以下trigPin/echoPin循环用于确定
通过从最近的物体上反弹声波而获得的距离*/
数字写入(trigPin,低电平);
延迟微秒(2);
数字写入(trigPin,高);
延迟微秒(10);
数字写入(trigPin,低电平);
持续时间=脉冲强度(echoPin,高);
//根据声速计算距离(以厘米为单位)。
距离=持续时间/58.2;

如果(距离>=maximumRange | | distance与您所说的不一致,则地面和设备之间似乎存在一个间歇性的快捷方式…或者可能有一个故障部件对地面短路。因此,我的建议是:

  • Arduino工作正常吗?
    • 测试Arduino本身是否能够在未连接传感器的情况下完美工作(上传回声)
  • 传感器设备是否正常工作?
    • 测试所有焊接点的连续性(查找接地和信号之间的快捷桥)
    • 使用另一个传感器设备(如果您碰巧有备用设备)进行测试,以查看问题是否依然存在
    • 或者用另一个Arduino尝试相同的设备
关于您的代码本身,据我所知,它不是问题的根源,我建议您将全局常量的声明更改为:

const uint8_t maximumRange = 200; // Maximum range needed
const uint8_t minimumRange = 0;   // Minimum range needed
const uint8_t currentDistance = 0;
或者使用预处理器:

#define maximumRange 200  // Maximum range needed
#define minimumRange 0    // Minimum range needed
#define currentDistance = 0
并动议:

long duration, distance;   // Duration used to calculate distance

loop()
函数内部。尽可能避免非常量全局变量始终是一个好主意(尽管对于Arduino对象并不总是可行)。

我能够找到问题的原因。似乎Arduino的串行监视器导致了“崩溃”,因为在使用允许在Flash()中使用Arduino输出的服务器实用程序时,Arduino的性能始终如一且没有问题


该项目的视频是。

传感器卡在零位的解决方案在这个链接中。这是docdoc的第二篇文章。你需要使用NewPing库,它更好

工作代码:

#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
    Serial.begin(9600);
}

void loop() {
    delay(50);
    unsigned int uS = sonar.ping();
    pinMode(ECHO_PIN,OUTPUT);
    digitalWrite(ECHO_PIN,LOW);
    pinMode(ECHO_PIN,INPUT);
    Serial.print("Ping: ");
    Serial.print(uS / US_ROUNDTRIP_CM);
    Serial.println("cm");
}
#包括
#定义触发U引脚12
#定义ECHO_引脚11
#定义最大距离200
新平声纳(触发针、回波针、最大距离);
无效设置(){
Serial.begin(9600);
}
void循环(){
延迟(50);
无符号int-uS=sonar.ping();
pinMode(ECHO_引脚,输出);
数字写入(回显引脚,低电平);
pinMode(ECHO_引脚,输入);
序列号。打印(“Ping:”);
串行打印(uS/uS\u往返\u CM);
序列号。打印号(“cm”);
}
链接:


新建Ping链接:

如果我记得正确,Ping传感器对“trigger”和“echo”使用了相同的管脚,或者他们改变了吗?我的型号有两个管脚,一个标为Trig,另一个标为echo,从我在网上看到的示意图来看,它们应该连接到两个不同的端口Does
Serial.println(xxx);
需要一个字符指针(“字符串”)作为参数,在这种情况下,行<代码>串行.PROTLN(距离);只能打印垃圾,至少在C.(编译器至少应该发出警告)。(C++中,根据参数类型,可以有不同的打印)(s)。提示:也许你可以在问题中添加一个语言标记?这是Java的一个子集,当串行监视器正常工作时,距离被正确打印到串行监视器上,tnx。在这种情况下,可能是串行输出中的缓冲区已满。你是否尝试过降低更新频率?(或者:等待串行缓冲区耗尽)arduino可以正常工作,传感器可以正常工作,但只能在一段看似随机的时间内工作,我可以通过增加延迟来延长这段时间(见更新的原始帖子)嗨,伙计们。看起来问题不在于传感器,而在于串行接口:我已经在电路板上连接了一个led,一旦Arduino“卡住”,我会根据距离给它一个模拟值,led保持正常工作,所以我想问题在于Arduino关闭串行接口并停止通过USB的数据传输。有什么想法吗?那不是Arduino代码有问题,而是主机端处理串行连接的方式。你能给出主机上使用的代码吗?对于我正在使用的主机在执行Serial.flush()并在每个Serial.println之后延迟500毫秒后,只需使用Arduino软件的串行监视器,我就可以获得更好的性能,尽管最终串行停止工作
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
    Serial.begin(9600);
}

void loop() {
    delay(50);
    unsigned int uS = sonar.ping();
    pinMode(ECHO_PIN,OUTPUT);
    digitalWrite(ECHO_PIN,LOW);
    pinMode(ECHO_PIN,INPUT);
    Serial.print("Ping: ");
    Serial.print(uS / US_ROUNDTRIP_CM);
    Serial.println("cm");
}