아두이노 배열 저장 후 동작 질문입니다.
조회수 1748회
얼마 전에 질문을 해서 답변을 해주신 것을 토대로 어느정도 구현을 해보고 있는데 큐 표현쪽 부분이 이해가 정확하게 되지 않아 헤메고 있습니다...
#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 답변
-
우선 큐에 대해서 이해가 필요하실것 같습니다.
입력 값을 가지고 있다가 하나씩 빼서 쓰기 위해 큐를 사용하는건데요. 다음 링크를 참고하세요.
http://www.logonluv.com/2015/02/datastructure-queue.html?m=1
지난번에 올려드린 코드는 배열로 간단한 순환큐를 만든겂니다.
댓글 입력