Проблема с чтением SD карты после использования библиотеки TMRpcm
- Войдите на сайт для отправки комментариев
Собрал самодельный SD шилд, подключил по этой схеме:
залил этот код, всё работало:
/* SD card read/write Этот пример показывает как читать и писать данные на и из файла на SD карточке Схема подключения * SD карточка подсоеденина к SPI шине: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 10 создано Ноябрь 2010 David A. Mellis обновлено 2 Декабря 2010 Tom Igoe и переведено в Марте 2011 Gleb Devyatkin Этот пример кода - народное достояние. */ #include <SD.h> File myFile; void setup() { Serial.begin(9600); Serial.print("Initializing SD card..."); // On the Ethernet Shield, CS is pin 4. It's set as an output by default. // Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT); if (!SD.begin(10)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // открываем файл. заметте, что только один файл может быть открыт за раз, // поэтому вы должны закрыть этот, чтобы открыть другой. myFile = SD.open("test.txt", FILE_WRITE); // если файл нормально открылся, запишем в него: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // закрываем файл: myFile.close(); Serial.println("done."); } else { // а если он не открылся, то печатаем сообщение об ошибке: Serial.println("error opening test.txt"); } // откроем файл снова, для чтения: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // читаем из файла, пока не достигнем конца файла: while (myFile.available()) { Serial.write(myFile.read()); } // закрываем файл: myFile.close(); } else { // а если не открылся, то пишем об ошибке: Serial.println("error opening test.txt"); } } void loop() { // больше делать нечего, но тут мог бы быть ваш код }
дальше подключил DO вместо 12 в 4 порт ардуины, решил воспроизвести аудиофайл wav формата. подключил динамик и залил тестовый код:
#include <SD.h> // need to include the SD library //#define SD_ChipSelectPin 53 //example uses hardware SS pin 53 on Mega2560 #define SD_ChipSelectPin 4 //using digital pin 4 on arduino nano 328, can use other pins #include <TMRpcm.h> // also need to include this library... #include <SPI.h> TMRpcm tmrpcm; // create an object for use in this sketch void setup(){ tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc Serial.begin(9600); if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized: Serial.println("SD fail"); return; // don't do anything more if not } tmrpcm.play("music"); //the sound file "music" will play each time the arduino powers up, or is reset } void loop(){ if(Serial.available()){ if(Serial.read() == 'p'){ //send the letter p over the serial monitor to start playback tmrpcm.play("music"); } } }
на выходе получаю "SD fail". залил первый код, предварительно правило подключив всё по первой схеме. на выходе initialization failed! Произвёл те же манипуляции, с другой ардуиной нано и ситуация точь в точь повторилась. проблема точно не в переходнике или плохих контактах, возможно что-то не так с библиотекой TMRpcm, так как до её использования SD карта читалась, а после - нет. компьютер SD карту видит и спокойно читает и записывает на неё данные. в чём может быть быть проблема?
Ошибочка: cs во втором случае подключил не 10, а в 4
Написано же, используется аппаратный SPI, потому пины MOSI, MISO, SCK нельзя никуда, как кроме туда куда написано. )) Вот CS можно перекидывать.
вот я голова дурная, с пинами напутал, всё заработало, спасибо