Skip to content

Commit a8f86d9

Browse files
committed
fix dfPlayer, increase a telegram buffer
1 parent 6b0d840 commit a8f86d9

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@
4141
При желании схему можно сократить только до одной матрицы, отключив DFPlayer и датчик питания в настройках, выставляя
4242
уровень яркости в настройках, и даже кнопка не сильно нужна, ведь будильник и так не будет работать. Получатся максимально скучные часы.
4343

44-
Нет модуля часов реального времени и нет возможности ввести время вручную. Если нет WiFi, то часы работать не будут!
44+
Нет модуля часов реального времени и без интернета времени не установится после включения, но подключившись по WiFi можно ввести время вручную.
45+
Если нет WiFi, то часы работать не будут!
4546
Нет автоматического перехода зимнее/летнее время, его так давно хотят отменить, что я не вижу в этом смысла.
4647

4748
Можно создать кнопку-ярлык на экране смартфона или даже создать "приложение chrome". Но есть нюанс. Иконка всегда подхватывается только в firefox,
4849
а в броузерах родственниках chrome может подхватится, может нет, может в высоком качестве, может в низком...
4950

5051
IP адрес только автоматический. Не вижу смысла делать ручной ввод IP, если проще сделать его статическим в настройках роутера. При желании его
51-
всегда можно посмотреть три раза нажав на кнопку.
52+
всегда можно посмотреть три раза нажав на кнопку. А ещё можно зайти в настройки часов по адресу http://clock.local
5253

5354
Модуль MP3 (dfPlayer) иногда, очень редко, может перестать работать очень необычным образом - с точки зрения контроллера всё хорошо, команды отрабатываются, обратная связь есть, а звука нет. Как определить такой момент я не знаю. Привести в чувство можно или полной перезагрузкой часов или переключая режимы повтора в "мелодиях", пока модуль сам не перезагрузится. После долгого простоя медленно "запускается", по этому будильник начинает звонить +20/+90 секунд с момента активации. Скорее всего мне
5455
попалась очередная китайская копия платы и с оригинальной таких проблем нет.

include/defines.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
#define TELEGRAM_ACCELERATE 900 // время на которое запросы к телеграм идут чаще, в секундах
5454
#define TELEGRAM_ACCELERATED 10 // периодичность ускоренного опроса телеграм, в секундах
5555
#define TELEGRAM_BAN 1800 // время на которое прекращаются запросы к телеграм после ошибки, в секундах
56+
#define TELEGRAM_MAX_LENGTH 2000 // максимальный размер сообщений отсылаемых в Телеграм
5657

5758
/*** разное ***/
5859

src/dfplayer.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ boolean mp3_isPlay() {
4040
}
4141

4242
void mp3_update() {
43-
if(mp3_isPlay())
43+
if(mp3_isPlay() || mp3_current>mp3_all )
4444
mp3_current = dfPlayer.readCurrentFileNumber();
4545
}
4646

@@ -65,6 +65,13 @@ void mp3_init() {
6565
delay(10);
6666
mp3_volume(1,false);
6767
}
68+
if(dfPlayer.readCurrentFileNumber()>mp3_all) {
69+
dfPlayer.start();
70+
delay(10);
71+
mp3_update();
72+
dfPlayer.stop();
73+
delay(10);
74+
}
6875
}
6976

7077
void mp3_volume(uint8_t t, boolean p) {

src/security.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,20 @@ void tb_send_msg(String s) {
7373
// кодирование строки для GET запросов
7474
String urlEncode(String str, bool params = false) {
7575
unsigned int len = str.length();
76-
if(len > 500) len = 500; // ограничение на длину строки, чтобы избежать переполнения стека, 250 символов кириллицей
77-
char encodedString[len*3];
78-
unsigned int p = 0;
76+
int buffer_size = len * 3 < TELEGRAM_MAX_LENGTH ? len * 3: TELEGRAM_MAX_LENGTH;
77+
char* encodedString = (char*) malloc(buffer_size * sizeof(char));
78+
char* p = encodedString;
7979
char c;
8080
char code0;
8181
char code1;
82-
for (unsigned int i=0; i < len; i++) {
82+
for(unsigned int i=0; i < len; i++) {
83+
if(buffer_size+encodedString-p < 3) break;
8384
c=str.charAt(i);
84-
// if(c == ' ') {
85-
// encodedString[p++] = '+';
86-
// } else
8785
if(params && (c == '&' || c == '=')) {
88-
encodedString[p++] = c;
86+
*p++ = c;
8987
} else
9088
if(isalnum(c)) {
91-
encodedString[p++] = c;
89+
*p++ = c;
9290
} else {
9391
code1=(c & 0xf)+'0';
9492
if((c & 0xf) > 9) {
@@ -99,13 +97,15 @@ String urlEncode(String str, bool params = false) {
9997
if(c > 9) {
10098
code0=c - 10 + 'A';
10199
}
102-
encodedString[p++] = '%';
103-
encodedString[p++] = code0;
104-
encodedString[p++] = code1;
100+
*p++ = '%';
101+
*p++ = code0;
102+
*p++ = code1;
105103
}
106104
}
107-
encodedString[p++] = '\0';
108-
return String(encodedString);
105+
*p = 0;
106+
String result = String(encodedString);
107+
free(encodedString);
108+
return result;
109109
}
110110

111111
// Обработка входящего сообщения телеграмм

0 commit comments

Comments
 (0)