ESP8266 x a4988(モータードライバー) x nema 17系ステッピングモータ
ステッピングモータについてきたケーブルの色は適当なので注意
また、今回はケーブルがクロスしており状況に応じて真ん中の二本をクロスせずに接続する場合もある
arduinoと A4998は
pinMode(14,OUTPUT); // Enable D5
pinMode(5,OUTPUT); // Step D1
pinMode(4,OUTPUT); // Dir D2
また、ボタンは下記(ボタンの反対側はグランド)
const int PIN_PUSHBUTTON1 = 12; //D6
const int PIN_PUSHBUTTON2 = 13; //D7
ソースコード
ソースコード2
//https://blog.goo.ne.jp/snagai4500/e/ca8bbfca4c6c7f1c772d129ea5ea4e65
#define PIN_PUSHBUTTON1 2 //d4
#define PIN_LED1 13 //d7
#define PIN_PUSHBUTTON2 0 //d3
#define PIN_LED2 12 //d6
#define DEBOUNCEDELAY1 500
#define DEBOUNCEDELAY2 500
int iState_prev1 = LOW;
unsigned long ulMillis_prev1 = 0;
bool bLedState1 = false;
int iState_prev2 = LOW;
unsigned long ulMillis_prev2 = 0;
bool bLedState2 = false;
int x;
void setup() {
pinMode(14,OUTPUT); // Enable → Arduinoの6番ピンへ // D5
pinMode(5,OUTPUT); // Step → Arduinoの5番ピンへ // SDA
pinMode(4,OUTPUT); // Dir → Arduinoの4番ピンへ // SCL
digitalWrite(14,LOW); // Set Enable low → Low状態でEnable //D5
Serial.begin( 115200 );
pinMode(PIN_PUSHBUTTON1, INPUT);
pinMode(PIN_LED1, OUTPUT);
pinMode(PIN_PUSHBUTTON2, INPUT);
pinMode(PIN_LED2, OUTPUT);
// pinMode(2,OUTPUT); // Dir → Arduinoの4番ピンへ
digitalWrite(PIN_LED1, LOW );
digitalWrite(PIN_LED2, LOW );
}
int cnt_str = 0;
void loop() {
/*
digitalWrite(4,HIGH); // Set Dir High → 回転方向をセット
for(x = 0; x < 200; x++) // 括弧内を200回実行
{
digitalWrite(5,HIGH); // 5番ピンをHigh状態へ
delayMicroseconds(500); // 500ms待って
digitalWrite(5,LOW); // 5番ピンをLow状態へ
delayMicroseconds(500); // 500ms待って
}
delay(1000); // 1秒待つ
digitalWrite(4,LOW); // Set Dir Low → 回転方向を反対方向へセット
for(x = 0; x < 200; x++) // 括弧内を200回実行
{
digitalWrite(5,HIGH); // 5番ピンをHigh状態へ
delayMicroseconds(500); // 500ms待って
digitalWrite(5,LOW); // 5番ピンをLow状態へ
delayMicroseconds(500); // 500ms待って
}
delay(1000); // 1秒待つ
*/
int iState1 = digitalRead(PIN_PUSHBUTTON1); //
if(!iState1 ){
if(cnt_str == 0){
Serial.println("回転方向をセット");
cnt_str = 1;
digitalWrite(4,HIGH); // Set Dir High → 回転方向をセット
}
for(x = 0; x < 200; x++) // Loop 200 times
{
digitalWrite(PIN_LED1, HIGH );
digitalWrite(5,HIGH); // Output high
delay(10); // Wait
digitalWrite(5,LOW); // Output low
delay(100); // Wait
}
Serial.println("Pause");
delay(1000); // pause one second
//digitalWrite(PIN_LED2, LOW );
}else{
digitalWrite(PIN_LED1, LOW );
int iState2 = digitalRead(PIN_PUSHBUTTON2); //ao
if(!iState2 ){
if(cnt_str == 0){
Serial.println("逆回転方向をセット");
cnt_str = 1;
digitalWrite(4,LOW); // Set Dir High → 回転方向をセット
}
for(x = 0; x < 200; x++) // Loop 200 times
{
digitalWrite(PIN_LED2, HIGH );
digitalWrite(5,HIGH); // Output high
delay(10); // Wait
digitalWrite(5,LOW); // Output low
delay(100); // Wait
}
Serial.println("Pause");
delay(1000); // pause one second
// Serial.println("$");
// digitalWrite(PIN_LED2, HIGH );
}else{
digitalWrite(PIN_LED2, LOW );
cnt_str = 0;
}
}
/*
if( LOW == iState_prev1 && HIGH == iState1 )
{ // OFF→ON時
unsigned long ulMillis = millis();
if( DEBOUNCEDELAY1 < (ulMillis - ulMillis_prev1) )
{ // デバウンス時間よりも経過しているならば、正当な「OFF→ON」とみなす
onPress1();
}
ulMillis_prev1 = ulMillis;
}
iState_prev1 = iState1;
int iState2 = digitalRead(PIN_PUSHBUTTON2);
if( LOW == iState_prev2 && HIGH == iState2 )
{ // OFF→ON時
unsigned long ulMillis = millis();
if( DEBOUNCEDELAY2 < (ulMillis - ulMillis_prev2) )
{ // デバウンス時間よりも経過しているならば、正当な「OFF→ON」とみなす
onPress2();
}
ulMillis_prev2 = ulMillis;
}
iState_prev2 = iState2;
*/
}
void onPress1()
{
bLedState1 = !bLedState1;
digitalWrite(PIN_LED1, bLedState1 ? HIGH : LOW );
}
void onPress2()
{
bLedState2 = !bLedState2;
digitalWrite(PIN_LED2, bLedState2 ? HIGH : LOW );
}