SD CARD (Регистратор данных)
- Войдите на сайт для отправки комментариев
Пнд, 29/05/2017 - 14:33
Написал подобие регистратора, не отрабатывает как нужно:
#include <SPI.h> #include <SD.h> File sFile; long id = 1; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); Serial.print("Initializing SD card..."); pinMode(8, OUTPUT); pinMode(10, OUTPUT); // установить SS вывод как выходящий pinMode(13, OUTPUT); digitalWrite(8, HIGH); digitalWrite(10, HIGH); // Выключить чип w5100 if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); String sHeader = "Id, Light, Temp, Hum"; if (SD.exists("log.csv")) SD.remove("log.csv"); // delete the file: sFile = SD.open("log.csv", FILE_WRITE); if (sFile) sFile.println(sHeader); sFile.close(); } void loop() { String sData = String(id) + ", " + String(id + 10) + ", " + String(id + 20) + ", " + String(id + 30); LEDS(); sFile = SD.open("log.csv", FILE_WRITE); if (sFile) sFile.println(sData); Serial.println(sData); sFile.close(); id += 1; delay(1000); } void LEDS() { if (digitalRead(13)) digitalWrite(13, 0); else digitalWrite(13, 1); }
1. Для индикации процесса записи данных пытаюсь мигать встроенным светодиодом на 13-м порту, не работает.
2. При открытии Serial Port Monitor счетчик записи данных начинает дозаписывать файл заного, наприме: Прошло 10 строк записи в текстовый файл на SD, после входа через монитор Serial Port Monitor происходит процесс заного, от 1 до ...
Кто может подсказать причины?
При открытии монитора по сути происходит перезагрузка ардуины. Это нормально. Открывайте монитор заранее.
Понятно, значит чтобы небыло сбоев в логах целесообразно либо заранее включать монитор и не вырубать его, либо по факту, отрубать ардуину и смотреть что в файле...
Как быть со светодиодом? Без работы с SD он мигает как нужно.
Никак не быть. Вы же не потрудились написать что с ним не так: не мигает вовсе, мигает редко/часто ... вообще, в чём проблема?
Скорее всего беда в том, что Вы используете аппаратный SPI для работы с картой, а значит 13 пин у Вас занят. и в процессе записи будет светиться сам по себе. Нет?
Да, использую плату Ethernet w5100 через SPI...
Чем занят порт 13??
Светодиод не горит вовсе.
Как быть?
Чем занят порт 13??
Тактированием SPI. Вы документацию совсем не читаете? Прямо на этом сайте? RTFM || GTFO
Как быть?
Как хотите.
Ардуин связывается как с W5100 и SD-картой, используя шину SPI (через коллектор ICSP). Это на цифровых штырей 10, 11, 12 и 13 на Uno и штифтами 50, 51, и 52 на Mega. На обеих платах, контакт 10 используется для выбора W5100 и пин-код 4 для SD-карты. Эти контакты не могут быть использованы для общего ввода / вывода.
По описанию получается нельзя переконфигурировать пин 4 и 10, они используються для SD и Ethernet. Меня интересует пин 13, значит его необходимо выставить в OUTPUT (pinMode(13, OUTPUT);) ив HIGH?
Ещё раз для тех, кто в танке - при работе с интерфейсом SPI использовать 13 пин нельзя, т.к. он задействован под сигнал тактирования (SCK).
Меня интересует пин 13, значит его необходимо выставить в OUTPUT (pinMode(13, OUTPUT);) ив HIGH?
Я Вам дал ссылку на документацию - Вы её прочитали?
Ответ на Ваш вопрос: НЕТ. Его необходимо вообще не трогать грязными руками! Не трогать, от слова совсем!
И ещё раз, читайте документацию! RTFM || GTFO