2017년 7월 6일 목요일

블루투스로 스텝모터 정역회전제어와 FND표시


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(0, 1);

int A = 2;              //L293 연결시작포트
int step_table[4][4] = {
  {1, 0, 0, 1}, {1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 1}
};                         //Full-Step 테이블
int pin = 7;            //FND시작포트
int table[16][7] = {
  {1, 1, 1, 1, 1, 1, 0}, //0
  {0, 1, 1, 0, 0, 0, 0}, //1
  {1, 1, 0, 1, 1, 0, 1}, //2
  {1, 1, 1, 1, 0, 0, 1}, //3
  {0, 1, 1, 0, 0, 1, 1}, //4
  {1, 0, 1, 1, 0, 1, 1}, //5
  {1, 0, 1, 1, 1, 1, 1}, //6
  {1, 1, 1, 0, 0, 1, 0}, //7
  {1, 1, 1, 1, 1, 1, 1}, //8
  {1, 1, 1, 0, 0, 1, 1}, //9
  {1, 1, 1, 0, 1, 1, 1}, //A
  {0, 0, 1, 1, 1, 1, 1}, //B
  {0, 0, 0, 1, 1, 0, 1}, //C
  {0, 1, 1, 1, 1, 0, 1}, //D
  {1, 0, 0, 1, 1, 1, 1}, //E
  {1, 0, 0, 0, 1, 1, 1}  //F
};

void setup()
{
  BTSerial.begin(9600);

  int i;
  for (i = 0; i < 4; i++)
    pinMode(A + i, OUTPUT);
  pinMode(A0, OUTPUT);  //LED1
  pinMode(A1, OUTPUT);  //LED2
  for (i = 0; i < 7; i++)
    pinMode(pin + i, OUTPUT);
}

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

  for (i = 0; i < 50; 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 myDelay1)
{
  int i, j, k;

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

void fnd(int num)
{
  int i, j;
  j = num;
  for (i = 0; i < 7; i++)
    digitalWrite(pin + i, table[j][i]);
}

void loop()
{
  int i, j;
  int inData;

  if (BTSerial.available())
  {
    fnd(0);
    inData = BTSerial.read();
    if (inData == 'A')
    {
      digitalWrite(A1, 0);
      digitalWrite(A0, 1);
      for (i = 0; i < 5; i++)
      {
        CW(10);
        fnd(i + 1);
      }
    }

    if (inData == 'B')
    {
      digitalWrite(A0, 0);
      digitalWrite(A1, 1);
      for (j = 0; j < 4; j++)
      {
        CCW(20);
        fnd(j + 1);
      }
    }
  }

  delay(1000);
}



/*
  #include <SoftwareSerial.h>

  SoftwareSerial BTSerial(0,1);

  int inData;
  int LED1 = A0;

  void setup()
  {
  BTSerial.begin(9600);
  pinMode(LED1,OUTPUT);
  }

  void loop()
  {
    if(BTSerial.available())
    {
      inData = BTSerial.read();
      if (inData == 'A')
        digitalWrite(LED1,HIGH);
      if (inData == 'D')
        digitalWrite(LED1,LOW);

       delay(1000);
      }
  }
*/


댓글 없음:

댓글 쓰기