Собрал устройство для записи параметров организма человека.
Состав прибора:
- Iskra nano
- Датчик пульса
- Кожно-гальванический датчик
- Акселерометр
- Часы точного времени
- Плата питания
- Картридер SD
Т.к. не имею базовых знаний в программировании собрал скетч, все подключаемые модули работают, но у меня не получается записывать логи с датчиков на SD. Помогите дописать скетч, желательно, чтобы лог с каждого датчика записывался в отдельный файл на SD.
Мой скетч:
// Watch video here: https://www.youtube.com/watch?v=O5Ye5xJF44c
/*
GSR connection pins to Arduino microcontroller
Arduino GSR
GND GND
5V VCC
A2 SIG
D13 RED LED
*/
/*
GSR, standing for galvanic skin response, is a method of
measuring the electrical conductance of the skin. Strong
emotion can cause stimulus to your sympathetic nervous
system, resulting more sweat being secreted by the sweat
glands. Grove – GSR allows you to spot such strong emotions
by simple attaching two electrodes to two fingers on one hand,
an interesting gear to create emotion related projects, like
sleep quality monitor. http://www.seeedstudio.com/wiki/Grove_-_GSR_Sensor
*/
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулями IMU
#include <TroykaIMU.h>
// пульс
#include <iarduino_SensorPulse.h>
// библиотека для работы с часами реального времени
#include "TroykaRTC.h"
#include <SPI.h>
#include <SD.h>
// размер массива для времени
#define LEN_TIME 12
// размер массива для даты
#define LEN_DATE 12
// размер массива для дня недели
#define LEN_DOW 12
#define SD_CS_PIN 10
#define LEVEL_LOW (0)
#define CH0_OFFSET (25)
// данные модулей для записи
String dataString = "";
// создаём объект для работы с часами реального времени
RTC clock;
// массив для хранения текущего времени
char time[LEN_TIME];
// массив для хранения текущей даты
char date[LEN_DATE];
// массив для хранения текущего дня недели
char weekDay[LEN_DOW];
char buffer[100] = {0};
static int ch0_data = LEVEL_LOW;
// подключение к контакту A0
iarduino_SensorPulse Pulse(A3);
// создаём объект для работы с акселерометром
Accelerometer accel;
const int LED = 13;
const int GSR = A2;
int threshold = 0;
int sensorValue;
//пульс
int PulseSensorPurplePin = 3; // выход Ардуино А3
int LED13 = 13; // светодиод на плате
int Signal;
int Threshold = 550; // значение для данных сенсора, после которого подаётся сигнал
void setup() {
{
long sum = 0;
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
delay(1000);
for (int i = 0; i < 500; i++)
{
sensorValue = analogRead(GSR);
sum += sensorValue;
delay(5);
}
threshold = sum / 500;
Serial.print("threshold =");
Serial.println(threshold);
}
{
// открываем последовательный порт
Serial.begin(115200);
// выводим сообщение о начале инициализации
Serial.println("Accelerometer init...");
// инициализация акселерометра
accel.begin();
// устанавливаем чувствительность акселерометра
// 2g — по умолчанию, 4g, 8g
accel.setRange(RANGE_2G);
// выводим сообщение об удачной инициализации
Serial.println("Initialization completed");
}
// пульс
{
// запуск последовательного порта
Serial.begin(9600);
// запуск датчика пульса
Pulse.begin();
}
{
// открываем последовательный порт
Serial.begin(9600);
// инициализация часов
clock.begin();
// метод установки времени и даты в модуль вручную
// clock.set(10,25,45,27,07,2005,THURSDAY);
// метод установки времени и даты автоматически при компиляции
clock.set(__TIMESTAMP__);
// что бы время менялось при прошивки или сбросе питания
// закоментируйте оба метода clock.set();
}
//sd
{
// открываем последовательный порт для мониторинга действий в программе
Serial.begin(9600);
// выводим сообщение в Serial-порт о поиске карты памяти
Serial.println("Initializing SD card...");
// если microSD-карта не была обнаружена
if (!SD.begin(SD_CS_PIN)) {
// выводим сообщение об ошибке
Serial.println("Card failed, or not present");
// don't do anything more:
return;
} else {
Serial.println("Card initialized.");
}
}
}
void loop() {{
int temp;
sensorValue = analogRead(GSR);
Serial.print("sensorValue=");
Serial.println(sensorValue);
temp = threshold - sensorValue;
}
{
// вывод направления и величины ускорения в м/с² по оси X
Serial.print(accel.readAX());
Serial.print("\t\t");
// вывод направления и величины ускорения в м/с² по оси Y
Serial.print(accel.readAY());
Serial.print("\t\t");
// вывод направления и величины ускорения в м/с² по оси Z
Serial.print(accel.readAZ());
Serial.print("\t\t");
Serial.println("");
delay(1000);
/*
// вывод направления и величины ускорения в м/с² по X, Y и Z
float x, y, z;
accel.readAXYZ(&x, &y, &z);
Serial.print(x);
Serial.print("\t\t");
Serial.print(y);
Serial.print("\t\t");
Serial.print(z);
Serial.println("");
delay(100);
*/
}
// пульс
{
// если датчик подключен к пальцу
if (Pulse.check(ISP_VALID) == ISP_CONNECTED) {
// печать аналогового сигнала
Serial.print(Pulse.check(ISP_ANALOG));
Serial.print(" ");
// печать значения пульса
Serial.print(Pulse.check(ISP_PULSE));
Serial.println();
}
else
Serial.println("error");
}
{
// запрашиваем данные с часов
clock.read();
// сохраняем текущее время, дату и день недели в переменные
clock.getTimeStamp(time, date, weekDay);
// выводим в serial порт текущее время, дату и день недели
Serial.print(time);
Serial.print("\t");
Serial.print(date);
Serial.print("\t");
Serial.println(weekDay);
// ждём одну секунду
delay(1000);
}
//сд
}
void saveSD() {
// создаём файл для записи
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// если файл доступен для записи
if (dataFile) {
// сохраняем данные
dataFile.println(dataString);
Serial.print(dataString);
// закрываем файл
dataFile.close();
// выводим сообщение об удачной записи
Serial.println("Save OK");
} else {
// если файл не доступен
Serial.println("Error opening datalog.txt");
}
}