首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Serial.print()函数输出

使用Serial.print()函数输出
EN

Stack Overflow用户
提问于 2020-11-26 09:13:24
回答 2查看 449关注 0票数 0

这是密码

代码语言:javascript
运行
复制
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(millis());

}

这是输出。

15:26:28.813 -> 0 15:26:28.932 -> 0 15:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 ->0 15:26:28.932->0 15:26:28.932->0 15:26:28.932-> 0 15:26:28.932 -> 0 15:26:28.932 -> 0 15:26:28.932 -> 1 15:26:28.932 -> 1 15:26:28.932 -> 4 15:26:28.932 -> 1 15:26:28.932 -> 1 15:26:28.932 -> 1 15:26:28.932 -> 4 15:26:28.932-> 7: 26 :28.932 -> 10 15:26:26:28.932 -> 14 15:26:28.932 -> 18 15:26:28.932 -> 22 :26:28.932 -> 26:26:28.932 -> 30 15:28.932 -> 34 15:26:28.932 -> 38 15:26:28.932 -> 43 15:26:28.932 -> 47 15:26:28.932 -> 51 15:26:28.932-> 55 15:26:28.959 -> 59 15:26:28.959 -> 64 15:26:28.959 -> 68 15:26:28.959 -> 72 15:26:28.959 -> 76 15:26:28.959 -> 80 15:26:28.990 -> 84 15:26:28.990 -> 89 15:26:28.990 -> 93 15:26:28.990 -> 97 15:26:28.990 -> 101 15:26:28.990-> 106 15:26:28.990 -> 111 15:26:29.029 -> 116 15:26:29.029 -> 121 15:26:29.029 -> 126 15:26:29.029 -> 133 15:26:29.029 -> 138 15:29.029 -> 143 15:26:29.029 -> 148 15:26:29.029 -> 153 15:26:29.064 -> 158 15:26:29.064 -> 163 15:26:29.064-> 168 15:26:29.064 -> 174 15:26:29.064 -> 179 15:26:29.064 -> 184 15:29.064 -> 189 15:26:29.101 -> 195 15:26:29.101 -> 200 15:29.101 -> 205 15:26:29.101 -> 210 15:26:29.101 -> 216 15:26:29.101 -> 221 15:29.101 -> 226 :26:29.101->226:26:29.106-> 231 15:26:29.136 -> 236 15:26:29.136 -> 241 15:26:29.136 -> 246 15:26:29.136 -> 251 15:29.136 -> 257 15:26:29.136 -> 263 15:29.173 -> 268 15:26:29.173 -> 273 15:26:29.173 -> 278 15:26:29.173 -> 283 15:26:29.173 -> 288 15:26:29.173 ->273 15:26:29.173 ->278 15:26:29.173->283:26:29.173->288 15:26:29.173->273 15:26:29.173->278 15:26:29.173->283:26:29.173->288:26:29.173->288:26:29.173->273 15:26:29.173->278 15:26:29.173->283:26:29.173->288:26:29.173->288:26:29.173->273 15:26:29.173->278-> 293 15:26:29.173 -> 299 15:26:29.210 -> 304 15:26:29.210 -> 309 15:26:29.210 -> 314 15:26:29.210 -> 319 15:26:29.210 -> 324 15:29.210 -> 330 15:26:29.210 -> 335 15:26:29.248 -> 340 15:26:29.248 -> 346 15:26:29.248 -> 351 15:26:29.248 ->335 15:26:29.248->340 15:26:29.248->346 15:26:29.248->351 15:26:29.248-> 356 15:26:29.248 -> 361 15:26:29.248 -> 366 15:26:29.248 -> 371 15:26:29.284 -> 376 15:26:29.284 -> 381 15:26:29.284 -> 387 15:26:29.284 -> 392 15:26:29.284 -> 398 15:26:29.284 -> 403 15:26:29.284 -> 408 15:26:29.320 -> 15:26:29.320-> 418 15:26:29.320 -> 423 15:26:29.320 -> 429 15:26:29.320 -> 434 15:26:29.320 -> 439 15:26:29.320 -> 444 15:26:29.354 -> 449 15:26:29.354 -> 454 15:26:29.354 -> 459 15:26:29.354 -> 465 15:26:29.354 -> 471 15:26:29.354 -> 476 15:26:29.354->459 15:26:29.354->471 15:26:29.354->476 15:26:29.387-> 481 15:26:29.387 -> 486 15:26:29.387 -> 491 15:26:29.387 -> 496 15:26:29.387 -> 501 15:29.387 -> 506 15:26:29.387 -> 512 15:29.422 -> 517 15:26:29.422 -> 522 15:26:29.422 -> 528 :26:29.422 -> 533 15:26:29.422 -> 538 15:26:29.422 ->522 15:26:29.422 ->533 15:26:29.422 ->538 15:26:29.422-> 543 15:26:29.422 -> 548 15:26:29.456 -> 553 15:26:29.456 -> 559 15:26:29.456 -> 564 15:26:29.456 -> 569 15:26:29.456 -> 574 15:26:29.456 -> 579 15:26:29.492 -> 584 15:26:29.492 -> 589 15:26:29.492 -> 595 15:26:29.492 -> 601 15:26:29.492 ->584 15:26:29.492->589 15:26:29.492->595 15:26:29.492->601 15:26:29.492->584 15:26:29.492->589 15:26:29.492->595 15:26:29.492->601 15:26:29.492-> 606 15:26:29.492 -> 611 15:26:29.492 -> 616 15:26:29.529 -> 621 15:26:29.529 -> 626 15:26:29.529 -> 631 15:26:29.529 -> 636 15:29.529 -> 642 15:26:29.529 -> 647 15:26:29.529 -> 652 15:26:29.567 -> 657 :26:29.567 -> 663 15:26:29.567 ->647 15:26:29.529 ->652 15:26:29.567 ->657:26:29.567->663 15:26:29.567-> 668 15:26:29.567 -> 673 15:26:29.567 -> 678 15:26:29.567 -> 684 15:26:29.567 -> 689 15:26:29.602 -> 694 15:26:29.602 -> 699 15:26:29.602 -> 704 15:26:29.602 -> 709 15:26:29.602 -> 714 15:26:29.602 -> 719 :26:26:29.602 -> 724 15:26:29.638-> 731 15:26:29.638 -> 736 15:26:29.638 -> 741 15:26:29.638 -> 746 15:26:29.638 -> 751 15:26:29.638 -> 756 15:26:29.638 -> 761 15:26:29.672 -> 766 15:26:29.672 -> 772 15:26:29.672 -> 777 15:26:29.672 -> 782 15:26:29.672 -> 787 15:26:29.672 ->772 15:26:29.672->777 15:26:29.672->782 15:26:29.672->787 15:26:29.672-> 792 15:26:29.672 -> 798 15:26:29.706 -> 803 15:26:29.706 -> 808 15:26:29.706 -> 814 15:26:29.706 -> 819 15:26:29.706 -> 824 :26:29.706 -> 829 15:26:29.742 -> 834 15:26:29.742 -> 839 15:26:29.742 -> 844 15:26:29.742 -> 849 15:26:29.742 -> 855

