2017-07-18 52 views
1

在我的程序中,我通过蓝牙从我在麻省理工应用发明者创建的应用上显示OLED的时间。在显示时间串的同时,我正在使用函数从'Sparkfun APDS9660手势传感器'搜索'Up'手势。一旦我做了'向上'手势,我想清除显示并显示字符串“相机”。我希望它在完成任务时保留在“摄像头”功能中(代码中),直到我做出一个向下的手势以返回显示“时间”功能。重复一个函数直到指定的动作(Aruino IDE)

void handleGesture() { 
    if (apds.isGestureAvailable()) 
    { 
    if(DIR_UP) 
    { 
     Serial.println("UP"); 
     Serial.println("Camera"); 
     display.setTextSize(1); 
     display.setTextColor(WHITE); 
     display.setCursor(0,20); 
     display.println("Camera"); 
     display.display(); 
     Q = 0; 

     while(Q == 0) 
     { 
     if (DIR_RIGHT) 
     { 
      digitalWrite(13, HIGH); 
      delay(1000);    
      digitalWrite(13, LOW); 
      delay(1000); 
     } 

     if (DIR_LEFT) 
     { 
      digitalWrite(12, HIGH); 
      delay(1000);    
      digitalWrite(12, LOW); 
      delay(1000); 
     } 

     if (DIR_DOWN) 
     { 
      break; 
     } 
     } 
    } 
    } 
} 

我想用'while循环'重复代码,然后'休息'退出代码。如果有人知道更好的解决方案,请评论。

感谢所有回复的

+0

另请参阅http://forum.arduino.cc/index.php?topic=490075 – per1234

回答

0

我没有使用过这种特殊的传感器,所以我不能不管你是正确的阅读姿势发表评论。

我假设你是,handleGesture()充当传感器引发的中断的事件处理程序。在处理程序中,比whilebreak更好的解决方案是让程序处于几个明确的状态之一(比如'camera mode'和'time mode')。

手势处理程序只是在它们之间切换,而实际的逻辑将在loop(或特定于模式的功能,如预期)中进行。

这基本上使你的程序变成一个状态机。例如:

enum mode { 
    camera, 
    time 
}; 

mode currentMode; 

void loopCamera() { 
    // 'Camera mode' code goes here 
} 

void loopTime() { 
    // 'Time mode' code goes here 
} 

void setup() { 
    // Set initial mode 
    currentMode = time; 

    // Other setup follows... 
} 

void loop() { 
    switch (currentMode) { 
     case camera: 
      loopCamera(); 
      break; 
     case time: 
      loopTime(); 
      break; 
    } 
} 

void handleGesture() { 
    if (apds.isGestureAvailable()) { 
     if (DIR_UP) { 
      // Insert one-time code for switching to camera mode here 
      currentMode = camera; 
     } else if (DIR_DOWN) { 
      // Insert one-time code for switching to time mode here 
      currentMode = time; 
     } 
    } 
} 

这是最好把所有的程序逻辑的处理程序,因为它清楚地分开不同的功能正在做的事情(的处理程序处理的手势,交换程序的模式),可以更容易地添加功能(模式等)。

+0

@ Aidan.Thank您对代码的建议。我写了它,但它仍然没有按计划运作。我猜它与中断有关。但是图片和视频重复闪烁(不用刷卡),时间显示一秒钟,然后消失约1秒钟,然后再次显示。我仍然在做错事。 –

+0

我会把代码放在答案中,因为它的评论很大。 –

相关问题