Сила Пикабу, нужна помощь работы Arduino с sd-картой
Приветствую!
Надеюсь на помощь в приспособе на Arduino.
Собрана эта приблуда для измерения сопротивления на делителе напряжения...
Необходимо добавить возможность записывать полученные измерения на sd-карту по следующему принципу:
1) Нажимаем на кнопку 1- создается и открывается файл например с именем izm1.txt
2) При нажатии на кнопку 2 - в созданный файл записывается зафиксированное значение с делителя напряжения (пин А0) со смещением на новую строку... так мне необходимо будет делать n количество раз.
3) Нажимаем на кнопку 3 - все записанные значения сохраняются и файл закрывается
4) Нажимаем на кнопку 1- создается и открывается файл, но уже с новым именем izm2.txt
Скетч:
(реализовано только измерение сопротивления с выводом на дисплей 1602, а также "вставлена-ли sd-карта или нет" )
//дисплей
#include <Wire.h> // подключаем библиотеку для работы с шиной I2C (для LCD дисплея)
#include <LiquidCrystal_I2C.h> // библиотека дисплея 1602 по I2C
LiquidCrystal_I2C lcd(0x27,16,2); // объявляем переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2) SDA - A4 SCL - A5
//sd карта
#include <SPI.h> // подключаем библиотеку для работы с шиной SPI (для адаптера карт MicroSD)
#include <SD.h> // подключаем библиотеку для работы с адаптером карт MicroSD
bool MSD_result; // объявляем переменную для хранения состояния адаптера карт MicroSD
const uint8_t PIN_adapterSD_CS = 10; // указываем номер вывода CS шины SPI инициирующего передачу данных с адаптером карт MicroSD
//значения для делителя напряжения на определения номинала неизвестного резистора
#define RESISTORPIN A0 // Устанавливаем пин съема сопротивления
#define SERIESRESISTOR 100000 // Устанавливаем значение известного резистора в ОМах
void setup()
{
MSD_result = SD.begin(PIN_adapterSD_CS); // инициируем SD карту с указанием номера вывода CS
lcd.init(); // инициируем LCD дисплей
lcd.backlight(); // Включаем подсветку дисплея
lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку,6 символ
lcd.print("Pribor"); // выводим текст "Pribor"
lcd.setCursor(5, 1); // Устанавливаем курсор на 2 строку,5 символ
lcd.print("ver.1.0"); // выводим текст "ver. 1.0"
delay(3000); // ждём 3 секунды
lcd.clear(); // стираем информацию на дисплее
lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку,6 символ
lcd.print("Pribor"); // выводим текст "Pribor"
lcd.setCursor(0,1); // Устанавливаем курсор на 2 строку,0 символ
lcd.print(F("SD-card ")); // выводим текст "SD-card"
lcd.print(MSD_result?"OK":"NOT CARD"); // выводим состояние карты MicroSD: "OK" или "NOT CARD"
delay(3000); // ждём 3 секунды
lcd.clear(); // стираем информацию на дисплее
}
void loop()
{
float r = analogRead(RESISTORPIN);
r = ((1023 / r)-1); // преобразуем полученные значения в сопротивление
r = (SERIESRESISTOR / r)/1000;
if((SERIESRESISTOR/2)>r>0.1)
{lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку,6 символ
lcd.print("Pribor"); // Устанавливаем курсор на 2 строку,9 символ
lcd.setCursor(9, 1);
lcd.print("kOM");
lcd.setCursor(5, 1); // Устанавливаем курсор на 2 строку,5 символ
lcd.print( r ); // Выводим на экран значение
delay(1000);
lcd.clear(); // стираем информацию на дисплее
}
else
{
lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку,6 символ
lcd.print("Pribor"); // Устанавливаем курсор на 2 строку,9 символ
lcd.setCursor(0, 1);
lcd.print("net datchika");
delay(1000);
lcd.clear(); // стираем информацию на дисплее
}
}