gpt4 book ai didi

c - Arduino yun 几个小时后停止工作

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:05 27 4
gpt4 key购买 nike

我正在尝试使用 arduino yun 将机器生产的零件数量输出到谷歌电子表格。通过我的设置,我可以暂时将数据输出到电子表格。然而,一段时间后,云停止工作。我用来指示代码正在运行的红色 LED 灯熄灭了,我再也看不到端口列表中的 arduino。 32u4 芯片的复位导致 LED 重新亮起,表明代码正在运行,但开发板仍然没有出现在端口菜单中。

我已经在我们的车间对其进行了测试,它已经运行了 7-12 个小时,完全没有问题。只有当我们将它带到生产车间时,我们才开始遇到这些问题。有谁知道问题可能是什么?这是代码中最相关的部分:

#include <elapsedMillis.h>
#include <Process.h>
#include <Bridge.h>
#include "TimeLib.h"

// On Arduino: 0 - 1023 maps to 0 - 5 voltsf
#define VOLTAGE_MAX 5.0
#define VOLTAGE_MAXCOUNTS 1023.0

unsigned int buttonCount = 0;
float voltage = 0;
elapsedMillis timeSinceLastCycle = 0;
elapsedMillis transmitData = 0;
int pressFlag = 0;
Process date;
int hours, minutes, seconds;
int lastSecond = -1;
Process sendData;

String printDate() {

// String currTime = String(hours) + ":" + String(minutes) + ":" + String(seconds);

if (lastSecond != seconds) { // if a second has passed
// print the time:
if (hours <= 9) {
Console.print("0"); // adjust for 0-9
}
Console.print(hours);
Console.print(":");
if (minutes <= 9) {
Console.print("0"); // adjust for 0-9
}
Console.print(minutes);
Console.print(":");
if (seconds <= 9) {
Console.print("0"); // adjust for 0-9
}
Console.println(seconds);

// restart the date process:
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}

//if there's a result from the date process, parse it:
while (date.available() > 0) {
// get the result of the date process (should be hh:mm:ss):
String timeString = date.readString();

// find the colons:
int firstColon = timeString.indexOf(":");
int secondColon = timeString.lastIndexOf(":");

// get the substrings for hour, minute second:
String hourString = timeString.substring(0, firstColon);
String minString = timeString.substring(firstColon + 1, secondColon);
String secString = timeString.substring(secondColon + 1);


// convert to ints,saving the previous second:
hours = hourString.toInt();
minutes = minString.toInt();
lastSecond = seconds; // save to do a time comparison
seconds = secString.toInt();
String currTime = hourString + ":" + minString + ":" + String(seconds);
return currTime;
}
}

void checkVoltage() {

int sensorValue = analogRead(A0);
voltage = sensorValue * (VOLTAGE_MAX / VOLTAGE_MAXCOUNTS);

Console.println(voltage);
delay(50);
if (voltage >= 4.9 && pressFlag == 0) {

Console.println("Delaying");
sensorValue = analogRead(A0);
voltage = sensorValue * (VOLTAGE_MAX / VOLTAGE_MAXCOUNTS);

if (pressFlag == 0 && voltage >= 4.9) {

unsigned long int intCycleTime = timeSinceLastCycle;
timeSinceLastCycle = 0;
digitalWrite(LED_BUILTIN, LOW); // turn the LED on (HIGH is the voltage level)

printDate();
String pressTime = printDate();

Console.print("PressTime is ");
Console.println(pressTime);

buttonCount++;
Console.println(buttonCount);

pressFlag = 1;



String part1 = "curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"";
String timeString = pressTime;
Console.print(timeString + " seconds");
String part2 = "\",\"value2\":\"";
String numParts = String(buttonCount);
String part3 = "\",\"value3\":\"";
String strCycleTime = String(intCycleTime / 1000); // + " seconds";
String part4 = "\"}' https://maker.ifttt.com/trigger/arduino2Request/with/key/gL8YmxeaUChOMJvmwpdXp -k";
//curl -X POST -H "Content-Type: application/json" -d '{"value1":"1","value2":"2","value3":"3"}' https://maker.ifttt.com/trigger/arduino2Request/with/key/gL8YmxeaUChOMJvmwpdXp

String curlString = part1 + timeString + part2 + numParts + part3 + strCycleTime + part4;

// The curl string sends data to oue excel spreadhsheet using the IFTTT web service

sendData.runShellCommandAsynchronously(curlString);

elapsedMillis breakTimer = 0;
/*while(sendData.running()){

if(breakTimer > 5*1000){
break;
}
} */


Console.print("Data Available: "); // A value of 32 indicates a successful transmission of data, 0 also works if run asynchronously.
Console.println(sendData.available());

digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)

}

}
else if (voltage < 2.5) {
pressFlag = 0;
}

}

void setup() {

Bridge.begin();
Console.begin();
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)

// run an initial date process. Should return:
// hh:mm:ss :
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}

void loop() {

checkVoltage();

if ((timeSinceLastCycle > 300000) && (transmitData > 300000)) { // If 5 minutes have elapsed without a part being produced, output that the arduino is transmitting even if not part is available
sendData.runShellCommand("curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"1\",\"value2\":\"Arduino Transmitting\"}' https://maker.ifttt.com/trigger/transmitData/with/key/gKRo-zSur5rj6rD5rviCaV2RHI5g56Dy0Vc0S_XJ-oO -k");
transmitData = 0;
}
}

更新:我向 checkVoltage 函数添加了一系列打印语句。上面的代码已更新以反射(reflect)这一点。我发现它在尝试使用 sendData.runShellCommandAsynchronously 时挂起。输出看起来像

1.58
1.54
5.00
Delaying
PressTime is n" -d
3

尝试运行 ShellCommand 时网络连接中断是否会导致此问题?

最佳答案

所以按照user3629249的解决方案,这个问题似乎解决了。现在已经有数周的无错误运行时间。 user3629249,如果你想重新发布你的建议作为答案,我会接受。感谢 user3629249 和 Patrick Trentin 的帮助!

我的更新 ProcessDate 函数现在包含:

if(date.available() >0){
while (date.available() > 0) {
// get the result of the date process (should be hh:mm:ss):
String timeString = date.readString();

// find the colons:
int firstColon = timeString.indexOf(":");
int secondColon = timeString.lastIndexOf(":");

// get the substrings for hour, minute second:
String hourString = timeString.substring(0, firstColon);
String minString = timeString.substring(firstColon + 1, secondColon);
String secString = timeString.substring(secondColon + 1);


// convert to ints,saving the previous second:
lastSecond = seconds; // save to do a time comparison
lastMinute = minutes;
lastHour = hours;
hours = hourString.toInt();
minutes = minString.toInt();
seconds = secString.toInt();
String currTime = hourString + ":" + minString + ":" + String(seconds);
return currTime;
}
else{
String currTime = ""; // If there is no result from the date process, return nothing. Should not happen.
return currTime;
}
}

关于c - Arduino yun 几个小时后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com