Ammonomicon 프로젝트 - 2. 한무 코딩, 음원구하기
- -
이전 게시글 : https://bker001.tistory.com/112?category=1049458
사실 이제까지의 저는 코딩을 엄청 어렵게 생각한 적이 없었습니다.
왜냐하면 그렇게까지 코딩을 많이 할 프로젝트도 없었고 고도의 기능을 필요로 한 적도 없었기에 특히 그랬습니다...
하지만 이번에는 달랐습니다..
간단히 생각하더라도 DFplayer, 스위치, RFID 모듈 이렇게 3개가 같이 작동되어야 하기에 공부를 좀 더 많이 해야하는 부분입니다,, 제가 원하는 기능을 설명드리겠습니다.
1. 'A'라는 RFID 카드를 가져다가 대고, 스위치를 누르면 A에 배당된 소리가 나옵니다.
2. 이때 한 번 더 누르면 다른 소리가 있는 총기일경우에는 A에 포함된 다른 소리가 나옵니다.
3. 동일하게 10종류 정도의 A~J의 총기종류가 있고 소리또한 다릅니다.
3. 등록되어지지 않은 RFID를 이용하여도 소리는 나지 않습니다.
4. 스위치만 눌렀을 때도 소리는 나지 않습니다.
정말 많은 일이 있었습니다... 순수히 30시간정도 쓴 것 같네요.
이걸 하나하나 어떤 시도를 했는지 해석하는 게 나을지, 아니면 그냥 마지막 결론만 말씀드리면 될지 고민이 되는데 마지막에 사용한 코드만 말씀드리겠습니다.
#include "DFRobotDFPlayerMini.h"
#include "SoftwareSerial.h"
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10 // spi 통신을 위한 SS핀 설정
#define RST_PIN 9 // 리셋 핀 성정
MFRC522 rfid(SS_PIN, RST_PIN); // rfid라는 이름으로 클라스 객체 선언
SoftwareSerial mySoftwareSerial (5, 6);
DFRobotDFPlayerMini myDFPlayer;
int buttonPin = 2;
int Facemelter = 0; // 페이스멜터 배정 1,2,3번
int Windupgun = 0; // 태엽총 4,5,6번
// 유니콘 7번
int Yari = 0; // 야이리 8, 9, 10, 11, 12번
int Lute = 0; // 류트 13, 14번
int RickRolled = 0; // 릭롤링 15번
int Rad = 0; // 라드건 16, 17, 18, 19, 20, 21, 22, 23, 24, 25번
int NSS = 0; // 나성스페샬 26, 27, 28, 29, 30, 31, 32, 33, 34, 35. 36, 37, 38, 39, 40, 41, 42번
void setup () {
pinMode(buttonPin, INPUT); // 스위치 연결
digitalWrite(buttonPin, HIGH); // 스위치 풀업, 풀다운 저항 설정
mySoftwareSerial.begin(9600);
myDFPlayer.begin(mySoftwareSerial); // DFplayer 설정
myDFPlayer.volume(20); // 볼륨 1~30
// myDFPlayer.play(1); 0001번을 재생, 이번 프로젝트에서는 사용 X
// delay(3500); 3.5초간 재생
Serial.begin(9600);
SPI.begin(); // SPI 통신 시작
rfid.PCD_Init(); // MFRC522를 초기화
Serial.println("Approximate your card to the reader..");
Serial.println();
}
void loop () {
boolean play_state = digitalRead(2); // Pin2가 나와 연결
if (! rfid.PICC_IsNewCardPresent())
{
return;
}
if (! rfid.PICC_ReadCardSerial())
{
return;
}
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < rfid.uid.size; i++) // RFID 설정 값
{
Serial.print(rfid.uid.uidByte[i] < 0x10 ? "0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
content.concat(String(rfid.uid.uidByte[i] < 0x10 ? "0" : " "));
content.concat(String(rfid.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "6A 3C 84 1E" && play_state == HIGH){ // 페이스멜터
Facemelter++;
switch(Facemelter % 3){
case 0:
myDFPlayer.play(1);
delay(100);
break;
case 1:
myDFPlayer.play(2);
delay(100);
break;
case 2:
myDFPlayer.play(3);
delay(100);
break;
}
}
else if (content.substring(1) == "6A 42 7C 1E" && play_state == HIGH){ // 태엽총
Windupgun++;
switch(Windupgun % 4){
case 0:
myDFPlayer.play(4);
delay(1600);
break;
case 1:
myDFPlayer.play(5);
delay(1600);
break;
case 2:
myDFPlayer.play(4);
delay(1600);
break;
case 3:
myDFPlayer.play(6);
delay(1600);
break;
}
}
else if (content.substring(1) == "99 12 34 E5" && play_state == HIGH){ // 유니콘 총
myDFPlayer.play(7);
delay(2000);
}
else if (content.substring(1) == "7A ED 4F 1E" && play_state == HIGH){ // 야이리 발사기
Yari++;
switch(Yari % 14){
case 0:
myDFPlayer.play(8);
delay(200);
break;
case 1:
myDFPlayer.play(10);
delay(200);
break;
case 2:
myDFPlayer.play(9);
delay(200);
break;
case 3:
myDFPlayer.play(11);
delay(200);
break;
case 4:
myDFPlayer.play(9);
delay(200);
break;
case 5:
myDFPlayer.play(8);
delay(200);
break;
case 6:
myDFPlayer.play(10);
delay(200);
break;
case 7:
myDFPlayer.play(9);
delay(200);
break;
case 8:
myDFPlayer.play(11);
delay(200);
break;
case 9:
myDFPlayer.play(8);
delay(200);
break;
case 10:
myDFPlayer.play(11);
delay(200);
break;
case 11:
myDFPlayer.play(9);
delay(200);
break;
case 12:
myDFPlayer.play(10);
delay(200);
break;
case 13:
myDFPlayer.play(12);
delay(1400);
break;
}
}
else if (content.substring(1) == "7A06 86 1E" && play_state == HIGH){ // 류트
Lute++;
switch(Lute % 2){
case 0:
myDFPlayer.play(13);
delay(4000);
break;
case 1:
myDFPlayer.play(14);
delay(4000);
break;
}
}
else if (content.substring(1) == "7A 42 20 1E" && play_state == HIGH){ // 릭롤링
myDFPlayer.play(15);
delay(2000);
}
else if (content.substring(1) == "7A D0 B9 1E" && play_state == HIGH){ // 라드건
Rad++;
switch(Rad % 10){
case 0:
myDFPlayer.play(16);
delay(1000);
break;
case 1:
myDFPlayer.play(17);
delay(1000);
break;
case 2:
myDFPlayer.play(18);
delay(1000);
break;
case 3:
myDFPlayer.play(19);
delay(1000);
break;
case 4:
myDFPlayer.play(20);
delay(1000);
break;
case 5:
myDFPlayer.play(21);
delay(1000);
break;
case 6:
myDFPlayer.play(22);
delay(1000);
break;
case 7:
myDFPlayer.play(23);
delay(1000);
break;
case 8:
myDFPlayer.play(24);
delay(1000);
break;
case 9:
myDFPlayer.play(25);
delay(1000);
break;
}
}
else {
}
}
길죠,,,? 추가로 DFplayer에 음원이 필요로 합니다. 원하는 음원을 구하러 다녀야,,,겠죠,,?
대부분의 소리는 https://www.sounds-resource.com/nintendo_switch/enterthegungeon/ 이곳에서 다운 받을 수 있었습니다.
그리고 추가적인 라드건과 소리를 바꿔야하는 음성들은 작업을 해주기도 했습니다.
결과 영입니다.
이제 남은건 더 간단하게 회로도 다시 만들고, Ammonomicon안에 들어갈 수 있도록 모델링도 짜는 것, 총의 모습을 포토샵으로 그리는 것 정도가 남았겠네요.. 천천히 앞으로 나아가보죠
'메이킹 일지 (마무리 완료) > Ammonomicon (完)' 카테고리의 다른 글
Ammonomicon 프로젝트 - 6. 행복한 나성님의 리액션 (2) | 2021.10.18 |
---|---|
Ammonomicon 프로젝트 - 5. 최종 조립 및 마무리 (0) | 2021.10.17 |
Ammonomicon 프로젝트 - 4. 두 번째 데코레이션 (0) | 2021.10.05 |
Ammonomicon 프로젝트 - 3. 회로 정리 및 케이스 모델링, 데코레이션 (0) | 2021.09.20 |
Ammonomicon 프로젝트 - 1. 재료 파밍, 전선 연결 (0) | 2021.09.11 |
소중한 추천 감사합니다!