-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrigger.ino
174 lines (154 loc) · 3.79 KB
/
trigger.ino
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
#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// LCD Pannel buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int sound = 0;
int soundmax = 0;
int sens = 0; //sensor treshold
int lags = 0; //trigger delay
int menu = 1;
char numer[5];
void setup() {
Serial.begin(9600); //debug serial connection
lcd.begin(16, 2);
lcd.setCursor(0, 0);
//Flash trigger pin
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
//Read settings from EEPROM
EEPROM.get(0, sens);
if (sens > 1000 || sens < 0) sens = 500;
EEPROM.get(10, lags);
}
void loop() {
digitalWrite(2, LOW);
lcd_key = read_LCD_buttons();
//button actions
switch (lcd_key) {
case btnRIGHT: {
if (menu < 4) menu++; else menu = 1;
break;
}
case btnLEFT: {
if (menu > 1) menu--; else menu = 4;
break;
}
case btnUP: {
if (menu == 1) sens = sens + 10;
if (menu == 2) lags = lags + 1;
break;
}
case btnDOWN: {
if (menu == 1) sens = sens - 10;
if (menu == 2) lags = lags - 1;
break;
}
case btnSELECT: {
if (menu == 3) stat();
if (menu == 4) wait(sens, lags);
break;
}
case btnNONE: {
break;
}
}
//settings roll over
if (sens > 1000) sens = 0;
if (sens < 0) sens = 1000;
if (lags < 0) lags = 0;
//draw screen
lcd.setCursor(0, 0);
lcd.print("sens delay");
lcd.setCursor(12, 0);
lcd.print("?");
lcd.setCursor(15, 0);
lcd.print(">");
lcd.setCursor(1, 1);
sprintf(numer, "%4d", sens);
lcd.print(numer);
lcd.setCursor(7, 1);
sprintf(numer, "%4d", lags);
lcd.print(numer);
//draw selected option on screen
lcd.setCursor(0, 1);
if (menu == 1) lcd.print("*"); else lcd.print(" ");
lcd.setCursor(6, 1);
if (menu == 2) lcd.print("*"); else lcd.print(" ");
lcd.setCursor(11, 0);
if (menu == 3) lcd.print("*"); else lcd.print(" ");
lcd.setCursor(14, 0);
if (menu == 4) lcd.print("*"); else lcd.print(" ");
//settings change delay for buttons
if (lcd_key != btnNONE) delay(100);
if (lcd_key == btnRIGHT || lcd_key == btnLEFT) delay(300);
}
//Read resistior ladder button
int read_LCD_buttons() {
adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE;
}
// Trigger Flash
void flash(int lag) {
lcd.clear();
lcd.write("Wyzwolenie...");
delay (lag);
digitalWrite(2, HIGH);
delay (1000);
digitalWrite(2, LOW);
}
//wait for sound
void wait(int s, int l) {
lcd.clear();
lcd.write("Kalibracja...");
EEPROM.put(0, s);
EEPROM.put(10, l);
delay(1000);
lcd.clear();
lcd.write("Czekam na dźwięk");
lcd.setCursor(4, 1);
lcd.write("<wstecz");
while (lcd_key != btnLEFT) {
sound = analogRead(1);
if (sound >= s) {
flash(l);
break;
}
lcd_key = read_LCD_buttons();
}
lcd.clear();
}
//check current and max sound levels
void stat() {
lcd.clear();
lcd.write("<wstecz >reset");
while (lcd_key != btnLEFT) {
if (lcd_key == btnRIGHT) soundmax = 0;
sound = analogRead(1);
if (sound > soundmax)
{
soundmax = sound;
}
lcd.setCursor(1, 1);
sprintf(numer, "%4d", sound);
lcd.print(numer);
lcd.setCursor(7, 1);
sprintf(numer, "%4d", soundmax);
lcd.print(numer);
lcd_key = read_LCD_buttons();
}
lcd.clear();
}