【问题标题】:Timer values on serial monitor串行监视器上的计时器值
【发布时间】:2019-08-28 21:26:34
【问题描述】:

我想将变化的值(我在查找表中声明,未在以下示例中显示)与 Arduino 的计时器 0 (TCNT0) 进行比较。

oszi 向我展示的结果,我没有得到我想要的。所以我试图查看计时器值(显然我希望看到 0-255 之间的值)。但是串行监视器向我显示,我只能得到彼此之间存在很大差距的值。

我的问题是:是串行监视器太慢而无法显示所有值,还是我的方法有误?

int PIN11 = 11; 

void setup() 
{
  Serial.begin(9600);
  pinMode(PIN11, OUTPUT);
}

void loop() 
{
  if(TCNT0 < 100)
  {
    digitalWrite(PIN11, HIGH);
  }
  else
  {
    digitalWrite(PIN11, LOW);
  }
  Serial.println(TCNT0);
}

串行监视器返回以下输出:

预期值:0 1 2 3...
实际值:14 30 46 62 78 94 110 130 150 170 190 210 230 250 14 ...

【问题讨论】:

    标签: timer arduino


    【解决方案1】:

    是的,你的 UART 太慢了。
    您的主循环正在尽可能快地运行,并且不要等待 UART 准备好。在Serial.println(TCNT0); 之后等待,直到它准备好。或者在Serial.println(TCNT0);之后放一个小延迟(大约 1 毫秒)
    但是,如果您想查看预期值,只需在循环中增加一个整数值并将其发送到 UART。不要使用计时器值。

    【讨论】:

    • 如何等待 UART 准备就绪?有具体的命令吗?像```延迟(1)```这样的小延迟?增加一个整数值不会帮助我解决我遇到的不同问题
    • 您无法打印计时器的每一个增量,因为 UART 需要更长的时间来打印一个值,然后是计时器步骤。
    • @Hoerbii3,Serial.flush() 会等到 TX 缓冲区为空
    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 2011-05-07
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    相关资源
    最近更新 更多