为什么在中断里面读取编码器脉冲数只能读取一小段,在loop里面显示就可以一直读取
为什么在中断里面用Serial monitor读取编码器脉冲数只能读取一小段,在loop里面用Serial monitor 就可以一直读取程序:
int state;
volatile unsigned int count=0;
void setup()
{Serial.begin(9600);
pinMode(2,INPUT);
attachInterrupt(0,then,CHANGE);}
void loop()
{Serial.println(count);
}
void then()
{count++;}
这个我拨动电机,监视器里脉冲数数据会改变。
int state;
volatile unsigned int count=0;
void setup()
{Serial.begin(9600);
pinMode(2,INPUT);
attachInterrupt(0,then,CHANGE);}
void loop()
{}
void then()
{count++;
Serial.println(count);}
这个只有第一次拨动电机,监视器里面脉冲数才会有变化。 在中断程序内 "原则上" 不可以用 Serial.print
因为会来不及 !
你可以先改 Serial.begin(115200); 看看
如果仍无法持续打印, 那就是来不及!
如果没问题, 那就用吧 !
说明:
当你波特率 9600, 每秒钟只能印出大约 888 char (理论 960 char)
所以 1ms 只能印 不到 1 char
如果你的中段每 5 ms 来一次,
你在中断内用 Serial.print( )印 3 char 大概没问题
如果把波特率提高 Serial.begin(115200);
则每 1ms 可印大约 9 char
这时如果你的 Interrupt 每 1ms 来一次,
用 Serial.print 应该还可以 !
由于 Serial.print 要靠另一个中断来帮忙把字符串真的送出,
当中断被禁止(在 中断程序内, 中断自断禁止!)
但当 Interrupt 来太快,
因为 Serial.print 来不及打印就会回不来
(就是不会执行 Serial.print( ) 下面那行啦)
tsaiwn 发表于 2015-4-13 22:55 static/image/common/back.gif
在中断程序内 "原则上" 不可以用 Serial.print
因为会来不及 !
谢谢分享学习一下
页:
[1]