SD карта вывод строки & поиск значения в переменную

Есть код.

#include <SPI.h>
#include <SD.h>
 
const int chipSelect = 4;
 
void setup() {
Serial.begin(9600);
 
if( !SD.begin( chipSelect )){
Serial.println("initialization failed!");
return;
}
 
// открываем файл для чтения
File cdFile = SD.open("config");
if (cdFile) {
char conf_file[40];
// считываем все байты из файла и выводим их в COM-порт
while (cdFile.available()) {
Serial.write(cdFile.read());
}
// закрываем файл
cdFile.close();
} else {
// выводим ошибку если не удалось открыть файл
Serial.println("error opening config");
}
}

void loop() {
}

Который выводит в монитор порта, все что в файле config.

sensor1=0x28, 0xD, 0xAE, 0x9, 0x0, 0x0, 0x0, 0x56;
sensor2=0x28, 0x6A, 0xA2, 0xAA, 0x6, 0x0, 0x0, 0xC1;
sensor3=0x28, 0xFF, 0x64, 0x6, 0xC8, 0x24, 0xBD, 0xC;

Подскажите, как одну строку или адрес датчика(что после равно) передать в переменную?

Это другой код. В котором адрес датчика защит в скетч, интерес разделить. Для последующей замены датчиков.

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(9); // вход датчиков 18b20
DallasTemperature ds(&oneWire);

DeviceAddress sensor1 = {0x28, 0xD, 0xAE, 0x9, 0x0, 0x0, 0x0, 0x56};
DeviceAddress sensor2 = {0x28, 0x6A, 0xA2, 0xAA, 0x6, 0x0, 0x0, 0xC1};
DeviceAddress sensor2 = {0x28, 0xFF, 0x64, 0x6, 0xC8, 0x24, 0xBD, 0xC};
 
void setup() {
Serial.begin(9600);
ds.begin();
}
 
void loop() {
ds.requestTemperatures(); // считываем температуру с датчиков
    
 Serial.print("Sensor 1: ");
 Serial.print(ds.getTempC(sensor1)); // отправляем температуру
 Serial.println("C");
 
 Serial.print("Sensor 2: ");
 Serial.print(ds.getTempC(sensor2));
 Serial.println("C");
 
 Serial.print("Sensor 3: ");
 Serial.print(ds.getTempC(sensor3));
 Serial.println("C");
 
Serial.println();
delay(1000);
}

Вставь код по правилам форума!
Используй формат без надписей (sensor1 и тп), тогда просто прочитываешь очередной байт и присваиваешь соответсвующий переменной (формат тебе уже известен).

Это называется парсинг. Ищете в строке символ “=”, после него ищете “0х”, с этого места читаете два символа и конвертируете в целое число. Это будет первый байт адреса. И так с каждым из шести значений.

Чтобы не заниматься подобным онанизмом, файлы которые будет читать компьютер - надо сохранять в формате, удобном компьютеру, а не человеку. Этот адрес датчика в десять раз проще было бы прочитать, если бы вместо строки

в файле просто были бы записаны 6 байт, соответствующие шестнадцатеричным значениям этих цифр

О чем я выше и написал)))

1 лайк

Странные предпочтения. Делать не как удобно человеку, а “компьютеру”.
Там ведь кроме сенсор 1 или сенсор 2 может быть написано более приятное человеческому глазу Подвал, Теплица, Кухня. Или сведения какой датчик чему соответствует надо записывать на бумажке и клеить на холодильник?

Ну если данному человеку “удобнее” писать парсинг строк “переменная = значение” на ардуино - то почему бы и нет. Хотя мне кажется что к ТС-у это не относится.
Хотя вообще задача стандартная, можно и готовую либу поискать. Для ЕСП что-то подобное есть, как-то типа Preferences называется - для сохранения настроек в эмулированном ЕЕПРОМе
“но это не точно” (с)

Я посмотрел, для ардуино тоже есть библиотеки для чтения конфигов из SD. Но тут как обычно, чтобы понять - годная она или не очень, надо потратить время. А чтобы понять, зачастую надо иметь знания большие, чем необходимы для написания своего парсинга. Поэтому из интереса посмотрел, но советовать ТС не стал.

Ну дык надо написать «приложение» для ПК, где все эти «конфиги» можно будет править с понятными человеку надписями. Мне кажется это проще написания парсера, хотя…

Мак адрес это 48-разрядный (6 октетов) MAC-адрес, который разделён на четыре части.
Адрес датчика 8 октетов(октет всегда равен 8 битам)

Как лучше передать адрес?

Поищу как делать парсинг.

Сможете ссылку написать на библиотеку?

Мысль именно в конфиге, быстро менять данные датчиков.

Мне было просто интересно, что есть готового, увидел что готовое есть, но советовать новичку мне кажется не целесообразно. Т.к. если это учебный проект, то как раз на практике нужно освоить базовые операции со строками. Впрочем если не учебный, то все равно надо это знать и уметь.
Библиотеки искал по запросу “arduino read settings from sdcard” Посмотрел пару из начала списка

Ну, почему обязательно на холодильник? На телевизор тоже можно.

2 лайка

Датчики 18b20( 1-Wire) и sht3x, sht21(I2C)
В розетках RJ45 на них наклеены стикеры от штрих принтера с номерами.

Спасибо. Посмотрю, потестирую.

а у кого нет телевизора?

Придется купить. Не динозавры, чай :slightly_smiling_face:

1 лайк

лет 20 не смотрю уж как

А кто про посмотреть? Это чтоб было куда бумажки клеить

так и некуда - констатирую окинув окружение взглядом

На стену. Под потолок. Напротив кровати. Самое ему место. Фильмы с ютуба смотреть :sweat_smile: