2

Сила Пикабу, нужна помощь работы Arduino с sd-картой

Сила Пикабу, нужна помощь работы Arduino с sd-картой 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();  // стираем информацию на дисплее

}

}