스위치로 모드 변경하기

by 장혜민 | 2018-02-13 16:16


스위치를 한번 누르면 모드가 변경되어 한번은 녹음을 하고 한번은 알람 모드로 변경하는 소스코드 입니다.

처음 셋팅은 알람 모드로 되어있습니다.


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
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 5
SoftwareSerial mp3Serial(12, 13);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int REC = 3;
int PLAYE = 6;
 
int Switch = 10;
int previous = HIGH;
int reading;
long time_set =0;
long debounce = 100;
 
int now_time_hour;
int now_time_min;
String inputString = "";
String input_hour1 = "";
String input_min1 = "";
 
int hour1_int = 0;
int min1_int = 0;
 
tmElements_t tm;
 
 
void setup(){
  Serial.begin(9600);
  strip.begin();
  pinMode(REC,OUTPUT);
  pinMode(PLAYE,OUTPUT);
  pinMode(Switch,INPUT_PULLUP);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (15);
  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();
  delay(10);
  for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
    strip.show();
  }
 Serial.println("Alarm Mode");
 
}
 
void loop(){
  int mode = 1;
  reading = digitalRead(Switch);
  
  if(digitalRead(Switch) == LOW&&mode == 0){
    mode = 1;
    Serial.println("Alarm Mode");
    delay(100);
  }
  else if(digitalRead(Switch) == LOW&&mode == 1){
    mode = 0;
    Serial.println("REC Mode");
    delay(100);
  }
  switch(mode){
    case 0 : {
      digitalWrite(REC,HIGH);
      delay(5000);
      digitalWrite(REC,LOW);
      delay(10);
      digitalWrite(PLAYE,HIGH);
      delay(5000);
      digitalWrite(PLAYE,LOW);
      delay(100);
    }
    break;
 
    case 1 : {
      RTC.read(tm);
      if(Serial.available() > 0){
        inputString = Serial.readString();
        if(inputString.charAt(0) == 's'){
          Serial.println("Alarm Setting");
          input_hour1 = inputString.substring(1, 3);
          input_min1= inputString.substring(3, 5);
          hour1_int = input_hour1.toInt();
          min1_int = input_min1.toInt();
          Serial.print("Set Alarm : ");
          Serial.print(hour1_int);
          Serial.print(" . ");
          Serial.println(min1_int);
        }
      }
    now_time_hour = tm.Hour;
    now_time_min = tm.Minute;
     if(now_time_hour == hour1_int && now_time_min == min1_int){
      mp3_single_loop (true);
      mp3_play(1);
      delay(10);
      for (int i = 0; i < 5; i++) {
      strip.setPixelColor(i, strip.Color(255, 255, 255));
      strip.show();}
    }
    else{
      mp3_stop();}
      delay(100);
      }
    
    break;
    
  }
  previous = reading;
  delay(100);
}
 
cs





스위치로 모드를 변경할 수 있습니다.

한번은 RTC이용하여 시리얼창에 's1530' 와 같이 입력시 오후3시 30분에 알람이 울립니다.

다시 스위치를 누르면 모드가 변경되어 5초동안 녹음되고 녹음된 내용이 바로 실행되게 됩니다.

- delay개선중입니다.

단점은 delay동안은 무조건 기다려야 하기 때문에 바로바로 모드를 변경하지 못하고 전체를 한번 실행해야만 변경이 가능 합니다.

댓글 0

MADE BY

엉덩씨 샘플6 다음글 스위치로 모드 변경하기현재글 엉덩씨 샘플5 이전글