【发布时间】:2020-06-09 20:14:42
【问题描述】:
我正在绞尽脑汁试图解决这个问题。 对于初学者: *我的波特率两端都是9600。 *我有一个大小为 8 的数组,所以最大索引是 7 *我根据时间将数组中的每个字符(位置 0、1、3、4、6、7)设置为数字 0-9 *如果我打印时间,它会完美显示,除非数字高于 18:00:00 *MSin1Hr、MSin24Hr 等的 const long 是全局声明的 下面是从 MS 获取时间到字符串的代码
char lightOffTime[] = {'0', '0', ':', '0', '0', ':', '0', '0'};
void getTimeStr(char inArr[], unsigned long timeInMS)
{
int num = 0;
char cstr[16];
num = timeInMS / (10 * MSin1Hr); //tens of hours
sprintf(cstr, "%01d", num);
inArr[0] = cstr[0];
num = timeInMS % (10 * MSin1Hr) / MSin1Hr; //remainder
sprintf(cstr, "%01d", num);
inArr[1] = cstr[0];
unsigned long minutesMS = timeInMS % MSin1Hr;
num = minutesMS / (10 * MSin1Minute); //tens of minutes
sprintf(cstr, "%01d", num);
inArr[3] = cstr[0];
num = minutesMS % (10 * MSin1Minute) / MSin1Minute; //remainder
sprintf(cstr, "%01d", num);
inArr[4] = cstr[0];
unsigned long secondsMS = timeInMS % MSin1Minute;
num = secondsMS / 10000; //tens of seconds
sprintf(cstr, "%01d", num);
inArr[6] = cstr[0];
num = (secondsMS % 10000) / 1000; //remainder
sprintf(cstr, "%01d", num);
inArr[7] = cstr[0];
}
我使用
调用函数getTimeStr(lightOffTime, lightTurnOffTime);
然后我可以使用Serial.println(lightOffTime);将其打印到串行
如您所见,我只是在 MS 中传入数组和时间,它应该将时间作为格式化字符串弹出。有任何想法吗? - 我传入的具体数字是 68401000 (19:00:01),由于某种原因正在打印 19:00:01h
【问题讨论】:
-
你能贴出你用来调用这个函数的代码,包括数组的声明吗?
-
已添加,同时被否决了 xD
-
数组是作为字符串使用的吗?如果是这样,你最后没有 nul char
\0 -
所以数组实际上应该是 char lightOffTime[] = {'0', '0', ':', '0', '0', ':', '0', '0 ', '\0'};?编辑:我不认为我是,我只是将它作为一个数组直接传递给 println,并且只有当数字也是 > 19:00:00 时才会发生错误
-
@ComputerTuts 您如何期望
println知道要发送多少字节?
标签: c++ c arrays serialization arduino