Простая задача с кнопками
- Войдите на сайт для отправки комментариев
Ср, 07/07/2021 - 13:59
Цикл зажигает диодную ленту по одному диоду, когда это происходит другие кнопки не могут сработать, нужно сделать чтобы при нажатии следующей кнопки текущий цикл прерывался и запускался тот который соответствует нажатой кнопке. Всего кнопок 7.
001 | #include <SoftwareSerial.h> |
002 | #include "SeeedGroveMP3.h" |
003 | #include "KT403A_Player.h" |
004 | #include "WT2003S_Player.h" |
005 | #include <Keypad.h> // подключаем библиотеку для управление клавиатурой |
006 | #include "Adafruit_NeoPixel.h" |
007 |
008 | #define ShowSerial Serial |
009 | #define LED_COUNT 119 |
010 | #define LED_PIN 22 |
011 |
012 | unsigned long last_time; |
013 | const byte ROWS = 4; //число строк у нашей клавиатуры |
014 | const byte COLS = 4; //число столбцов у нашей клавиатуры |
015 | char hexaKeys[ROWS][COLS] = { // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования |
016 | { '4' , '8' , '#' , 'D' }, |
017 | { '3' , '7' , '*' , 'C' }, |
018 | { '2' , '6' , '0' , 'B' }, |
019 | { '1' , '5' , '9' , 'A' } |
020 | }; |
021 | const int ledPin1 = 36; // номер порта для кнопки 1 |
022 | const int ledPin2 = 38; // номер порта для кнопки 2 |
023 | const int ledPin3 = 40; // номер порта для кнопки 3 |
024 | const int ledPin4 = 42; // номер порта для кнопки 4 |
025 | const int ledPin5 = 44; // номер порта для кнопки 5 |
026 | const int ledPin6 = 46; // номер порта для кнопки 6 |
027 | const int ledPin7 = 48; // номер порта для кнопки 7 |
028 | int ledState = LOW; // по умолчанию кнопка 1 выключена |
029 |
030 | byte rowPins[ROWS] = {9, 8, 7, 6}; //к каким выводам подключаем управление строками |
031 | byte colPins[COLS] = {5, 4, 3, 2}; //к каким выводам подключаем управление столбцами |
032 |
033 | Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); |
034 | Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); |
035 |
036 | #ifdef __AVR__ |
037 | #include <SoftwareSerial.h> |
038 | SoftwareSerial SSerial(10, 11); // RX, TX |
039 | #define COMSerial SSerial |
040 | #define ShowSerial Serial |
041 | MP3Player<WT2003S<SoftwareSerial>> Mp3Player; |
042 | //MP3Player<KT403A<SoftwareSerial>> Mp3Player; |
043 | #endif |
044 |
045 | #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE |
046 | #define COMSerial Serial1 |
047 | #define ShowSerial SerialUSB |
048 | MP3Player<WT2003S<Uart>> Mp3Player; |
049 | //MP3Player<KT403A<Uart>> Mp3Player; |
050 | #endif |
051 |
052 | #ifdef ARDUINO_ARCH_STM32F4 |
053 | #define COMSerial Serial |
054 | #define ShowSerial SerialUSB |
055 | MP3Player<WT2003S<HardwareSerial>> Mp3Player; |
056 | //MP3Player<KT403A<HardwareSerial>> Mp3Player; |
057 | #endif |
058 |
059 | static uint8_t recv_cmd[8] = {}; |
060 |
061 | void setup () { |
062 | pinMode(ledPin1, OUTPUT); |
063 | pinMode(ledPin2, OUTPUT); |
064 | pinMode(ledPin3, OUTPUT); |
065 | pinMode(ledPin4, OUTPUT); |
066 | pinMode(ledPin5, OUTPUT); |
067 | pinMode(ledPin6, OUTPUT); |
068 | pinMode(ledPin7, OUTPUT); |
069 | strip.begin(); //Инициализируем ленту. |
070 | ShowSerial.begin(9600); |
071 | COMSerial.begin(9600); |
072 | while (!ShowSerial); |
073 | while (!COMSerial); |
074 | delay(100); |
075 | Mp3Player.controller->init(COMSerial); |
076 | printMenu(); |
077 | } |
078 |
079 |
080 |
081 | void loop () { |
082 | |
083 | |
084 | uint8_t len = 0; |
085 | uint8_t i; |
086 |
087 | char customKey = customKeypad.getKey(); //записывем нажатый символ |
088 | if (millis() - last_time > 50000) |
089 | { |
090 | for ( int o = 0; o < LED_COUNT; o++) |
091 | { |
092 | last_time = millis(); |
093 | strip.setPixelColor(o, strip.Color(255, 255, 0)); |
094 | strip.show(); |
095 | } |
096 | } |
097 | |
098 | if (customKey == '1' ){ //если что-то нажато |
099 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
100 | Mp3Player.controller->volume (50); |
101 | Mp3Player.controller->playSDSong ( "0001.mp3" ); |
102 | Serial .println( "Pause or Resume the MP3 player" ); |
103 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
104 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
105 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
106 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
107 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
108 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
109 | digitalWrite(ledPin1, HIGH); //подсвечиваем кнопку |
110 | last_time = millis(); |
111 | for ( int o = 0; o < LED_COUNT; o++) |
112 | { |
113 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
114 | strip.show(); |
115 | } |
116 | for ( int o = 0; o < 18; o++) |
117 | { |
118 | strip.setPixelColor(o, strip.Color(255, 0, 0)); |
119 | strip.show(); |
120 | } |
121 | |
122 | } |
123 | |
124 | if (customKey == '2' ){ //если что-то нажато |
125 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
126 | Mp3Player.controller->volume (50); |
127 | Mp3Player.controller->playSDSong ( "0002.mp3" ); |
128 | Serial .println( "Play the next song" ); |
129 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
130 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
131 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
132 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
133 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
134 | digitalWrite(ledPin2, HIGH); //выключаем кнопки |
135 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
136 | last_time = millis(); |
137 | for ( int o = 0; o < LED_COUNT; o++) |
138 | { |
139 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
140 | strip.show(); |
141 | } |
142 | for ( int o = 0; o < 36; o++) |
143 | { |
144 | strip.setPixelColor(o, strip.Color(0, 255, 0)); |
145 | strip.show(); |
146 | } |
147 | |
148 | } |
149 |
150 | if (customKey == '3' ){ //если что-то нажато |
151 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
152 | Mp3Player.controller->volume (50); |
153 | Mp3Player.controller->playSDSong ( "0003.mp3" ); |
154 | Serial .println( "Play the next song" ); |
155 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
156 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
157 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
158 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
159 | digitalWrite(ledPin3, HIGH); //выключаем кнопки |
160 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
161 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
162 | last_time = millis(); |
163 | for ( int o = 0; o < LED_COUNT; o++) |
164 | { |
165 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
166 | strip.show(); |
167 | } |
168 | for ( int o = 0; o < 54; o++) |
169 | { |
170 | strip.setPixelColor(o, strip.Color(0, 0, 255)); |
171 | strip.show(); |
172 | } |
173 | |
174 | } |
175 |
176 | if (customKey == '4' ){ //если что-то нажато |
177 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
178 | Mp3Player.controller->volume (50); |
179 | Mp3Player.controller->playSDSong ( "0004.mp3" ); |
180 | Serial .println( "Play the next song" ); |
181 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
182 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
183 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
184 | digitalWrite(ledPin4, HIGH); //выключаем кнопки |
185 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
186 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
187 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
188 | last_time = millis(); |
189 | for ( int o = 0; o < LED_COUNT; o++) |
190 | { |
191 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
192 | strip.show(); |
193 | } |
194 | for ( int o = 0; o < 72; o++) |
195 | { |
196 | strip.setPixelColor(o, strip.Color(255, 0, 0)); |
197 | strip.show(); |
198 | } |
199 | |
200 | } |
201 |
202 | if (customKey == '5' ){ //если что-то нажато |
203 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
204 | Mp3Player.controller->volume (50); |
205 | Mp3Player.controller->playSDSong ( "0005.mp3" ); |
206 | Serial .println( "Play the next song" ); |
207 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
208 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
209 | digitalWrite(ledPin5, HIGH); //выключаем кнопки |
210 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
211 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
212 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
213 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
214 | last_time = millis(); |
215 | for ( int o = 0; o < LED_COUNT; o++) |
216 | { |
217 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
218 | strip.show(); |
219 | } |
220 | for ( int o = 0; o < 90; o++) |
221 | { |
222 | strip.setPixelColor(o, strip.Color(0, 255, 0)); |
223 | strip.show(); |
224 | } |
225 | |
226 | } |
227 |
228 | if (customKey == '6' ){ //если что-то нажато |
229 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
230 | Mp3Player.controller->volume (50); |
231 | Mp3Player.controller->playSDSong ( "0006.mp3" ); |
232 | Serial .println( "Play the next song" ); |
233 | digitalWrite(ledPin7, LOW); //выключаем кнопки |
234 | digitalWrite(ledPin6, HIGH); //выключаем кнопки |
235 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
236 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
237 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
238 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
239 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
240 | last_time = millis(); |
241 | for ( int o = 0; o < LED_COUNT; o++) |
242 | { |
243 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
244 | strip.show(); |
245 | } |
246 | for ( int o = 0; o < 119; o++) |
247 | { |
248 | strip.setPixelColor(o, strip.Color(0, 0, 255)); |
249 | strip.show(); |
250 | } |
251 | |
252 | } |
253 |
254 | if (customKey == '7' ){ //если что-то нажато |
255 | Serial .println(customKey); //выводим нажатый символ в монитор порта |
256 | Mp3Player.controller->volume (50); |
257 | Mp3Player.controller->playSDSong ( "0007.mp3" ); |
258 | Serial .println( "Play the next song" ); |
259 | digitalWrite(ledPin7, HIGH); //выключаем кнопки |
260 | digitalWrite(ledPin6, LOW); //выключаем кнопки |
261 | digitalWrite(ledPin5, LOW); //выключаем кнопки |
262 | digitalWrite(ledPin4, LOW); //выключаем кнопки |
263 | digitalWrite(ledPin3, LOW); //выключаем кнопки |
264 | digitalWrite(ledPin2, LOW); //выключаем кнопки |
265 | digitalWrite(ledPin1, LOW); //подсвечиваем кнопку |
266 | last_time = millis(); |
267 | for ( int o = 0; o < LED_COUNT; o++) |
268 | { |
269 | strip.setPixelColor(o, strip.Color(0, 0, 0)); |
270 | strip.show(); |
271 | } |
272 | for ( int o = 0; o < 119; o++) |
273 | { |
274 | strip.setPixelColor(o, strip.Color(0, 0, 255)); |
275 | strip.show(); |
276 | } |
277 | |
278 | } |
279 |
280 |
281 | if ( Serial .available()) { |
282 | char chr = '\0' ; |
283 | while (chr != '\n' ) { // Blockly read data from serial monitor |
284 | chr = Serial .read(); |
285 | // Serial.print(chr); |
286 | recv_cmd[len++] = chr; |
287 | } |
288 | } |
289 |
290 | if (len > 0) { |
291 | // Print reveiced data |
292 | // Serial.print("Received cmd: "); |
293 | // for(i = 0; i < len; i++) { |
294 | // Serial.print(recv_cmd[i]); |
295 | // Serial.print(" "); |
296 | // } |
297 | // Serial.println(); |
298 |
299 | switch (recv_cmd[0]) { |
300 | case 'p' : |
301 | Mp3Player.controller->pause_or_play(); |
302 | Serial .println( "Pause or Resume the MP3 player" ); |
303 | break ; |
304 | case 'n' : |
305 | Mp3Player.controller->next(); |
306 | Serial .println( "Play the next song" ); |
307 | break ; |
308 | case 'l' : |
309 | Mp3Player.controller->previous(); |
310 | Serial .println( "Play the previous song" ); |
311 | break ; |
312 | case '+' : |
313 | ShowSerial.print( "Volume Raise: " ); |
314 | Mp3Player.controller->volumeUp(); |
315 | break ; |
316 | case '-' : |
317 | ShowSerial.println( "Volume down: " ); |
318 | Mp3Player.controller->volumeDown(); |
319 | break ; |
320 | default : |
321 | printMenu(); |
322 | break ; |
323 | } |
324 |
325 | } |
326 | |
327 |
328 | } |
329 |
330 | void printMenu( void ) { |
331 | ShowSerial.println( "MP3 Command List:" ); |
332 | ShowSerial.println( "-----------------" ); |
333 | ShowSerial.println( "'+' or '-' : raise/lower volume" ); |
334 | ShowSerial.println( "'p' : play or pause" ); |
335 | ShowSerial.println( "'n' : next song" ); |
336 | ShowSerial.println( "'l' : next song" ); |
337 | ShowSerial.println( "Any other key to show this menu" ); |
338 | ShowSerial.println(); |
339 | } |
пипец какой гавнокод... Семь одинаковых условий по кнопкам... вы о функциях что-нибудь слышали?
нужно сделать чтобы при нажатии следующей кнопки текущий цикл прерывался и запускался тот который соответствует нажатой кнопке.
песня тоже должна прерываться?
1500р
kakmycmail@gmail.com
Сделайте всё одной функцией и вставьте в середину цикла strip.setPixelColor(o, strip.Color(0, 0, 255)); опрос кнопок.
barmaley2m@yandex.ru
или 700 р
Судя но номерам пинов (стр. 21-27) у клиента Мега2560, а в стр. 38 определяется Софт сериал. Достаточно, чтобы подозревать неадекватность. Я бы не рискнул ;)))
А зачем он на меге?
А зачем он на меге?
про то и говорю :))
Мужики, зачем обсуждать качество кода? Это коммерческий раздел и в этом разделе ТС имеет полное право быть абсолютным чайником, который ничего не знает и знать не хочет. В чём проблема-то?
Сорян. Просто человека сюда отправили после вопроса в некоммерческой части. Но ты все равно прав.
Отползаю ;)).
соглашусь с предпредыдущим каментом .
если бы тс был спецом в аппаратных фичах разных моделей ардуинок, то он вряд ли нуждался бы в услугах оказываемых в этом разделе.
да
за сегодня получится сделать?
Сделает. Там на полчаса работы.
за сегодня получится сделать?
Вполне
Сделает. Там на полчаса работы.
Это если без мозгов к делу подходить и делать на отьебись.
Да, делай
Тем не менее никаких предложений на почту не поступало
Да он только что тут был.
написал скинул код
А бапки?
лол, безумный демпинг бармалея отпугивает от него заказчиков.
Рад, что ты переживаешь за меня. Но я сам отказался.
если бы я переживал за каждого бомжа, то поседел бы и умер за неделю, потому и не водится за мной такой привычки.
а так ты молодец что отказался, а то когда много денег - тоже плохо, растолстел бы ты на колбасе, обленился бы, форму бы потерял. кто бы тут тогда народ смешил, совсем бы форум без тебя загнулся бы.
Ну это ты Маня, надо фигуру беречь.