Музыкальный автомат Seeburg Consolette
Я работаю над настенным устройством Seeburg Jukebox. У меня он без проблем воспроизводит по одной дорожке с SD-карты. Но мне нужна помощь в том, чтобы быть новичком в программировании: 1. Код длинный, потому что он может воспроизводить 160 песен. 2. Было бы неплохо, если бы это было возможно. Будем признательны за любую помощь с этим кодом.
#include <SD.h>
#include <SPI.h>
#include <Adafruit_VS1053.h>
#define BREAKOUT_RESET 9 // вывод сброса VS1053 (выход)
#define BREAKOUT_CS 10 // вывод выбора микросхемы VS1053 (выход)
#define BREAKOUT_DCS 8 // VS1053 Выбор данных/команд (выход)
#define SHIELD_RESET -1 // вывод сброса VS1053 (не используется!)
#define SHIELD_CS 7 // вывод выбора микросхемы VS1053 (выход)
#define SHIELD_DCS 6 // VS1053 Выбор данных/команд (выход)
#define CARDCS 4 // пин выбора чипа карты
#define DREQ 3 // VS1053 Запрос данных, в идеале вывод прерывания
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
int opto = 18;
void setup() {
Serial.begin(9600);
if (! musicPlayer.begin()) {}
if (!SD.begin(CARDCS)) {}
musicPlayer.setVolume(1,1);
pinMode(opto, INPUT); //инициализируем цифровой вывод как вход оптоизолятора.
digitalWrite(opto, HIGH);} // включает внутренний подтягивающий резистор.
void loop() {
int number = 0; // считает импульсы алфавита
int letter = 0; // подсчитывает цифровые импульсы.
int buffer[4] = {1,1,1,1}; // буфер для чтения ввода. Если 4 чтения подряд одинаковы, это допустимый ввод.
int buffndx = 0;
int pausecnt = 0; // подсчитывает количество прочитанных HIGH.
int maxpause = 30; // когда pausecnt достигает maxpause, мы находимся в паузе между alpa и numeric, иначе мы находимся в конце передачи.
int countpause = false;
buffer[0] = 1;
buffer[1] = 1;
buffer[2] = 1;
buffer[3] = 1;
Serial.println("SEEBURG CONSOLETTE JUKEBOX");
//Числовой цикл//
while( pausecnt < maxpause ) {
buffer[buffndx] = digitalRead(opto); // читаем входной пин
if(buffer[buffndx] != 1){}
delay(8); // немного раздвигаем чтения.
buffndx++;
if (buffndx == 4) buffndx = 0; // вращаем индекс буфера.
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) ){ // мы получили правильный ввод, поэтому обработаем его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
number++; //увеличиваем числовой счетчик.
while(! ((buffer[0] == 1 ) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) ) { // Цикл, пока мы не получим действительный ВЫСОКИЙ
buffer[buffndx] = digitalRead(opto); // читаем входной пин
buffndx++; // вращаем индекс буфера
if (buffndx == 4) buffndx = 0;} // вращаем индекс буфера.
countpause = true; //мы получаем входные данные, поэтому начинаем считать паузы вместо вечного цикла.
continue;}else{
if (countpause == true) pausecnt++;}} // иначе неверный ввод
// Буквенный цикл//
pausecnt = 0; // Сброс счетчика паузы. Готов к приходу следующего потока импульсов.
countpause = false; // цикл до тех пор, пока не будет получен импульс.
while( pausecnt < maxpause ) { // Начинаем цифровой цикл
buffer[buffndx] = digitalRead(opto); // читаем входной пин
delay(8);
buffndx++;
if (buffndx == 4) buffndx = 0; // вращаем индекс буфера.
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) ){ // мы получили правильный ввод, поэтому обработаем его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
letter++; //увеличиваем счетчик алфавита.
while(! ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) ) { // Цикл, пока мы не получим действительный ВЫСОКИЙ
buffer[buffndx] = digitalRead(opto); // читаем входной пин
buffndx++; // вращаем индекс буфера
if (buffndx == 4) buffndx = 0;} // вращаем индекс буфера.
countpause = true; //мы получаем входные данные, поэтому начинаем считать паузы вместо вечного цикла.
continue;}else{
if (countpause == true) pausecnt++;} // иначе неверный ввод// иначе неверный ввод
}
//изменить сигнал//
{number = 10 - number;
letter = 21 - letter;}
String signal = "";
if(letter == 1) signal += "A";
if(letter == 2) signal += "B";
if(letter == 3) signal += "C";
if(letter == 4) signal += "D";
if(letter == 5) signal += "E";
if(letter == 6) signal += "F";
if(letter == 7) signal += "G";
if(letter == 8) signal += "H";
if(letter == 9) signal += "J";
if(letter == 10) signal += "K";
if(letter == 11) signal += ("L");
if(letter == 12) signal += ("M");
if(letter == 13) signal += ("N");
if(letter == 14) signal += ("P");
if(letter == 15) signal += ("Q");
if(letter == 16) signal += ("R");
if(letter == 17) signal += ("S");
if(letter == 18) signal += ("T");
if(letter == 19) signal += ("U");
if(letter == 20) signal += ("V");
signal += String(number);
Serial.println(signal);
delay(1000);
//////////А////////////
if(letter == 1 && number == 1);
{musicPlayer.playFullFile("A1.mp3");}
if(letter == 1 && number == 2);
{musicPlayer.playFullFile("A2.mp3");}
if(letter == 1 && number == 3);
{musicPlayer.playFullFile("A3.mp3");}
if(letter == 1 && number == 4);
{musicPlayer.playFullFile("A4.mp3");}
if(letter == 1 && number == 5);
{musicPlayer.playFullFile("A5.mp3");}
if(letter == 1 && number == 6);
{musicPlayer.playFullFile("A6.mp3");}
if(letter == 1 && number == 7);
{musicPlayer.playFullFile("A7.mp3");}
if(letter == 1 && number == 8);
{musicPlayer.playFullFile("A8.mp3");}
//////////В////////////
if(letter == 2 && number == 1);
{musicPlayer.playFullFile("B1.mp3");}
if(letter == 2 && number == 2);
{musicPlayer.playFullFile("B2.mp3");}
if(letter == 2 && number == 3);
{musicPlayer.playFullFile("B3.mp3");}
if(letter == 2 && number == 4);
{musicPlayer.playFullFile("B4.mp3");}
if(letter == 2 && number == 5);
{musicPlayer.playFullFile("B5.mp3");}
if(letter == 2 && number == 6);
{musicPlayer.playFullFile("B6.mp3");}
if(letter == 2 && number == 7);
{musicPlayer.playFullFile("B7.mp3");}
if(letter == 2 && number == 8);
{musicPlayer.playFullFile("B8.mp3");}
//////////С////////////
if(letter == 3 && number == 1);
{musicPlayer.playFullFile("C1.mp3");}
if(letter == 3 && number == 2);
{musicPlayer.playFullFile("C2.mp3");}
if(letter == 3 && number == 3);
{musicPlayer.playFullFile("C3.mp3");}
if(letter == 3 && number == 4);
{musicPlayer.playFullFile("C4.mp3");}
if(letter == 3 && number == 5);
{musicPlayer.playFullFile("C5.mp3");}
if(letter == 3 && number == 6);
{musicPlayer.playFullFile("C6.mp3");}
if(letter == 3 && number == 7);
{musicPlayer.playFullFile("C7.mp3");}
if(letter == 3 && number == 8);
{musicPlayer.playFullFile("C8.mp3");}
//////////Д////////////
if(letter == 4 && number == 1);
{musicPlayer.playFullFile("D1.mp3");}
if(letter == 4 && number == 2);
{musicPlayer.playFullFile("D2.mp3");}
if(letter == 4 && number == 3);
{musicPlayer.playFullFile("D3.mp3");}
if(letter == 4 && number == 4);
{musicPlayer.playFullFile("D4.mp3");}
if(letter == 4 && number == 5);
{musicPlayer.playFullFile("D5.mp3");}
if(letter == 4 && number == 6);
{musicPlayer.playFullFile("D6.mp3");}
if(letter == 4 && number == 7);
{musicPlayer.playFullFile("D7.mp3");}
if(letter == 4 && number == 8);
{musicPlayer.playFullFile("D8.mp3");}
//////////Е////////////
if(letter == 5 && number == 1);
{musicPlayer.playFullFile("E1.mp3");}
if(letter == 5 && number == 2);
{musicPlayer.playFullFile("E2.mp3");}
if(letter == 5 && number == 3);
{musicPlayer.playFullFile("E3.mp3");}
if(letter == 5 && number == 4);
{musicPlayer.playFullFile("E4.mp3");}
if(letter == 5 && number == 5);
{musicPlayer.playFullFile("E5.mp3");}
if(letter == 5 && number == 6);
{musicPlayer.playFullFile("E6.mp3");}
if(letter == 5 && number == 7);
{musicPlayer.playFullFile("E7.mp3");}
if(letter == 5 && number == 8);
{musicPlayer.playFullFile("E8.mp3");}
//////////Ф////////////
if(letter == 6 && number == 1);
{musicPlayer.playFullFile("F1.mp3");}
if(letter == 6 && number == 2);
{musicPlayer.playFullFile("F2.mp3");}
if(letter == 6 && number == 3);
{musicPlayer.playFullFile("F3.mp3");}
if(letter == 6 && number == 4);
{musicPlayer.playFullFile("F4.mp3");}
if(letter == 6 && number == 5);
{musicPlayer.playFullFile("F5.mp3");}
if(letter == 6 && number == 6);
{musicPlayer.playFullFile("F6.mp3");}
if(letter == 6 && number == 7);
{musicPlayer.playFullFile("F7.mp3");}
if(letter == 6 && number == 8);
{musicPlayer.playFullFile("F8.mp3");}
//////////ГРАММ////////////
if(letter == 7 && number == 1);
{musicPlayer.playFullFile("G1.mp3");}
if(letter == 7 && number == 2);
{musicPlayer.playFullFile("G2.mp3");}
if(letter == 7 && number == 3);
{musicPlayer.playFullFile("G3.mp3");}
if(letter == 7 && number == 4);
{musicPlayer.playFullFile("G4.mp3");}
if(letter == 7 && number == 5);
{musicPlayer.playFullFile("G5.mp3");}
if(letter == 7 && number == 6);
{musicPlayer.playFullFile("G6.mp3");}
if(letter == 7 && number == 7);
{musicPlayer.playFullFile("G7.mp3");}
if(letter == 7 && number == 8);
{musicPlayer.playFullFile("G8.mp3");}
//////////ЧАС//////////;//
if(letter == 8 && number == 1);
{musicPlayer.playFullFile("H1.mp3");}
if(letter == 8 && number == 2);
{musicPlayer.playFullFile("H2.mp3");}
if(letter == 8 && number == 3);
{musicPlayer.playFullFile("H3.mp3");}
if(letter == 8 && number == 4);
{musicPlayer.playFullFile("H4.mp3");}
if(letter == 8 && number == 5);
{musicPlayer.playFullFile("H5.mp3");}
if(letter == 8 && number == 6);
{musicPlayer.playFullFile("H6.mp3");}
if(letter == 8 && number == 7);
{musicPlayer.playFullFile("H7.mp3");}
if(letter == 8 && number == 8);
{musicPlayer.playFullFile("H8.mp3");}
//////////J//////////;//
if(letter == 9 && number == 1);
{musicPlayer.playFullFile("J1.mp3");}
if(letter == 9 && number == 2);
{musicPlayer.playFullFile("J2.mp3");}
if(letter == 9 && number == 3);
{musicPlayer.playFullFile("J3.mp3");}
if(letter == 9 && number == 4);
{musicPlayer.playFullFile("J4.mp3");}
if(letter == 9 && number == 5);
{musicPlayer.playFullFile("J5.mp3");}
if(letter == 9 && number == 6);
{musicPlayer.playFullFile("J6.mp3");}
if(letter == 9 && number == 7);
{musicPlayer.playFullFile("J7.mp3");}
if(letter == 9 && number == 8);
{musicPlayer.playFullFile("J8.mp3");}
//////////К////////////
if(letter == 10 && number == 1);
{musicPlayer.playFullFile("K1.mp3");}
if(letter == 10 && number == 2);
{musicPlayer.playFullFile("K2.mp3");}
if(letter == 10 && number == 3);
{musicPlayer.playFullFile("K3.mp3");}
if(letter == 10 && number == 4);
{musicPlayer.playFullFile("K4.mp3");}
if(letter == 10 && number == 5);
{musicPlayer.playFullFile("K5.mp3");}
if(letter == 10 && number == 6);
{musicPlayer.playFullFile("K6.mp3");}
if(letter == 10 && number == 7);
{musicPlayer.playFullFile("K7.mp3");}
if(letter == 10 && number == 8);
{musicPlayer.playFullFile("K8.mp3");}
//////////Л////////////
if(letter == 11 && number == 1);
{musicPlayer.playFullFile("L1.mp3");}
if(letter == 11 && number == 2);
{musicPlayer.playFullFile("L2.mp3");}
if(letter == 11 && number == 3);
{musicPlayer.playFullFile("L3.mp3");}
if(letter == 11 && number == 4);
{musicPlayer.playFullFile("L4.mp3");}
if(letter == 11 && number == 5);
{musicPlayer.playFullFile("L5.mp3");}
if(letter == 11 && number == 6);
{musicPlayer.playFullFile("L6.mp3");}
if(letter == 11 && number == 7);
{musicPlayer.playFullFile("L7.mp3");}
if(letter == 11 && number == 8);
{musicPlayer.playFullFile("L8.mp3");}
//////////М////////////
if(letter == 12 && number == 1);
{musicPlayer.playFullFile("M1.mp3");}
if(letter == 12 && number == 2);
{musicPlayer.playFullFile("M2.mp3");}
if(letter == 12 && number == 3);
{musicPlayer.playFullFile("M3.mp3");}
if(letter == 12 && number == 4);
{musicPlayer.playFullFile("M4.mp3");}
if(letter == 12 && number == 5);
{musicPlayer.playFullFile("M5.mp3");}
if(letter == 12 && number == 6);
{musicPlayer.playFullFile("M6.mp3");}
if(letter == 12 && number == 7);
{musicPlayer.playFullFile("M7.mp3");}
if(letter == 12 && number == 8);
{musicPlayer.playFullFile("M8.mp3");}
//////////Н////////////
if(letter == 13 && number == 1);
{musicPlayer.playFullFile("N1.mp3");}
if(letter == 13 && number == 2);
{musicPlayer.playFullFile("N2.mp3");}
if(letter == 13 && number == 3);
{musicPlayer.playFullFile("N3.mp3");}
if(letter == 13 && number == 4);
{musicPlayer.playFullFile("N4.mp3");}
if(letter == 13 && number == 5);
{musicPlayer.playFullFile("N5.mp3");}
if(letter == 13 && number == 6);
{musicPlayer.playFullFile("N6.mp3");}
if(letter == 13 && number == 7);
{musicPlayer.playFullFile("N7.mp3");}
if(letter == 13 && number == 8);
{musicPlayer.playFullFile("N8.mp3");}
//////////П////////////
if(letter == 14 && number == 1);
{musicPlayer.playFullFile("P1.mp3");}
if(letter == 14 && number == 2);
{musicPlayer.playFullFile("P2.mp3");}
if(letter == 14 && number == 3);
{musicPlayer.playFullFile("P3.mp3");}
if(letter == 14 && number == 4);
{musicPlayer.playFullFile("P4.mp3");}
if(letter == 14 && number == 5);
{musicPlayer.playFullFile("P5.mp3");}
if(letter == 14 && number == 6);
{musicPlayer.playFullFile("P6.mp3");}
if(letter == 14 && number == 7);
{musicPlayer.playFullFile("P7.mp3");}
if(letter == 14 && number == 8);
{musicPlayer.playFullFile("P8.mp3");}
//////////В////////////
if(letter == 15 && number == 1);
{musicPlayer.playFullFile("Q1.mp3");}
if(letter == 15 && number == 2);
{musicPlayer.playFullFile("Q2.mp3");}
if(letter == 15 && number == 3);
{musicPlayer.playFullFile("Q3.mp3");}
if(letter == 15 && number == 4);
{musicPlayer.playFullFile("Q4.mp3");}
if(letter == 15 && number == 5);
{musicPlayer.playFullFile("Q5.mp3");}
if(letter == 15 && number == 6);
{musicPlayer.playFullFile("Q6.mp3");}
if(letter == 15 && number == 7);
{musicPlayer.playFullFile("Q7.mp3");}
if(letter == 15 && number == 8);
{musicPlayer.playFullFile("Q8.mp3");}
//////////Р////////////
if(letter == 16 && number == 1);
{musicPlayer.playFullFile("R1.mp3");}
if(letter == 16 && number == 2);
{musicPlayer.playFullFile("R2.mp3");}
if(letter == 16 && number == 3);
{musicPlayer.playFullFile("R3.mp3");}
if(letter == 16 && number == 4);
{musicPlayer.playFullFile("R4.mp3");}
if(letter == 16 && number == 5);
{musicPlayer.playFullFile("R5.mp3");}
if(letter == 16 && number == 6);
{musicPlayer.playFullFile("R6.mp3");}
if(letter == 16 && number == 7);
{musicPlayer.playFullFile("R7.mp3");}
if(letter == 16 && number == 8);
{musicPlayer.playFullFile("R8.mp3");}
//////////С////////////
if(letter == 17 && number == 1);
{musicPlayer.playFullFile("S1.mp3");}
if(letter == 17 && number == 2);
{musicPlayer.playFullFile("S2.mp3");}
if(letter == 17 && number == 3);
{musicPlayer.playFullFile("S3.mp3");}
if(letter == 17 && number == 4);
{musicPlayer.playFullFile("S4.mp3");}
if(letter == 17 && number == 5);
{musicPlayer.playFullFile("S5.mp3");}
if(letter == 17 && number == 6);
{musicPlayer.playFullFile("S6.mp3");}
if(letter == 17 && number == 7);
{musicPlayer.playFullFile("S7.mp3");}
if(letter == 17 && number == 8);
{musicPlayer.playFullFile("S8.mp3");}
//////////Т////////////
if(letter == 18 && number == 1);
{musicPlayer.playFullFile("T1.mp3");}
if(letter == 18 && number == 2);
{musicPlayer.playFullFile("T2.mp3");}
if(letter == 18 && number == 3);
{musicPlayer.playFullFile("T3.mp3");}
if(letter == 18 && number == 4);
{musicPlayer.playFullFile("T4.mp3");}
if(letter == 18 && number == 5);
{musicPlayer.playFullFile("T5.mp3");}
if(letter == 18 && number == 6);
{musicPlayer.playFullFile("T6.mp3");}
if(letter == 18 && number == 7);
{musicPlayer.playFullFile("T7.mp3");}
if(letter == 18 && number == 8);
{musicPlayer.playFullFile("T8.mp3");}
//////////У////////////
if(letter == 19 && number == 1);
{musicPlayer.playFullFile("U1.mp3");}
if(letter == 19 && number == 2);
{musicPlayer.playFullFile("U2.mp3");}
if(letter == 19 && number == 3);
{musicPlayer.playFullFile("U3.mp3");}
if(letter == 19 && number == 4);
{musicPlayer.playFullFile("U4.mp3");}
if(letter == 19 && number == 5);
{musicPlayer.playFullFile("U5.mp3");}
if(letter == 19 && number == 6);
{musicPlayer.playFullFile("U6.mp3");}
if(letter == 19 && number == 7);
{musicPlayer.playFullFile("U7.mp3");}
if(letter == 19 && number == 8);
{musicPlayer.playFullFile("U8.mp3");}
//////////В////////////
if(letter == 20 && number == 1);
{musicPlayer.playFullFile("V1.mp3");}
if(letter == 20 && number == 2);
{musicPlayer.playFullFile("V2.mp3");}
if(letter == 20 && number == 3);
{musicPlayer.playFullFile("V3.mp3");}
if(letter == 20 && number == 4);
{musicPlayer.playFullFile("V4.mp3");}
if(letter == 20 && number == 5);
{musicPlayer.playFullFile("V5.mp3");}
if(letter == 20 && number == 6);
{musicPlayer.playFullFile("V6.mp3");}
if(letter == 20 && number == 7);
{musicPlayer.playFullFile("V7.mp3");}
if(letter == 20 && number == 8);
{musicPlayer.playFullFile("V8.mp3");}
}
@D man, 👍1
Обсуждение1 ответ
Этот ответ касается только первой проблемы:
- Код длинный, потому что он может воспроизводить 160 песен.
Кроме того, вы можете выровнять свой код, выделив его и нажав Ctrl-K.
Я буду улучшать его по частям (предоставив вам ручную работу):
Выровнять код
#define BREAKOUT_RESET 9 // вывод сброса VS1053 (выход)
#define BREAKOUT_CS 10 // вывод выбора микросхемы VS1053 (выход)
#define BREAKOUT_DCS 8 // VS1053 Выбор данных/команд (выход)
#define SHIELD_RESET -1 // вывод сброса VS1053 (не используется!)
Выровняйте этот код, чтобы все значения располагались друг под другом, а комментарии начинались в одном столбце.
Использовать цикл for
buffer[0] = 1;
buffer[1] = 1;
buffer[2] = 1;
buffer[3] = 1;
Вы можете использовать цикл for, например:
for (int n = 0; n < 4; n++)
{
buffer[n] = 1;
}
Однако этот код можно удалить, так как значения уже инициализированы в:
int buffer[4] = {1,1,1,1}; // буфер для чтения ввода. Если 4 чтения подряд одинаковы, это допустимый ввод.
Предотвращение почти идентичного дублирования кода
В части цикла цифр/букв:
//Числовой цикл//
while( pausecnt < maxpause ) {
buffer[buffndx] = digitalRead(opto); // читаем входной пин
if(buffer[buffndx] != 1){}
delay(8); // немного раздвигаем чтения.
buffndx++;
if (buffndx == 4) buffndx = 0; // вращаем индекс буфера.
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) ){ // мы получили правильный ввод, поэтому обработаем его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
number++; //увеличиваем числовой счетчик.
while(! ((buffer[0] == 1 ) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) ) { // Цикл, пока мы не получим действительный ВЫСОКИЙ
buffer[buffndx] = digitalRead(opto); // читаем входной пин
buffndx++; // вращаем индекс буфера
if (buffndx == 4) buffndx = 0;} // вращаем индекс буфера.
countpause = true; //мы получаем входные данные, поэтому начинаем считать паузы вместо вечного цикла.
continue;}else{
if (countpause == true) pausecnt++;}} // иначе неверный ввод
// Буквенный цикл//
pausecnt = 0; // Сброс счетчика паузы. Готов к приходу следующего потока импульсов.
countpause = false; // цикл до тех пор, пока не будет получен импульс.
while( pausecnt < maxpause ) { // Начинаем цифровой цикл
buffer[buffndx] = digitalRead(opto); // читаем входной пин
delay(8);
buffndx++;
if (buffndx == 4) buffndx = 0; // вращаем индекс буфера.
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) ){ // мы получили правильный ввод, поэтому обработаем его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
letter++; //увеличиваем счетчик алфавита.
while(! ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) ) { // Цикл, пока мы не получим действительный ВЫСОКИЙ
buffer[buffndx] = digitalRead(opto); // читаем входной пин
buffndx++; // вращаем индекс буфера
if (buffndx == 4) buffndx = 0;} // вращаем индекс буфера.
countpause = true; //мы получаем входные данные, поэтому начинаем считать паузы вместо вечного цикла.
continue;}else{
if (countpause == true) pausecnt++;} // иначе неверный ввод// иначе неверный ввод
}
Сначала добавьте скобки и выровняйте их (я делаю это для числовой части):
while( pausecnt < maxpause )
{
buffer[buffndx] = digitalRead(opto); // читаем входной пин
if(buffer[buffndx] != 1)
{
}
delay(8); // немного раздвигаем чтения.
buffndx++;
if (buffndx == 4)
{
buffndx = 0; // вращаем индекс буфера.
}
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) )
{
// мы получили допустимый ввод, так что обработайте его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
number++; //увеличиваем числовой счетчик.
while(! ((buffer[0] == 1 ) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) )
{
// Цикл, пока мы не получим допустимый HIGH
buffer[buffndx] = digitalRead(opto); // читаем входной пин
buffndx++; // вращаем индекс буфера
if (buffndx == 4)
{
buffndx = 0;
}
} // вращаем индекс буфера.
countpause = true; //мы получаем входные данные, поэтому начинаем считать паузы вместо вечного цикла.
continue;
}
else
{
if (countpause == true)
{
pausecnt++;
}
} // иначе неверный ввод
Обратите внимание, что он длиннее, но намного понятнее (четкий код важнее, чем короткий).
Теперь, потому что код, начинающийся с:
buffer[buffndx] = digitalRead(opto); // читаем входной пин
...
Пока код конца числового цикла почти не совпадет с буквенным кодом цикла, попытайтесь найти различия между двумя частями: только переменная число
и буква
. Таким образом, вы создаете новую функцию (например, processKey
), вы передаете число или букву (так, для числа вызовите processKey(number)
, а для буквы вызовите processKey(letter)
. Обратите внимание, что оба являются целыми числами. Новая функция будет:
int processKey(int key) // Элемент представляет собой число или букву
{
...
return key;
}
Вы возвращаете ключ (который, возможно, является увеличенным значением (из-за number++
в исходном коде). Несколько продвинутый способ — передать его как указатель:
void processKey(int* key) // Элемент представляет собой число или букву
и измените ключ с помощью (*key)++;
и вызовите функции с помощью processKey(&number)
и processKey(&letter)
.
Использовать определение
Обратите внимание, что вместо 4 лучше использовать #define.
if(buffer[buffndx] != 1){}
Удалить мертвый код
Эта строка ничего не делает; чтобы было понятно, всегда выравнивайте скобки:
if(buffer[buffndx] != 1)
{
}
Всегда используйте квадратные скобки {
if (buffndx == 4) buffndx = 0; // вращаем индекс буфера.
Использование:
if (buffndx == 4)
{
buffndx = 0; // вращаем индекс буфера.
}
Избегайте дублирования кода
if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) ){ // мы получили правильный ввод, поэтому обработаем его.
pausecnt = 0; // мы получили наш пульс, поэтому перезапустите часы для следующего.
number++; //увеличиваем числовой счетчик.
while(! ((buffer[0] == 1 ) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1)) ) { // Цикл, пока мы не получим действительный ВЫСОКИЙ
В этой части вы дважды проверяете, равны ли значения 0 или 1, создаете для этого функцию (например, areAllValues(buffer, 0) для первого вызова и areAllValues(buffer, 1) для следующего. Если 0 и 1 являются единственными значениями, используйте логическое значение (True/False).
if (buffndx == 4) buffndx = 0;} // вращать индекс буфера.
Используйте здесь тот же #define, который я предложил выше.
Не проверять на истинность/ложь
if (countpause == true) pausecnt++;}} // иначе неверный ввод
Не нужно проверять истинность:
if (countpause) ...
Используйте правильный регистр
Также лучше всегда использовать правильный регистр, поэтому countPause
вместо countpause
.
Избегайте повторения операторов if (1)
if(letter == 1) signal += "A";
if(letter == 2) signal += "B";
if(letter == 3) signal += "C";
if(letter == 4) signal += "D";
if(letter == 5) signal += "E";
if(letter == 6) signal += "F";
if(letter == 7) signal += "G";
if(letter == 8) signal += "H";
if(letter == 9) signal += "J";
if(letter == 10) signal += "K";
if(letter == 11) signal += ("L");
if(letter == 12) signal += ("M");
if(letter == 13) signal += ("N");
if(letter == 14) signal += ("P");
if(letter == 15) signal += ("Q");
if(letter == 16) signal += ("R");
if(letter == 17) signal += ("S");
if(letter == 18) signal += ("T");
if(letter == 19) signal += ("U");
if(letter == 20) signal += ("V");
Вместо этого используйте значение символа ASCII.
if ((letter >= 1) && (letter <= 20))
{
signal += (char) ((int)('A') + letter - 1);
{
Избегайте повторения операторов if (2)
Большая часть:
if(letter == 1 && number == 1);
{musicPlayer.playFullFile("A1.mp3");}
if(letter == 1 && number == 2);
{musicPlayer.playFullFile("A2.mp3");}
...
Используйте два оператора if, заполнив первый и второй символы имени файла.
char[] fileName = "XX.mp3";
if ((letter >= 1) && (letter <= 20))
{
if ((number >= 1) && (number <= 8))
{
fileName[0] = (char) ((int)('A') + letter - 1);
fileName[1] = (char) ((int)('0') + number - 1);
musicPlayer.playFullFile(fileName);
}
}
Начать с 0
Кстати, инженеры-программисты обычно начинают массивы/счетчики и т. д. с 0 вместо 1; что позволяет сократить число конверсий -1
.
Моя интерпретация фразы «было бы неплохо, если бы она выстраивалась в очередь к следующему выбору, если это возможно» заключалась в том, чтобы следующая песня начинала играть, как только закончилась текущая :-), @Gerben
Я обратился только к первой проблеме; Я добавлю это в ответ., @Michel Keijzers
- Как я могу прервать задержку() при нажатии кнопки?
- Объявление переменной внутри основного цикла
- Светодиод мигает с помощью кнопки
- в то время как (1) внутри, если условно
- HTML-страница переменной ESP8266 Webserver ESP8266WebServer (не как один постоянный символ)
- ESP8266 Webserver ESP8266WebS сервер перемещает функцию обработчика в отдельный файл .h .c
- Понимание кода Debounce
- Как использовать передатчик и приемник для условной отправки строковых сообщений получателю?
Я пытаюсь начать аналогичный проект - мне интересно, не могли бы вы указать мне, где вы получили информацию о вашем аппаратном интерфейсе? Заранее спасибо!, @user2526332