Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Чтение и запись произвольных данных на SD карту

Материал из Онлайн справочника
Перейти к: навигация, поиск

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Чтение и запись произвольных данных на SD карту

Данный пример демонстрирует чтение запись произвольных данных на SD-карту с использованием платы Arduino Uno и любой платы расширения(шилд), работающей с SD-картами или MicroSD-картами(Cooking HAcks Micro SD shiled, Arduino Wireless SD shiled, Arduino Ethernet SD shiled, Arduino Wi-Fi SD shield, Adafruit data logging shield, SparkFun MicroSD shield).

Необходимые компоненты

Монтажная схема

Соедините выбранную вами плату расширения с платой Arduino Uno.

Код

  1. #include <SD.h>                                           // Подключаем библиотеку SD
  2.  
  3. /*
  4. Используемые по умолчанию контакты для библиотеки SD.
  5. Если вы используете Arduino Ethernet SD shiled или любую
  6. другую плату расширения использующую эти контакты,
  7. то ничего менять не надо
  8. MOSI = 11 контакт
  9. MISO = 12 контакт
  10. SCLK = 13 контакт
  11. */
  12.  
  13. #define CS_PIN 10                                         // Контакт выбора
  14.                                                           // Примечание: если вы используете Arduino Ethernet SD shiled
  15.                                                           // необходимо изменить номер контакта на 4.
  16.                                                           // Если ваша плата расширения использует другой контакт
  17.                                                           // вам необходимо его изменить на правильный.    
  18.  
  19.  
  20. int refresh_rate = 5000;                                  // Скорость опроса по умолчанию 5 сек.
  21.  
  22. void setup()
  23. {
  24.   Serial.begin(9600);                                     // Инициализация последовательного соединения на скорости 9600 бод
  25.   Serial.println("Initializing Card");                    // Распечатываем в мониторе последовательного порта "Initializing Card"("Инициализация карты")
  26.   pinMode(CS_PIN, OUTPUT);                                // Определяем CS(контакт выбора) контакт как выход
  27.  
  28.   // Инициализация SD-карты
  29.   if (!SD.begin(CS_PIN))
  30.   {
  31.     Serial.println("Card Failure");                        // Распечатываем в мониторе последовательного порта "Card Failure"("Сбой подключения к SD-карте")
  32.     return;                                                // Останавливаем выполнение программы
  33.   }
  34.   Serial.println("Card Ready");                            // Распечатываем в мониторе последовательного порта "Card Ready"("Карта готова к работе")
  35.  
  36.   //Чтение конфигурационного файла speed.txt
  37.   File commandFile = SD.open("speed.txt");
  38.   if (commandFile)
  39.   {
  40.      Serial.println("Reading Command File");               // Распечатываем в мониторе последовательного порта "Reading Command File"("Чтение конфигурационного файла")
  41.  
  42.      while(commandFile.available())
  43.      {
  44.        refresh_rate = commandFile.parseInt();
  45.      }
  46.      Serial.print("Refresh Rate = ");                     // Распечатываем в мониторе последовательного порта "Refresh Rate = " ("Частота обновления = ")
  47.      Serial.print(refresh_rate);                          // Распечатываем в мониторе последовательного порта значение переменной refresh_rate
  48.      Serial.println("ms");                                // Распечатываем в мониторе последовательного порта "ms"("мс.")
  49.      commandFile.close();                                 // Закрываем файл
  50.   }  
  51.   else
  52.   {
  53.     Serial.println("Could not read command file.");       // Распечатываем в мониторе последовательного порта "Could not read command file."("Не удалось прочитать конфигурационный файл")
  54.     return;                                               // Останавливаем выполнение программы
  55.   }
  56. }
  57.  
  58. void loop()
  59. {
  60.   long timeStamp = millis();                              // Временная метка
  61.   String dataString = "Hello World!";
  62.  
  63.   // Открываем файл и записываем в него данные
  64.   File dataFile = SD.open("log.csv", FILE_WRITE);
  65.   if (dataFile)
  66.   {
  67.     dataFile.print(timeStamp);
  68.     dataFile.print(",");
  69.     dataFile.println(dataString);
  70.     dataFile.close();                                    // Внимание! Данные не будут записаны, пока вы не закроете соединение!
  71.  
  72.     // Распечатываем в мониторе последовательного порта те же данные для отладки
  73.     Serial.print(timeStamp);
  74.     Serial.print(",");
  75.     Serial.println(dataString);
  76.   }
  77.   else
  78.   {
  79.     Serial.println("Couldn't open log file");           // Распечатываем в мониторе последовательного порта "Couldn't open log file"("Не удалось открыть файл журнала")
  80.   }
  81.   delay(refresh_rate);                                  // Задержка длительностью refresh_rate
  82. }

См.также

Внешние ссылки