loops - 如何实现serialEvent和loop同时不中断?

标签 loops serial-port arduino

我一直在研究传感器读取器/齿轮遥控汽车机器人,但我陷入了困境。 我引入了 void Loop() 和 void serialEvent() 作用域。 SerialEvent 获取值、累加并调用其他函数,例如turnRight()、turnLeft() 或reverseGear()。但今天我尝试为汽车制作一个速度显示。但是我发现串行事件中断了连续显示动画。换句话说,我想在serialEvent上连续接收数据,同时我在void循环上成功处理其他连续事件。我附加了我认为可能有问题的代码部分。我使用 Arduino Mega 1280。任何答案将不胜感激。谢谢。

注意:请注意,serialEvent 应连续接收数据(延迟 1 秒)以调整电机的灵敏度。

系列事件就像..

void serialEvent(){
  if ( Serial.available() > 0 ){ 
      int val = Serial.read() - '0'; 
      if(val == 0){ .......................

循环范围就像..

void loop() 
{ 
  displayModule.setDisplayToDecNumber(15, 0, false);
  for(int k =0; k<=7; k++){
    displayModule.setLED(TM1638_COLOR_GREEN, k);
    delay(100);
    ............................

最佳答案

Arduino 论坛的座右铭始终适用:如果您发布整个草图,而不仅仅是您认为问题所在的片段,那么更容易提供帮助。

也就是说,我认为这里存在一个严重的问题:

for(int k =0; k<=7; k++){
    displayModule.setLED(TM1638_COLOR_GREEN, k);
    delay(100);

for 循环实际上会将你的草图暂停至少 800 毫秒。

如果您希望草图能够“多任务”,您必须停止使用延迟()并将您的思维方式从顺序编程转变为基于状态(或事件)的编程。通常的建议是研究“无延迟眨眼”示例。

第二点,我不明白你的意思

I've introduced a void loop()

如果您不编写循环函数,草图首先将无法编译。

关于loops - 如何实现serialEvent和loop同时不中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15012248/

相关文章:

arduino - 使用 arduino 模拟输入

java - 有跨语言标准吗?从串口到C++到Java?

python - 嵌套循环数输出

java - 如何用按钮停止循环?

matlab - 用Matlab自动关闭串口

javax.comm 以及如何修复 java.lang.NoClassDefFoundError

c++ - C++ 中的匿名内部类(Java 风格的监听器)

javascript:我如何创建一个缓慢的for...in循环

javascript - 将 javascript 对象转换为不同的格式

Java串口配置gnu.io.rxtx.properties窗口