|
|
本帖最后由 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);
} |
|