게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
저번에 아두이노에 대해 질문을 하였는데 또 질문 좀 부탁하겠습니다 ㅠ
게시물ID : programmer_21631짧은주소 복사하기
작성자 : Solver
추천 : 0
조회수 : 380회
댓글수 : 1개
등록시간 : 2017/11/05 12:07:36
옵션
  • 본인삭제금지
  • 외부펌금지
일단 여러분들의 의견에 따라 아두이노 1개 더 확보 하였구요..

어떻게 하면 윗 부분의 led 1/2 cycle 이 정상적으로 동작하고 밑의 1/2에서 센서달린 스피커가 17.5까지만(시간은 변동 가능) 작동시킬 수 있을 지 궁금합니다.

아두이노 각각 해서 한개는 led, 한개는 센서달린 스피커로만 써서 스피커에만 시간을 17.5초(시간은 변동가능)뒤에 시작하게 해서 17.5초까지만 하게끔 동작 시켜면 되는 걸까요?

그런데 사실 이 밑의 코딩이 맞는지 확신이 안가는 게 문제입니다 ㅠㅠ

전체적인 준비물은 각 led램프가 red4개, green4개 한묶음으로 2개가 있으며 중간에 사용될 센서달린 스피커 한개해서 총 3개가 있습니다.


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


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

두 번째도 마찬가지로 색깔만 다를 뿐 순서와 시간 똑같이 첫 번째의 red4개가 다 켜질때 green4개가 다 켜져있습니다. 첫 번째 red 1개가 10초 뒤 꺼지면 두번째는 동시간대에 green이 1개 10초뒤에 꺼지구요.


이렇게 led램프가 4개 켜졌다가 다 꺼지는 17.5초 뒤에는


3개 전부(led묶음 2개, 센서달린 스피커)다 동시간 대에서 


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

두 번째도 마찬가지로 색깔만 다를 뿐 순서와 시간 똑같이 첫 번째의 red4개가 다 켜질때 green4개가 다 켜져있습니다. 첫 번째 red 1개가 10초 뒤 꺼지면 두번째는 동시간대에 green이 1개 10초뒤에 꺼지구요.


여기까지가 35초 간의 led 1cycle입니다. 다시 위로 돌아가서 17.5초 밑의 17.5초 총 35초를 또 반복하는 거구요.


대신 위랑 다른 점은 밑에는 센서달린 스피커도 동작을 합니다. 


센서는 20cm이내에 물체가 감지되면 "danger"라는 소리를 나게끔 할 것이구요. 밑의 17.5초 간의 동작만 시킬 것입니다. 

 

이후 다시 위로 가서 led만 있는 1/2 cycle, 밑에 센서달린 신호등 포함 1/2cycle 무한 반복이구요..


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


#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초 딜레이

 

}

}


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