아두이노 배열 저장 후 동작 질문입니다.

얼마 전에 질문을 해서 답변을 해주신 것을 토대로 어느정도 구현을 해보고 있는데 큐 표현쪽 부분이 이해가 정확하게 되지 않아 헤메고 있습니다...

#define FORWARD 1
#define BACKWARD 2
#define LEFT 3
#define RIGHT 4
#define MAX 10

const int buttonPin0 = 7; //시작 버튼
const int buttonPin1 = 8; //앞 버튼
const int buttonPin2 = 9; //뒤 버튼
const int buttonPin3 = 10; // 오른쪽버튼
const int buttonPin4 = 11; // 왼쪽버튼

const int in1pin = 2; //왼쪽모터
const int in2pin = 3; //왼쪽모터
const int in3pin = 4; //오른쪽모터
const int in4pin = 5; //오른쪽모터

int buttonStateOK = 1;
int buttonStateGO = 1;
int buttonStateBACK = 1;
int buttonStateLEFT = 1;
int buttonStateRIGHT = 1;
int queue_array[MAX];
int rear = 0;   //Position to write
int front = -1;//Position to read

int nextPosition(int position) {
  return (position + 1) % MAX;
}

void insert(int add_item)
{
  if (queue_array[rear] == BLANK)
  {
    if (front == -1)
    {
      front = 0;
    }
    queue_array[rear] = add_item;
    rear = nextPosition(rear);
    printf("insert %d\n", add_item);
  }
  else {
    printf("insert %d ignored\n", add_item);
  }
}
int read() {
  if (front >= 0) {
    if (queue_array[front] != BLANK) {
      int ret = queue_array[front];
      queue_array[front] = BLANK;
      front = nextPosition(front);
      return ret;
    }
  }
  return BLANK;
}
void reset() {
  rear = 0;
  front = -1;
  for (int i = 0; i<MAX; i++) {
    queue_array[i] = BLANK;
  }
}

void setup() {
  int queue_array[MAX];
  pinMode(buttonPin0, INPUT_PULLUP);
  pinMode(buttonPin1, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  pinMode(buttonPin3, INPUT_PULLUP);
  pinMode(buttonPin4, INPUT_PULLUP);
  pinMode(buttonPin5, INPUT_PULLUP);
  pinMode(in1pin, OUTPUT);
  pinMode(in2pin, OUTPUT);
  pinMode(in3pin, OUTPUT);
  pinMode(in4pin, OUTPUT);
}

void loop() {
  // 버튼(들) 상태 읽기
  buttonStateOK = digitalRead(buttonPin0);
  buttonStateGO = digitalRead(buttonPin1);
  buttonStateBACK = digitalRead(buttonPin2);
  buttonStateLEFT = digitalRead(buttonPin3);
  buttonStateRIGHT = digitalRead(buttonPin4);
  buttonStateSTART = digitalRead(buttonPin5);

  if (buttonStateGO == LOW) {
    insert(FORWARD);
  }
  else if (buttonStateBACK == LOW) {
    insert(BACKWARD);
  }
  else if (buttonStateLEFT == LOW) {
    insert(LEFT);
  }
  else if (buttonStateRIGHT == LOW) {
    insert(RIGHT);
  }
  else if (buttonStateOK == LOW) {
    while (read() != BLANK) {
      if (read() == FORWARD) {
        // 모터 동작 - 전진
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, LOW);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, LOW);
        delay(1500);
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, HIGH);
      } else if (read() == BACKWARD) {
        // 모터 동작 - 후진.
        digitalWrite(in1pin, LOW);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, LOW);
        digitalWrite(in4pin, HIGH);
        delay(2000);
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, HIGH);
      } else if (read() == LEFT) {
        // 모터 동작 - 왼쪽
        digitalWrite(in1pin, LOW);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, LOW);
        delay(995);
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, HIGH);
      } else if (read() == RIGHT) {
        // 모터 동작 - 오른쪽
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, LOW);
        digitalWrite(in3pin, LOW);
        digitalWrite(in4pin, HIGH);
        delay(995);
        digitalWrite(in1pin, HIGH);
        digitalWrite(in2pin, HIGH);
        digitalWrite(in3pin, HIGH);
        digitalWrite(in4pin, HIGH);
      }
    }
    reset();
  }
}

조언부탁드립니다.

1답변

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.