Я работаю над очень важным школьным проектом, который представляет собой MP3-плеер с веб-интерфейсом и веб-сервером, использующим Arduino Mega. когда я хочу использовать любую функцию библиотеки Ethernet, мне приходится приостанавливать музыку, потому что экран Ethernet и экран mp3-плеера используют одну и ту же шину spi. Но когда я меняю громкость, это вызывает зависание музыки на 1 секунду. чтобы избежать этого, я создал новые функции, которые приостанавливают музыку, вызывают функцию ethernet lib и возобновляют.
bool clientAvailable(EthernetClient &client){
MP3player.pauseDataStream ();
bool a = client.connected();
MP3player.resumeDataStream ();
return a;
}
int clientConnected(EthernetClient &client){
MP3player.pauseDataStream ();
int a = client.available();
MP3player.resumeDataStream ();
return a;
}
void stopClient(EthernetClient &client){
MP3player.pauseDataStream ();
client.stop();
MP3player.resumeDataStream ();
}
void checkForClient(int loading){
String firstLine;
MP3player.pauseDataStream ();
EthernetClient client = server.available();
MP3player.resumeDataStream();
if (client) {
if(!loading){
Serial.println(F("new client")); // CRASH HERE
bool endLn(false);
char chr;
int i(0);
while (clientConnected(client)) {
char received[clientAvailable(client)+2];
while (clientAvailable(client)) {
MP3player.pauseDataStream ();
char c = client.read();
MP3player.resumeDataStream ();
received[i] = c;
Serial.print(c); // OR HERE
if(!endLn){
firstLine += c;
if (c == '\n'){
endLn = true;
}
}
++i;
}
received[i+1] = '\0';
i = 0;
if(endLn){
Serial.println();
endLn = false;
Serial.print(F("first line : "));
Serial.println(firstLine);
}
что я получаю на выходе:
new û192.168.0.123
в конце есть IP, потому что здесь происходит перезагрузка arduino, и это первое, что я показываю. Если я удалю строку "client.println(F("новый клиент")), ошибка возникнет в строке client.print(c) (после отображения 3 или 4 символов). Если я также удалю эту строку, она будет сбой где-то, но я не знаю, где.
Проверил память, у меня осталось вроде 600 байт на этом месте программы.
Любые идеи ?
Спасибо.