我正在尝试开发一个算法,有和不使用一个巨大的数组来存储三轴加速度数据,以计算在任何一个轴上行驶的距离。这是我能得到的最精确的时间吗?这个输出一点也不准确。我用错了吗?为什么这个定时输出是在这些间隔之后?我在哪里能找到更多关于这件事的资料?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-26 09:36:06

,这是我能得到的最精确的时间和Arduino?

还有micros()。请注意,准确性不是分辨率。

我用错了吗?

不是的。

为什么这个定时输出在这些间隔之后?

millis()的输出仅放在内部缓冲区中。在伪码中,它的工作方式一般如下:

代码语言:javascript
运行
复制
char internal_buffer[SOME_SIZE];
void Serial::println(SOME_TYPE stuff) {
     if (internal_buffer_is_full()) {
          // actively wait for at least space for stuff to place
          internal_buffer_wait_for_space_for_stuff(stuff);
     }
     internal_buffer += stuff; // just add the data to internal buffer
     if (!hardware::is_writing()) {
           hardware::start_writing(internal_buffer); // writes __asynchronously__!
     }
}

首先它都被缓冲了。然后,asynchronously将缓冲区写入输出,主线程继续其操作。当缓冲区已满时,主线程在将要写入的数据放入缓冲区之前,会主动等待缓冲区中至少有一些空间。预计您将看到短的“刷新”,其中缓冲的输出被输出了一点点,然后缓冲继续进行。

如果您想要刷新缓冲的数据,可以使用Serial.flush()

票数 0
EN

Stack Overflow用户

发布于 2020-11-26 22:45:55

您的测试主要是由USB串行通信的性能、粒度和不确定的时序决定的,而不是millis()的精确性也是由连接的PC提供的,它不是一个实时系统,具有自己的缓冲行为只会增加另一个变量。

millis()micros()都和你板上的时钟源一样精确,一个典型的晶体振荡器好到50 2ppm或0.005%,陶瓷谐振器可能是0.5%,而一个典型的TCXO大约是2 2ppm(0.0002%)。

在调用这些函数之间执行的任何代码都需要时间,诸如将println()输出到USB /ACM系列并在PC上捕获的操作将特别不确定。

如果您真的想确认精度,您应该使用更快、更确定的输出,例如数字IO,并对引脚进行范围设置。例如:

代码语言:javascript
运行
复制
void setup() 
{
  pinMode(2, OUTPUT);
}

void loop() 
{
  digitalWrite( 2, millis() & 1 ) ;
}

这将在500赫兹,1:1占空比(1ms低: 1ms高)时切换引脚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65019043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档