아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.

왜인지 몰라도 탈조가 있다
마찬가지로 GND로 풀다운된 4개의 스위치에 의해 동작한다.
회로도는 아두이노 홈피에 나온 회로도를 이용


풀브릿지 칩은손쉽게 구할 수 있는 모터 구동용 칩 L298N 을 사용하자.
결선은 소스를 참조.

#include <Stepper.h>

#define    _DEBUG_PRINT_

#define    EN_PIN         (3)
#define    LED_PIN        (13)
#define    MOTOR_INPUT1_PIN      (5)
#define    MOTOR_INPUT2_PIN      (4)
#define    MOTOR_INPUT3_PIN      (6)
#define    MOTOR_INPUT4_PIN      (7)
#define    KEY1_PIN          (10)
#define    KEY2_PIN          (11)
#define    KEY3_PIN          (12)
#define    KEY4_PIN          (9)

const int analogInPin = 0;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;        // value read from the pot
Stepper step1 = Stepper(200,MOTOR_INPUT1_PIN,MOTOR_INPUT2_PIN,MOTOR_INPUT3_PIN,MOTOR_INPUT4_PIN);
short output = 0;
void setup() {
  // initialize serial communications at 9600 bps:
  pinMode(EN_PIN, OUTPUT);     
  pinMode(LED_PIN, OUTPUT);
  
  pinMode(KEY1_PIN,INPUT);
  pinMode(KEY2_PIN,INPUT);
  pinMode(KEY3_PIN,INPUT);
  pinMode(KEY4_PIN,INPUT);

  #ifdef _DEBUG_PRINT_
  Serial.begin(9600); 
  Serial.println("Start step motor contorller ver 0.1 (made by Kim Hyuk)");
  #endif // _DEBUG_PRINT_
}

int outputValue;
unsigned long  t;

int speed_table1[] = {
  10,20,30,40,50,60,70,80,90,100,      //20
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 

  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,90,80,70,60,50,40,30,20,10};          // 200
  
void loop() {
   uint8_t i;
  // read the analog in value:
  t = millis();
  
  if(t % 500 > 200) digitalWrite(LED_PIN,LOW);
  else if(t % 500 < 200) digitalWrite(LED_PIN,HIGH);
  
  if(digitalRead(KEY1_PIN)) { // defaut == 0;
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 1");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    step1.setSpeed(100);
    step1.step(100);
  } else if(digitalRead(KEY2_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 2");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    for(i =0; i< 100;i++) {
      step1.setSpeed(speed_table1[i]);
      step1.step(2);
    }
  } else if(digitalRead(KEY3_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 3");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    for(i =0; i< 100;i++) {
      step1.setSpeed(speed_table1[i]);
      step1.step(-2);
    }
  } else if(digitalRead(KEY4_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 4");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    step1.setSpeed(100);
    step1.step(-100);
  } else {
    digitalWrite(EN_PIN, LOW);
  }
}