輸出的功能是:有加速鍵,減速鍵,啟動停止,按下啟動一個點擊先啟動5秒后第二個電機啟動,按下停止后兩個電機同時停止。
#include <MsTimer2.h>
#include <EEPROM.h>
#define STOP 255
int key1=1;
int key2=2;
int key3=3;
int key4=4;
int btn_start=2;
int btn_stop=3;
int btn_speedup=4;
int btn_speeddown=7;
int pwm1=5;
int pwm2=6;
int pwm3=9;
int pwm4=10;
byte speed_;
byte delay_ms;
bool flag_btn1;
void setup()
{
// delay(100);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(2,INPUT_PULLUP);
pinMode(7,INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
pinMode(12,INPUT_PULLUP);
pinMode(pwm1,OUTPUT);
pinMode(pwm2,OUTPUT);
pinMode(pwm3,OUTPUT);
pinMode(pwm4,OUTPUT);
pinMode(9,OUTPUT);//PWM3
Serial.begin(9600);
delay_ms=EEPROM.read(1);
MsTimer2::set((int)delay_ms*100, onTimer); //設置中斷,每1000ms進入一次中斷服務程序 onTimer()
//
//////////////////////////////////////2-啟動 3-停止 4-加速 5-減速
speed_=EEPROM.read(0);
attachInterrupt( digitalPinToInterrupt(2), start_all, FALLING);
attachInterrupt( digitalPinToInterrupt(3), stop_all, FALLING);
analogWrite(5,STOP);
analogWrite(6,STOP);
analogWrite(9,STOP);
Serial.println(speed_);
Serial.println(delay_ms*100);
delay(100);
flag_btn1=false;
}
///////////////////////////全部停止
void speed_up()
{
if(speed_<=245)
speed_+=10;
analogWrite(6,speed_);
analogWrite(5,speed_);
analogWrite(9,speed_);
delay(100);
while(!digitalRead(4));
}
void speed_down()
{
if(speed_>=10)
speed_-=10;
else
speed_=0;
analogWrite(6,speed_);
analogWrite(5,speed_);
analogWrite(9,speed_);
delay(100);
while(!digitalRead(7));
}
///////////////////////////全部停止
void stop_all()
{
flag_btn1=false;
analogWrite(5,STOP);
analogWrite(6,STOP);
analogWrite(9,STOP);
delay(100);
while(!digitalRead(3));
}
///////////////////////////全部啟動
void start_all()
{
flag_btn1=true;
analogWrite(5,speed_);
analogWrite(9,speed_);
MsTimer2::start();
delay(100);
while(!digitalRead(2));
}
void onTimer()
{
analogWrite(6,speed_);
MsTimer2::stop();
// Serial.print("timer ");
// Serial.println(tick++);
}
void loop()
{
if(digitalRead(4)==LOW)
{
if(speed_<=245)
speed_=speed_+10;
else
speed_=255;
analogWrite(6,speed_);
analogWrite(5,speed_);
analogWrite(9,speed_);
EEPROM.write(0, speed_);
Serial.println(speed_);
delay(100);
while(digitalRead(4)==LOW);
}
if(digitalRead(7)==LOW)
{
if(speed_>=10)
speed_=speed_-10;
else
speed_=0;
analogWrite(6,speed_);
analogWrite(5,speed_);
analogWrite(9,speed_);
EEPROM.write(0, speed_);
Serial.println(speed_);
delay(100);
while(digitalRead(7)==LOW);
}
if(digitalRead(8)==LOW)
{
if(delay_ms<50)
delay_ms++;
else
delay_ms=50;
MsTimer2::set(delay_ms*100, onTimer);
EEPROM.write(1, delay_ms);
Serial.println(delay_ms*100);
delay(100);
while(digitalRead(8)==LOW);
}
if(digitalRead(12)==LOW)
{
if(delay_ms>1)
delay_ms--;
else
delay_ms=0;
MsTimer2::set(delay_ms*100, onTimer);
EEPROM.write(1, delay_ms);
Serial.println(delay_ms*100);
delay(100);
while(digitalRead(12)==LOW);
}
}
|