-
Notifications
You must be signed in to change notification settings - Fork 0
/
volleycounter_voice.ino
179 lines (159 loc) · 4.22 KB
/
volleycounter_voice.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
175
176
177
178
// handles the Sound Output
/*
(ASCII 48)
0 Null
1 Eins
...
9 Neun
: Zehn
; Elf
< Zwoelf
= Dreizehn
> Vierzehn
? Fuenfzehn
@ Sechzehn
A Siebzehn
B Achzehn
...
N Dreissig
O Satzball
P Zu
Q Es steht
R Akku leer
S Beide
V Test von 0-32
X = NULL
*/
// Constants
const char voice_NULL = voice_NULL;
// Variables
char voice_queue[] = {
voice_NULL,voice_NULL,voice_NULL,voice_NULL,voice_NULL}; // X == NULL
char temp_queue[] = {
voice_NULL,voice_NULL,voice_NULL,voice_NULL,voice_NULL};
char c = 0;
int number=0;
void setup_voice(){
wtv020sd16p.reset();
}
void loop_voice(){
// Check the time for long push left
if(currentMillis > wakeTime_voice && voice_queue[0] != voice_NULL){
c=-1;
// Get the last element
for(int i=1; i < sizeof(voice_queue); i++)
if(voice_queue[i] == voice_NULL){
c = voice_queue[i-1];
voice_queue[i-1]=voice_NULL;
break;
}
if(c==-1){ // Overflow, no X
c = voice_queue[sizeof(voice_queue)-1];
voice_queue[sizeof(voice_queue)-1] = voice_NULL;
}
number = c-48; // char->int
Serial.print("Input: ");
Serial.print(c);
Serial.print("\tVoice:");
Serial.print(number);
if(c == 'P'){ // Zu
play_sample(number, 800);
Serial.println("\t\tDelay: 800");
}
else if((c >= '0' && c <='<')){ // 0-12
play_sample(number, DELAY_SHORT);
Serial.print("\t\tDelay:");
Serial.println(DELAY_SHORT);
}
else if((c >= '=' && c <='D') || c == 'N' || c == 'O' || c=='Q' || c == 'R' || c== 'S'){ // 13-20 or 30 or Voice-commands
play_sample(number, DELAY_MEDIUM);
Serial.print("\t\tDelay:");
Serial.println(DELAY_MEDIUM);
}
else if(c >= 'E' && c <='M'){ // 21-29
play_sample(number, DELAY_LONG);
Serial.print("\t\tDelay:");
Serial.println(DELAY_LONG);
}
else if(c == 'V')
for (int i='0'; i <= 'R'; i++)
play_voice((char)i);
else{
Serial.print("\tUnkown: ");
Serial.println(c);
}
}
}
// Public aktuator
void play_sound(int left_right){
if(counter_left != 0 && counter_left == counter_right){
play_voice((char)(counter_left + 48));
play_voice('S'); // both
}
else if(left_right == LEFT){
play_voice((char)(counter_left + 48));
play_voice('P'); // to
play_voice((char)(counter_right + 48));
}
else if(left_right == RIGHT){
play_voice((char)(counter_right + 48));
play_voice('P'); // to
play_voice((char)(counter_left + 48));
}
if(counter_left >= 24 or counter_right >= 24){
if(abs(counter_left - counter_right) >= 1)
play_voice('O'); // Setpoint
}
}
void play_voice(char c){
// Serial.print("Queue before: ");
// for(int i=0; i < sizeof(voice_queue); i++){
// Serial.print(voice_queue[i]);
// Serial.print(" ");
// }
// Serial.println(" ");
// Check for buffer overflow
if(voice_queue[sizeof(voice_queue)-1] != voice_NULL){
Serial.print("Overflow! Dropping queue");
for(int i=0; i < sizeof(voice_queue); i++)
voice_queue[i] = voice_NULL;
}
else // shift array the left
shiftVoiceArrayTo(LEFT);
// Set the first element
voice_queue[0] = c;
// Serial.print("Queue after: ");
// for(int i=0; i < sizeof(voice_queue); i++){
// Serial.print(voice_queue[i]);
// Serial.print(" ");
// }
// Serial.println(" ");
}
// Helper-Method to shift the array to the right
void shiftVoiceArrayTo(int leftright){
for(int i=0; i < sizeof(voice_queue); i++)
temp_queue[i] = voice_queue[i]; // Copy array
if(leftright==LEFT)
for(int i=0; i < sizeof(voice_queue)-1; i++)
voice_queue[i+1] = temp_queue[i]; // Shift left
else
for(int i=1; i < sizeof(voice_queue); i++)
voice_queue[i] = temp_queue[i-1]; // Shift right
}
void play_sample(int id, int delaytime){
wtv020sd16p.asyncPlayVoice(id);
wakeTime_voice= currentMillis + delaytime;
}
void playInteger(int digit){
if(digit>=1000)
play_voice(48 + (status_battery / 1000)); // 1000er
if(digit>=100)
play_voice(48 +(status_battery / 100)%10); // 100er
if(digit>=10)
play_voice(48 +(status_battery / 10)%10); // 10er
play_voice(48 +(status_battery / 1)%10); // 1er
}
// void sayClock(){
// play_voice(hour);
// playInteger(minute);
//}