2017년 6월 22일 목요일

배열이용 CW,CCW함수로 제어


int A = 8;
int preSW = 0;
int STATUS = 0;
int step_table[4][4] = {
  {1, 0, 0, 1}, {1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 1}
};

void setup()
{
  int i;
  for (i = 0; i < 4; i++)
    pinMode(A + i, OUTPUT);
  pinMode(6, INPUT);  //SW1
  pinMode(7, INPUT);  //SW2
  pinMode(12, OUTPUT);  //LED1
  pinMode(13, OUTPUT);  //LED2
}

void CW(int rota, int myDelay)
{
  int i, j, k;

  for (i = 0; i < 50 * rota; i++)
  {
    for (j = 0; j < 4; j++)
    {
      for (k = 0; k < 4; k++)
        digitalWrite(A+k, step_table[j][k]);
      delay(myDelay);
    }
  }
}

void CCW(int rota1, int myDelay1)
{
  int i, j, k;

  for (i = 0; i < 50 * rota1; i++)
  {
    for (j = 0; j < 4; j++)
    {
      for (k = 0; k < 4; k++)
        digitalWrite(A+k, step_table[3-j][k]);
      delay(myDelay1);
    }
  }
}

void loop()
{
  int SW1 = digitalRead(6);

  if (SW1 != preSW)
  {
    if (SW1 == 1)
    {
      STATUS++;
      STATUS = STATUS % 2;

      if (STATUS == 1)
      {
        digitalWrite(12, 1);
        CW(3, 10);
        digitalWrite(12, 0);
      }
      else if (STATUS == 0)
      {
        digitalWrite(13, 1);
        CCW(2, 20);
        digitalWrite(13, 0);
      }
    }
    preSW = SW1;
  }
}


댓글 없음:

댓글 쓰기