unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long m = 0;
unsigned int seconds = 0;
unsigned int minutes = 0;
unsigned int hours = 0;
unsigned long clockTimeStart = 1800000; //30 Minutes
unsigned long currentClockTime;
void loop() {
current_millis_value = millis();
currentClockTime -= current_millis_value - previous_millis_value;
previous_millis_value = current_millis_value;
minutes = (currentClockTime / 1000 / 60);
seconds = (currentClockTime / 1000) % 60;
m = (currentClockTime % 100);
Serial.print(minutes);
Serial.print(":");
Serial.print(seconds);
Serial.print(":");
Serial.println(m);
}我得到了一个间隔,在时间之间的串行写在任何地方,从9-11毫秒,每串行写行。是否有一种方法可以优化Serial.print()方法以允许跨类型的长值和字符串值写入多个值?
示例(这是无效的,但符合我的想法):
Serial.print(minutes + ":" + seconds + ":" + m);我知道这不是我正在工作的JavaScript -只是为编写过程寻找优化的可能性。我知道MOD可能很贵,但是只要简单地减去和写出currentClockTime的值,我就会有6-7毫秒的间隙时间。
发布于 2011-04-04 04:12:36
arduino有一个类似于java的字符串连接。我不知道这是否会让你加快速度,但是在发送之前,它会把所有的东西连接成一个字符串。
String package = "" + minutes;
package += ":"+seconds;
package += ":"+m;
Serial.print(package);如果您能够在另一边重建字符串,那么更好的操作可能是使用Serial.Write并发送原始数据,然后在接收端重构字符串。这将使每个循环发送的数据量从5-10字节减少到3-4字节。
发布于 2011-04-04 04:04:15
是否可以将所有内容预先转换为字符串值,这样您就可以一次写出整个字符串?例如,使用类似于snprintf()函数的东西将其写入预先分配的char[]中,然后在对Serial.print()的调用中打印出来。
例如:
char buffer[32];
snprintf(buffer, 32, "%u : %u : %lu", minutes, seconds, m);
Serial.print(buffer);-杰森
发布于 2011-05-09 11:44:58
流式传输库应该做您想做的事情:
Serial << minutes << ":" << seconds << ":" << m;https://stackoverflow.com/questions/5534290
复制相似问题