// enA頻率控制小車快慢
// in1高 in2低 電機正轉
// in1低 in2高 電機反轉
// in1低 in2低 電機停轉
// 電機1
int enA = 5;
int in1 = 7;
int in2 = 8;
// 電機2
int enB = 6;
int in3 = 9;
int in4 = 10;
//初始化
void setup()
{
// 設置所有的電機引腳爲輸出模式
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
// demo1
void demoOne()
{
// demo1功能:兩電機以各自不同方向,相同速度運行
// 打開電機1,正轉
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// 設置電機轉速200,轉速範圍(0~255)
analogWrite(enA, 200);
// 打開電機2,反轉
digitalWrite(in4, HIGH);
digitalWrite(in3, LOW);
// 設置電機轉速200,轉速範圍(0~255)
analogWrite(enB, 200);
delay(2000);
// 改變電機轉速方向
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in4, LOW);
digitalWrite(in3, HIGH);
//arduino 時間函數
//millis() 獲取機器運行的時間長度, 單位毫秒. 系統最長的記錄時間接近50天, 如果超出時間將從0開始.
// 警告:時間爲 unsigned long類型, 如果用 int 保存時間將得到錯誤結果
//delay(ms) 參數爲unsigned long, 因此在延時參數超過32767(int型最大值)時, 需要用"UL"後綴表示爲無符號長整型
// delay((unsigned long)tdelay * 100UL);
//delayMicroseconds(us) 延時, 單位爲微妙(1毫秒有1000微妙). 如果延時的時間有幾千微妙, 那麼建議使用 delay 函數.
// 目前參數最大支持16383微妙
delay(2000);
// 使電機停止
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// demo2
void demoTwo()
{
// demo2功能:兩電機以各自不同速度運行
// 最大速度取決於電機本身和其兩端電壓
// PWM值通過 analogWrite()寫入 ,爲最大速度的分數
// 打開電機1,反轉
// 打開電機2,反轉
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// 從零到最大速度進行加速
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// 從最大速度到零進行減速
for (int i = 255; i >= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// 使電機停止
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
demoOne(); //先運行demo1
delay(1000);
demoTwo(); //再運行demo2
delay(1000);
}