캡틴지저스 소스파일 입니다.

by 장혜민 | 2018-01-23 14:26
아두이노

재료

  • Arduino Nano 1개
  • DFPlayer 1개
  • RTC 1개

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
 
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
 
#ifdef __AVR__
#include <avr/power.h>
#endif
 
#define PIN 6
 
SoftwareSerial mySerial(12, 13); // RX, TX
SoftwareSerial btSerial(7, 8); // RX, TX
Adafruit_NeoPixel strip = Adafruit_NeoPixel(7, PIN, NEO_GRB + NEO_KHZ800);
tmElements_t tm;
 
int count = 0;
int red = 0;
int green = 0;
int blue = 0;
int light = 0;
int auto_mode = 1;
int play_mode = 0;
int date = 0;
int getmon = 0;
char x;
float s_time;
float n_time;
float dt;
int get_month = 0;
int number = 0;
int mp3_play_num = 0;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mySerial.begin(9600);
  btSerial.begin(9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
  delay(10);  //wait 1ms for mp3 module to set volume
  Serial.println("Captine Jesus");
 
  RTC.read(tm);
  Serial.print(tmYearToCalendar(tm.Year));
  Serial.print("/");
  Serial.print(tm.Month);
  Serial.print("/");
  Serial.print(tm.Day);
  Serial.print("/");
  Serial.print(tm.Hour);
  Serial.print("/");
  Serial.print(tm.Minute);
  Serial.print("/");
  Serial.println(tm.Second);
 
  mp3_stop();
  mp3_set_volume (30);          // value 0~20
  mp3_single_loop (true);
  for (int i = 0; i < 7; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
    strip.show();
  }
}
 
void loop() {
  
  RTC.read(tm);
  date = tm.Day;
  get_month = tm.Month;
  switch(get_month){
    case 1 : number = 0;break;
    case 2 : number = 31;break;
    case 3 : number = 60;break;
    case 4 : number = 91;break;
    case 5 : number = 121;break;
    case 6 : number = 152;break;
    case 7 : number = 182;break;
    case 8 : number = 213;break;
    case 9 : number = 244;break;
    case 10 : number = 274;break;
    case 11 : number = 305;break;
    case 12 : number = 335;break;
    default : number = 0;break;
  }
  
  x = btSerial.read();
  
  if(x == 'a') {auto_mode = 1;}
  if(x == 'b') {auto_mode = 0;}
  
  if(auto_mode == 1) {  // auto mode
    light = analogRead(A0);
    delay(10);
 
    if(light > 400) {
      if(play_mode == 0 && count == 0) {
       adjust_fun(30,255,255,255);
       mp3_single_loop(true);
       mp3_play_num = date + number;
       mp3_play(mp3_play_num);
        s_time = millis();
        play_mode = 1;
        count = 1;
      } else {
        int dv;
        int dc;
        
        n_time = (millis()-s_time)/1000;
 
        if(n_time < 3700) {
          if(n_time-dt > 14) {
            dv = map(n_time, 0, 3600, 30, 0);
            dc = map(n_time, 0, 3600, 255, 0);
 
/*                  Serial.print(millis());
                  Serial.print(" / ");
                  Serial.print(s_time);
                  Serial.print(" / ");
                  Serial.println(n_time);
                  Serial.print(dv);
                  Serial.print(" / ");
                  Serial.println(dc);
*/
 
            adjust_fun(dv,dc,dc,dc);
            dt = millis()/1000;
          }
        } else {
          mp3_stop();
          adjust_fun(0,0,0,0);
          play_mode = 0;
          count = 0;
        }
      }
      
    } else {
      mp3_stop();
      adjust_fun(0,0,0,0);
      play_mode = 0;
      count = 0;
    }
  }
  
  if(auto_mode == 0) {   //not auto mode
    if(x == '1') {
      mp3_play(date);
      adjust_fun(30,255,255,255);
    }
 
    if(x == '2') {
      adjust_fun(26,210,210,210);
    }
 
    if(x == '3') {
      adjust_fun(22,170,170,170);
    }
 
    if(x == '4') {
      adjust_fun(18,130,130,130);
    }
 
    if(x == '5') {
      adjust_fun(14,75,75,75);
    }
 
    if(x == '6') {
      adjust_fun(10,20,20,20);
    }
 
    if(x == '7') {
      adjust_fun(0,0,0,0);
      mp3_stop();
      count = 0;
    }
  }
  
  x='z';
 
  delay(100);
}
 
void adjust_fun(int a, int b, int c, int d)
{
  mp3_set_volume (a);  
  for (int i = 0; i < 7; i++) {
    strip.setPixelColor(i, strip.Color(b, c, d));
    strip.show();
  }
}
 
cs


RTC를 이용하여 시간을 받아온 후 월에 따라 숫자 보정을 해준 후 날짜에 맞는 mp3파일을 재생하는 소스코드 입니다.  불이 꺼지면 자동으로 mp3가 반복하여 재생됩니다.


댓글 0

MADE BY

HELP ME!

DFplayer 관련 SD카드 안에 파일을 만들고 재생하는 경우 mp3_play_file_in_folder(folder,number)을 사용하려고 하는데 이 함수가 아예작동이 안됩니다 ㅠㅠ 어떻게 사용해야하는지 알 수 있을 까요?

답하기
캡틴지저스 소스파일 입니다.현재글