Arthur1088 发表于 2015-1-27 16:22:00

在循环中如何用按键控制暂停和继续,用的millis()函数控制周期的

本帖最后由 Arthur1088 于 2015-1-27 16:24 编辑

目前在做控制步进电机的实验,正反转各10s,速度控制与周期控制都是基于millis()函数,想用按键控制程序暂停和继续。目前程序里的按键在外部中断时,由于millis()函数始终运行,所以中断时间也算在周期时间内,难点在于比如先运行3s,中断一段时间后如何继续运行剩下的7s,求各位大神帮忙指导一下,不胜感激!!!!!

int CLK1=10;
int DIR1=11;
int key=7;
boolean direct=true;

void setup()
{
pinMode(CLK1,OUTPUT);
pinMode(DIR1,OUTPUT);
pinMode(key,INPUT);
Serial.begin(9600);

}

long interval1 = 1;
long previousMillis1 = 0;
static boolean SteperState1 = HIGH;

boolean key_scan()
{
   if(digitalRead(key) == HIGH)
   {
          delay(10);
          if(digitalRead(key) == HIGH)
             { direct = ! direct;}
         while(digitalRead(key) == HIGH);
      }
      return direct;
}

unsigned long timegap=10000;
unsigned long begintime=0;
int stepstat=1;
void loop()
{            
               
         
            if(!key_scan())
            {
               unsigned long currentMillis1 = millis();
               if(currentMillis1 - previousMillis1 > interval1)
                {
                     previousMillis1 = currentMillis1;   
                     SteperState1 = !SteperState1;
                     digitalWrite(CLK1, SteperState1);
               }

                  unsigned long time=millis();
                  begintime=time;
                  if(time-begintime>=timegap)
                  {
                      begintime=time;
                      stepstat=!stepstat;
                   }
                  if(stepstat==1)
                     digitalWrite(DIR1, LOW);
                  else
                     digitalWrite(DIR1, HIGH);
            }      
            else
               digitalWrite(CLK1, HIGH);
}

爱上即可 发表于 2016-1-10 09:44:56

请问你的问题解决了吗
页: [1]
查看完整版本: 在循环中如何用按键控制暂停和继续,用的millis()函数控制周期的