게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
아두이노 코딩하다가 막혔는데 뭐가 문제인지 모르겠습니다ㅠㅠ
게시물ID : programmer_21464짧은주소 복사하기
작성자 : Solver
추천 : 0
조회수 : 717회
댓글수 : 5개
등록시간 : 2017/10/03 08:02:05
옵션
  • 본인삭제금지
  • 외부펌금지

전체 준비물은 a랑 b가 있고 각 led램프가 red4개, green4개가 있으며 중간에 사용될 센서달린 스피커가 있습니다.


제가 원하는 동작을 순서대로 나열하자면


a의 red 4개가 다 켜집니다. 그리고 10초 뒤 red 1개 꺼지구요. 2.5초 뒤 1개가 또 꺼집니다. 이렇게 2.5초 2.5초 지나면 red 램프 4개가 다 꺼집니다. 

b도 마찬가지로 색깔만 다를 뿐 a의 red4개가 다 켜질때 green4개가 다 켜져있습니다. 시간도 똑같이 순차적으로 꺼지구요.


그 다음 3개 전부다 동시간 대에서 


a의 green 4개가 다 켜집니다. 그리고 10초 뒤 green 1개 꺼지구요. 2.5초 뒤 1개가 또 꺼집니다. 이렇게 2.5초 2.5초 지나면 green 램프 4개가 다 꺼집니다. 

b도 마찬가지로 색깔만 다르게 a의 green4개가 다 켜질때 red4개가 다 켜져있습니다. 시간도 똑같게 순차적으로 꺼지구요.

센서달린 스피커도 동작을 합니다. 센서가 20cm이내에 물체가 감지되면 "danger"라는 소리를 낼거구요. 동작 타이밍은 a의 green4개가 다 켜지고 순차적으로 꺼지는 사이와 b의 red4개가 다 켜지고 순차적으로 꺼지는 사이에만 동작을 해야 합니다.


이후 다시 위로 가서 a의 red 4개가 다 켜지고 이를 반복하는 것 입니다.


제가 이번에 아두이노 코딩을 처음 짜봐야 해서 친구에게 일단 물어보면서 해보았습니다..


#include "talkie.h"

Talkie voice;

 

//Danger 음성 데이터

Const uint8_t spDANGER[] PROGMEM = {0x2D, 0xBF, 0x21, 0x92, 0x59, 0xB4, 0x9F, 0xA2, 0x87, 0x10, 0x8E, 0xDC, 0x72, 0xAB, 0x5B, 0x9D, 0x62, 0xA6, 0x42, 0x9E, 0x9C, 0xB8, 0xB3, 0x95, 0x0D, 0xAF, 0x14, 0x15, 0xA5, 0x47, 0xDE, 0x1D, 0x7A, 0x78, 0x3A, 0x49, 0x65, 0x55, 0xD0, 0x5E, 0xAE, 0x3A, 0xB5, 0x53, 0x93, 0x88, 0x65, 0xE2, 0x00, 0xEC, 0x9A, 0xEA, 0x80, 0x65, 0x82, 0xC7, 0xD8, 0x63, 0x0A, 0x9A, 0x65, 0x5D, 0x53, 0xC9, 0x49, 0x5C, 0xE1, 0x7D, 0x2F, 0x73, 0x2F, 0x47, 0x59, 0xC2, 0xDE, 0x9A, 0x27, 0x5F, 0xF1, 0x8B, 0xDF, 0xFF, 0x03};

//출력핀(trig)과 입력핀(echo) 연결 설정

int trigPin = 5;

int echoPin = 4;

float duration, distance, previous;

 

void setup() {

//시리얼 속도설정, trigPin을 출력, echoPin을 입력으로 설정

Serial.begin(9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

 

pinMode(13, OUTPUT); //적색1

pinMode(12, OUTPUT); //적색2

pinMode(11, OUTPUT); //적색3

pinMode(10, OUTPUT); //적색4

pinMode(9, OUTPUT); //청색1

pinMode(8, OUTPUT); //청색2

pinMode(7, OUTPUT); //청색3

pinMode(6, OUTPUT); //청색4

}

 

void loop() {

digitalWrite(13, 1);

digitalWrite(12, 1);

digitalWrite(11, 1);

digitalWrite(10, 1);

digitalWrite(9, 0);

digitalWrite(8, 0);

digitalWrite(7, 0);

digitalWrite(6, 0);

delay(10000); //10초 딜레이

digitalWrite(13, 0);

delay(2500); //2.5초 딜레이

digitalWrite(12, 0);

delay(2500); //2.5초 딜레이

digitalWrite(11, 0);

delay(2500); //2.5초 딜레이

digitalWrite(10, 0);

digitalWrite(9, 1);

digitalWrite(8, 1);

digitalWrite(7, 1);

digitalWrite(6, 1);

 

//초음파를 보낸다. 다 보내면 echo HIGH(신호받기) 상태로 대기

digitalWrite(trigPin, HIGH);

delay(10);

digitalWrite(trigPin, LOW);

// echoPin  HIGH를 유지한 시간을 저장 한다.

duration = pulseIn(echoPin, HIGH);

// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.

// 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.

distance = ((float)(340 * duration) / 10000) / 2;

 

// 20cm 이내에 물체가 감지면

// Danger 나옴

if(distance < 20 ) {

voice.say(spDANGER);

voice.say(spDANGER);

}

delay(40000); //40초 딜레이

digitalWrite(9, 0);

delay(10000); //10초 딜레이

digitalWrite(8, 0);

delay(10000); //10초 딜레이

digitalWrite(7, 0);

delay(10000); //10초 딜레이

 

}

}


얼추 이정도 까지 코딩을 했는데 led a랑 b는 서로 색깔만 달리해서 순차적으로 잘 작동을 하나 센서달린 스피커의 동작 타이밍인 "a의 green4개가 다 켜지고 순차적으로 꺼지는 사이와 b의 red4개가 다 켜지고 순차적으로 꺼지는 사이에만 동작을 합니다." 이 부분이 제 마음대로 되지 않고 danger라는 소리가 안나오거나 저 타이밍 외에도 작동을 하고 있네요.. 하ㅠㅠ


저 위의 코딩에서 수정할 부분이 어딘지 알 수 없을까요?..

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호