메이킹 일지 (마무리 완료)/Ammonomicon (完)

Ammonomicon 프로젝트 - 2. 한무 코딩, 음원구하기

  • -

이전 게시글 : https://bker001.tistory.com/112?category=1049458 

 

Ammonomicon 프로젝트 - 1. 재료 파밍, 전선 연결

이번 프로젝트도 상당히 어이없는 시작입니다... 바야흐로 아직 전역하기 2달전,, 저는 기능사 시험때문에 휴가를 나와서 남는 시간동안 3D프린팅 할만한 것들이 대체 무엇이 있을까 굉장히 많은

bker001.tistory.com


 

사실 이제까지의 저는 코딩을 엄청 어렵게 생각한 적이 없었습니다.


왜냐하면 그렇게까지 코딩을 많이 할 프로젝트도 없었고 고도의 기능을 필요로 한 적도 없었기에 특히 그랬습니다...

 

하지만 이번에는 달랐습니다..

 

쪼끔 바꾼

 

 

간단히 생각하더라도 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안에 들어갈 수 있도록 모델링도 짜는 것, 총의 모습을 포토샵으로 그리는 것 정도가 남았겠네요.. 천천히 앞으로 나아가보죠

 

 

이렇게만 완성시키자

 

 

반응형
Contents

포스팅 주소를 복사했습니다!

이 글이 도움이 되었다면 추천 부탁드립니다!