SD CARD (Регистратор данных)

mostApi
Offline
Зарегистрирован: 29.05.2017

Написал подобие регистратора, не отрабатывает как нужно:

#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 до ...

Кто может подсказать причины?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

При открытии монитора по сути происходит перезагрузка ардуины. Это нормально. Открывайте монитор заранее.

mostApi
Offline
Зарегистрирован: 29.05.2017

Понятно, значит чтобы небыло сбоев в логах целесообразно либо заранее включать монитор и не вырубать его, либо по факту, отрубать ардуину и смотреть что в файле...

Как быть со светодиодом? Без работы с SD он мигает как нужно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Никак не быть. Вы же не потрудились написать что с ним не так: не мигает вовсе, мигает редко/часто ... вообще, в чём проблема?

Скорее всего беда в том, что Вы используете аппаратный SPI для работы с картой, а значит 13 пин у Вас занят. и в процессе записи будет светиться сам по себе. Нет?

mostApi
Offline
Зарегистрирован: 29.05.2017

Да, использую плату Ethernet w5100 через SPI...

Чем занят порт 13??

Светодиод не горит вовсе.

Как быть?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mostApi пишет:

Чем занят порт 13??

Тактированием SPI. Вы документацию совсем не читаете? Прямо на этом сайте? RTFM || GTFO

mostApi пишет:

Как быть?

Как хотите. 

 

mostApi
Offline
Зарегистрирован: 29.05.2017

Ардуин связывается как с 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?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ещё раз для тех, кто в танке - при работе с интерфейсом SPI использовать 13 пин нельзя, т.к. он задействован под сигнал тактирования (SCK).

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mostApi пишет:

Меня интересует пин 13, значит его необходимо выставить в OUTPUT (pinMode(13, OUTPUT);) ив HIGH?

Я Вам дал ссылку на документацию - Вы её прочитали?

Ответ на Ваш вопрос: НЕТ. Его необходимо вообще не трогать грязными руками! Не трогать, от слова совсем!

И ещё раз, читайте документацию!  RTFM || GTFO