//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 ); }