классификация данных с ардуино
Я хочу классифицировать свои данные с 3 датчиков с помощью Arduino, чтобы каждый раз, когда я ввожу конкретную дату или час, или это может быть период времени, например, 10 дней назад, он показывал мне точные данные. Другими словами, я хочу классифицировать свои данные, чтобы всякий раз, когда мне нужна каждая деталь данных, я мог бы получить ее, введя информацию о годе, дате, времени. Я также не хотел, чтобы мои данные находились в отдельных файлах и метках времени. Я хочу иметь возможность делать это в одном файле и выполнять поиск внутри этого файла...
#include "RTClib.h"
#include <SD.h>
#include <SPI.h>
RTC_DS1307 rtc;
const int chipSelect = 10;
File dataFile;
String print_time(DateTime timestamp) {
char message[120];
int Year = timestamp.year();
int Month = timestamp.month();
int Day = timestamp.day();
int Hour = timestamp.hour();
int Minute = timestamp.minute();
int Second= timestamp.second();
sprintf(message, "%d-%d-%d %02d:%02d:%02d", Month,Day,Year,Hour,Minute,Second);
return message;
}
void setup(){
Serial.begin(9600);
pinMode(chipSelect, OUTPUT);
if (!SD.begin(chipSelect)){
Serial.println("Error: SD card would not initiate.");
}
rtc.begin();
if (!rtc.isrunning()){
Serial.println("Clock is not running");
}
dataFile = SD.open("log0.csv", FILE_WRITE);
if (!dataFile){
Serial.println("Could not open file.");
}
}
void loop(){
Datetime now = rtc.now();
dataFile.println(print_time(now));
delay(3000);
}
@201, 👍0
Обсуждение2 ответа
- Создать один файл (регистратор SD?)
- Когда данные получены от датчика, сохраните их в файле и сохраните следующую информацию:
- Отметка даты/времени
- Какой датчик
- Данные датчика
- После получения запроса данных (возможно, содержащего метки времени начала и окончания) проанализируйте файл и начните возвращать информацию для этих меток даты/времени в пределах запрошенных меток времени начала/окончания.
Если шаг 3 занимает слишком много времени (и приводит к отсутствию новых измерений датчиков), вам необходимо выполнять считывание меньшими шагами между считыванием показаний датчиков.
Это та часть, которую я не понимаю. Как мне написать код... извините, я новичок в ардуино... ваша теория написания кода полностью соответствует тому, о чем я думал, но у меня возникли проблемы с ее написанием..., @201
Разделите вашу проблему на более мелкие части (как я показал выше. Может быть, даже лучше сначала попробовать файловую часть на ПК, где у вас есть простые средства отладки без использования MCU. Таким образом, попробуйте написать файл, добавьте в него байты, притворяясь, что они приходят от датчиков.Когда у вас есть эта работа, добавьте конкретные части MCU (чтение данных датчиков и использование SD-библиотеки из Arduino вместо этого).Написать весь код немного выходит за рамки этого форума (слишком широкий слишком)., @Michel Keijzers
Я написал код с меткой времени и данными. Теперь вы можете помочь мне со следующей частью? Как я могу попросить Arduino отправить мне временную метку, которую я хочу? Я загрузил свой код. Теперь я прошу Arduino отправить мне последние 10 временных меток... есть предложения?, @201
Вы должны добавить код к вопросу, а не как ответ. То, как вы хотите «запросить это у Arduino», зависит от того, что вы хотите… вы хотите добавить клавиатуру, или набор переключателей, или клавиатуру какого-либо типа к Arduino, или последовательный порт, или другим способом (WIFI, USB)? Я не знаю ваших требований., @Michel Keijzers
Спасибо за руководство. Я добавил код к своему вопросу... Я хочу спросить Arduino через модуль Bluetooth, но я не знаю связанного кода для этой цели... Какой конкретный код считывает отметку времени для меня?, @201
Я никогда не использовал Bluetooth, но думаю, что это отдельный «мини-проект». Попробуйте выполнить следующие шаги: 1. Создайте (или лучше: найдите) какой-нибудь код, который отправляет что-то через BT (это не связано с Arduino). 2. Найдите код, который читает какое-то сообщение BT. 3. Отправьте что-нибудь через BT. 4 Проверьте, приходит ли он. 5. Измените отправляемое сообщение на то, в котором есть метка времени начала и окончания. 6. Измените код на Arduino для анализа этих меток времени. 7. Получите сообщения датчиков с SD-карты. 8. Отправьте его через BT. 9 Сделайте что-нибудь с ним на стороне приемника., @Michel Keijzers
Как я могу сделать номер 5 и 6? Вы можете направить меня?, @201
Шаг 5. К сообщению, которое вы отправляете на Arduino (в примере, вероятно, ничего полезного), вы добавляете несколько дополнительных байтов (например, год 0-99, месяц 1-12, день 1-31), таким образом, 3 байта. Шаг 6: Когда вы получаете сообщение, вы извлекаете эти 3 байта из сообщения и помещаете их в три (байтовые) переменные: год, месяц и день. Затем вы можете использовать эти 3 переменные для фильтрации данных датчика., @Michel Keijzers
Благодарю за ваш ответ. Итак, может ли arduino понять отметку времени, которую я пишу, как время начала и окончания?, @201
Если вы запрограммируете его реагировать на метки времени, да., @Michel Keijzers
Как мне это сделать? Вы можете направить меня?, @201
Как в 4 комментариях выше (вставьте переменные и ответьте на них)., @Michel Keijzers
Если вы планируете постоянно получать данные с фиксированной скоростью, я предлагаю вам
не добавляйте временные метки к отдельным записям. Вместо этого сохраните начальный
отметка времени и период выборки данных в двоичном заголовке, за которым следует
двоичные записи фиксированного размера. Затем, когда вы хотите получить запись
для времени t
вы можете использовать fseek()
справа от
uint32_t offset = header_size
+ record_size * (t - initial_time) / sampling_period;
Если есть небольшая вероятность того, что вы не сможете записать некоторые данные точки, вы можете захотеть иметь логическое значение в каждой записи, которое сообщает, данные действительны. Затем вы можете заполнить недостающие данные недействительными записи.
Если ваш Arduino может неожиданно включаться и выключаться, то отметка времени каждой записи может быть лучшим вариантом, но поиск конкретного запись, скорее всего, будет очень медленной.
Проголосовал за ваш ответ, действительно, если данные поступают непрерывно и с фиксированной скоростью, ваше решение лучше. В моем решении я предполагал, что данные с датчиков могут поступать случайным образом и, возможно, неравномерно., @Michel Keijzers
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Ошибка переменной does not name a type!
- Использование YS-IRTM с Arduino Uno
- IRRemote отправлять и получать тем же Arduino
- Онлайн-проблема подключения Arduino к базе данных MySQL
- Объявленная переменная внутри void setup не видится в void loop
- 7-сегментный дисплей с потенциометром
- Акцептант векселей ИКТ
Отвечает ли это на ваш вопрос? отправка данных конкретной даты из щита регистратора данных в последовательный порт, @Juraj
так что это ^ - новый автоматический комментарий для "возможного дубликата", @Juraj
@Juraj предложенный вами вопрос отличается от этого. Я имею в виду, например, файл с 1000 сохраненными данными. скажем, вам нужны данные с 10:00 2 декабря до настоящего времени. это главный вопрос... возможность классифицировать данные и задавать время сохранения данных. Здесь я должен написать код, чтобы моя программа понимала ВРЕМЯ, когда я ее спрашиваю..., @201