Подключил к Orduino-Nano v1.1 SD карту, так, как написано в примерах для SD-card к Arduino-IDE. Выяснилось, что одновременно Serial и SD не работают, т.е. в этих примерах приходится закомментировать все обращения к Serial, только тогда запись-чтение SD карты выполняется, так, как должно быть. В чем тут дело?
А с помощью чего вы подключали SD-карту? Какой модуль? Если наш, то что-то тут не то: он использует SPI-коммуникацию, которая не затрагивает serial-пины 0 и 1.
Подключал с помощью нескольких резисторов для выравнивания уровней (такие схемы в интернете присутствуют по теме SD Card и Arduino). Но проблема решилась, оказывается было просто переполнение RAM.
Проблема то для контроллеров с маленькими ресурсами, мне кажется стандартная, только вот непонятно, почему об этом ничего в стандартных примерах не указывается, да и в сети не так много информации об этом. По крайней мере для меня теперь ясно, что если поведение программы совсем неправильное, надо посмотреть и на RAM.
Да проблема неприятная. 1. Как вариант можно хранить большие строки в памяти программ. 2. Можно попробовать оптимизировать код (последний раз таким образом я выиграл около 300 байт). 3. Можно "подправить" стандартные библиотеки и таким образом выиграть немного SRAM, например вот. 4. На этапе отладки отслеживаю свободную SRAM так: int freeRam () { extern int __heap_start, *__brkval; int v; return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }
Когда я делал из Arduino крошечный web-server, я упаковывал исходники web-страниц в gzip. Существенно помогло.
Пример прямо сейчас не дам — он давно уничтожен, но наводок набросаю. Во-первых, вам нужно в принципе научить Arduino + Ethernet Shield отвечать на 80-м порту незамысловатой HTML-страницей вроде Hello world. Пример такой штуковины есть на официальной вики. Далее, когда всё получится, вам нужно снизить затраты по памяти на хранение исходников web-страниц. Тут нет никакой магии Arduino, тут магия HTTP-протокола. Браузеры умеют понимать контент, если он приходит в gzip. Главное, намекнуть ему на это, указав в HTTP Header'ах ответа с Arduino Код (Text): Content-Encoding: gzip Затем, в теле ответа, вместо сырой строки “<html><body>Hello world</body></html>” отдаёте Код (Text): #define MY_PAGE "\x1F\x8B\x08\x00\x9B\x8F\x5E\x4E\x00\x03\xF3\x48\xCD\xC9\xC9\x57\x28\xCF\x2F\xCA\x49\xE1\x02\x00\xD5\xE0\x39\xB7\x0C\x00\x00\x00" где эта кракозябра — это то, что вы получите от gzip'ания своей страницы заранее, до компиляции. В линуксе для этого можно воспользоваться: Код (Text): cat my-page.html | gzip -af | hexdump -v -e '"\x" 1/1 "%02X"' ; echo Уверен и в других ОСях есть +/- удобные способы