Arduino.Библиотеки
https://t.me/HotCheatSheetEEPROM
Позволяет записывать и считывать информацию из памяти устройства.
Функции
read() — считывает байт из EEPROM. Те байты, которые никогда не подвергались записи, имеет значение 255.
Синтаксис:
EEPROM.read(address)
Параметры:
address: адрес байта, значение которого необходимо считать (int)
Возвращаемые значения:
значение указанного байта (byte)
Пример:
#include
int a = 0;
int value;
void setup()
{
Serial.begin(9600);
}
void loop()
{
value = EEPROM.read(a);
Serial.print(a);
Serial.print("\t");
Serial.print(value);
Serial.println();
a = a + 1;
if (a == 512)
a = 0;
delay(500);
}
write() — записывает байт в EEPROM.
Синтаксис:
EEPROM.write(address, value)
Параметры:
address: адрес байта (нумерация с 0), значение которого необходимо записать (int).
value: записываемое значение, от 0 до 255 (byte)
Возвращаемые значения:
нет
Пример:
#include
void setup()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, i);
}
void loop()
{
}
SD
Позволяет считывать и записывать информацию на SD-карту памяти (например, на плате расширения Arduino Ethernet).
Класс SD
Класс SD содержит функции для доступа к SD-карте памяти и позволяет совершать различные операции над файлами и каталогами.
begin() — инициализирует библиотеку и SD-карту памяти.
Синтаксис:
SD.begin()
SD.begin(cspin)
Параметры:
cspin (не обязательный параметр): номер вывода, подключенного к линии CS SD-карты памяти; по умолчанию равен номеру вывода SS аппаратной шины SPI.
Возвращаемые значения:
При успешном выполнении функция возвращает true, в противном случае - false.
exists() — проверяет существование на SD-карте указанного файла или директории.
Синтаксис:
SD.exists(filename)
Параметры:
filename: имя файла, существование которого необходимо проверить. Имя может включать в себя директории, разделенные прямым слешем "/".
Возвращаемые значения:
Если указанный файл или директория существует - функция возвращает true, в противном случае - false.
mkdir() — создает на SD-карте указанную директорию. Если путь к указанной директории содержит несуществующие папки - функция также их создает. Например, команда SD.mkdir("a/b/c") приведет к созданию трех папок: a, b и с.
Синтаксис:
SD.mkdir(filename)
Параметры:
filename: имя создаваемой директории. Имя может включать в себя вложенные папки, разделенные прямым слешем "/".
Возвращаемые значения:
Если директория успешно создана - функция возвращает true, в противном случае - false.
open() — функция открывает файл на SD-карте памяти.
Синтаксис:
SD.open(filepath)
SD.open(filepath, mode)
Параметры:
filename: имя открываемого файла. Может содержать директории, разделенные прямым слешем "/" - char *
mode (не обязательный параметр): режим открытия файла, по умолчанию - FILE_READ - byte. Может принимать одно из следующих значений:
FILE_READ: открыть для чтения с начала файла.
FILE_WRITE: открыть для чтения или записи в конец файла..
Возвращаемые значения:
Объект File, ссылающийся на открытый файл; если файл открыть не удалось, возвращаемый объект будет эквивалентен значению false (в логическом смысле). Т.е. значение, возвращаемое этой функцией, можно анализировать с помощью условного оператора if.
remove() — функция удаляет файл с SD-карты.
Синтаксис:
SD.remove(filename)
Параметры:
filename: имя удаляемого файла. Может содержать директории, разделенные прямым слешем "/".
Возвращаемые значения:
Если файл был успешно удален - функция вернет true, в противном случае - false. (Если указанный файл не существовал, возвращаемое значение может быть неопределенным).
rmdir() — удаляет директорию с SD-карты. Указываемая директория должна быть пустой.
Синтаксис:
SD.rmdir(filename)
Параметры:
filename: имя удаляемой директории. Может содержать вложенные папки, разделенные прямым слешем "/".
Возвращаемые значения:
Если удаление директории прошло успешно - функция вернет true, в противном случае - false. (Если указанная директория не существовала, значение, возвращаемое функцией, может быть неопределенным).
Класс File
Этот класс предназначен для чтения и записи данных в отдельные файлы на SD-карте памяти.
available() — функция проверяет наличие в файле байт, доступных для чтения.
Синтаксис:
file.available()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
Количество доступных для чтения байт (int).
close() — функция закрывает файл, удостоверившись, что все записанные в него данные физически сохранены на SD-карту памяти.
Синтаксис:
file.close()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
нет
flush() — позволяет убедиться, что все записанные в файл данные физически сохранены на SD-карту памяти. Эта же операция выполняется автоматически при закрытии файла.
Синтаксис:
file.flush()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
нет
peek() — считывает из файла байт данных, не перемещая указатель текущей позиции файла на следующий символ. Т.е. при многократном вызове peek() функция будет возвращать одно и то же значение.
Синтаксис:
file.peek()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
Байт данных (или символ), либо -1, если таковой отсутствует.
position() — функция позволяет узнать текущее положение указателя внутри открытого файла (т.е. позицию, с которой будет осуществляться чтение или запись следующего байта).
Синтаксис:
file.position()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
Номер текущей позиции указателя внутри файла (unsigned long)
print() — функция выводит данные в файл, предварительно открытый для записи. При этом числа выводятся как последовательность цифр, каждая из которых является ASCII-символом (например, число 123 будет отправлено как последовательность из трех символов '1', '2', '3').
Синтаксис:
file.print(data)
file.print(data, BASE)
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
data: данные, которые необходимо вывести (char, byte, int, long или string)
BASE (не обязательный параметр): система счисления, в которой необходимо выводить числа:
BIN для двоичной системы (основание 2)
DEC - для десятичной (основание 10)
OCT - для восьмеричной (основание 8)
HEX - для шестнадцатеричной (основание 16)
Возвращаемые значения:
byte
print() возвращает количество записанных байт. Считывать это значение не обязательно.
println() — функция выводит в файл данные, заканчивающиеся символом перевода каретки и пустой строкой. Перед вызовом функции файл должен быть предварительно открыт для записи.
Синтаксис:
file.println()
file.println(data)
file.print(data, BASE)
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
data (не обязательный параметр): данные, которые необходимо вывести (char, byte, int, long или string)
BASE (не обязательный параметр): система счисления, в которой необходимо выводить числа:
BIN для двоичной системы (основание 2)
DEC - для десятичной (основание 10)
OCT - для восьмеричной (основание 8)
HEX - для шестнадцатеричной (основание 16).
Возвращаемые значения:
byte
println() возвращает количество записанных байт. Считывать это значение не обязательно.
seek() — функция изменяет положение текущей позиции внутри файла. Задаваемая позиция должна лежать в пределах от 0 до текущего размера файла (включительно).
Синтаксис:
file.seek(pos)
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
pos: позиция, в которую необходимо переместить указатель (unsigned long)
Возвращаемые значения:
В случае успешного выполнения функция возвращает true, в противном случае - false (boolean).
size() — возвращает размер файла.
Синтаксис:
file.size()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
Размер файла в байтах (unsigned long).
read() — функция считывает байт данных из открытого файла.
Синтаксис:
file.read()
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open()).
Возвращаемые значения:
Байт данных (или символ), либо -1, если таковых нет.
write() — записывает данные в файл.
Синтаксис:
file.write(data)
file.write(buf, len)
Параметры:
file: экземпляр класса File (возвращаемый функцией SD.open())
data: записываемый байт данных (byte), символ (char) или строка (char *)
buf: массив символов или байт
len: количество элементов массива
Возвращаемые значения:
byte
Функция write() возвращает количество записанных байт. Считывать этот параметр не обязательно.
isDirectory() — директории (или папки) технически являются особым видом файлов. Данная функция позволяет проверить, является ли указанный файл директорией или нет.
Синтаксис:
file.isDirectory()
Параметры:
file: экземпляр класса File (возвращаемый функцией file.open())
Возвращаемые значения:
boolean
Пример:
#include <SD.h>
File root;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}
void loop()
{
// после первоначальной настройки ничего не происходит.
}
void printDirectory(File dir, int numTabs) {
while(true) {
File entry = dir.openNextFile();
if (! entry) {
// больше нет файлов
//Serial.println("**nomorefiles**");
break;
}
for (uint8_t i=0; i<numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs+1);
} else {
// у файлов есть размер, в отличие от директорий
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
}
}
openNextFile() — Возвращает имя следующего файла или папки в пределах директории.
Синтаксис:
file.openNextFile()
Параметры:
file: экземпляр класса File, ссылающийся на директорию.
Возвращаемые значения:
char: имя следующего файла или папки в пределах директории.
Пример:
#include <SD.h>
File root;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}
void loop()
{
// после первоначальной настройки ничего не происходит.
}
void printDirectory(File dir, int numTabs) {
while(true) {
File entry = dir.openNextFile();
if (! entry) {
// больше нет файлов
Serial.println("**nomorefiles**");
}
for (uint8_t i=0; i<numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs+1);
} else {
// у файлов есть размер, в отличие от директорий
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
}
}
rewindDirectory() — функция позволяет вернуться к первому файлу в пределах директории. Как правило, используется вместе с функцией openNextFile().
Синтаксис:
file.rewindDirectory()
Параметры:
file: экземпляр класса File.
Возвращаемые значения:
нет
Пример:
#include <SD.h>
File root;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
SD.begin(10);
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}
void loop()
{
// после первоначальной настройки ничего не происходит.
}
void printDirectory(File dir, int numTabs) {
while(true) {
File entry = dir.openNextFile();
if (! entry) {
// больше нет файлов
Serial.println("**nomorefiles**");
}
for (uint8_t i=0; i<numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs+1);
} else {
// у файлов есть размер, в отличие от директорий
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
}
}
SPI
Позволяет взаимодействовать с различными SPI-устройствами, выступая при этом в роли ведущего устройства.
Функции
begin() — функция инициализирует работу шины SPI, а именно: конфигурирует выводы SCK, MOSI и SS как выходы, формирует низкий уровень сигнала на выводах SCK и MOSI, и высокий уровень - на выводе SS.
Синтаксис:
SPI.begin()
Параметры:
нет
Возвращаемые значения:
нет
end() — функция завершает работу шины SPI (режим работы выводов SPI остается прежним).
Синтаксис:
SPI.end()
Параметры:
нет
Возвращаемые значения:
нет
setBitOrder() — функция определяет порядок следования бит данных по шине SPI: младшим битом вперед (LSBFIRST) или старшим битом вперед (MSBFIRST).
Синтаксис:
SPI.setBitOrder(order)
Параметры:
order: одно из двух значений - LSBFIRST или MSBFIRST.
Возвращаемые значения:
нет
setClockDivider() — позволяет задать тактовую частоту SPI, указав коэффициент деления тактовой частоты контроллера.
Синтаксис:
SPI.setClockDivider(divider)
Параметры:
divider:
SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8
SPI_CLOCK_DIV16, SPI_CLOCK_DIV32, SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
Возвращаемые значения:
нет
setDataMode() — позволяет задать режим работы SPI: полярность и фазу тактовых импульсов.
Синтаксис:
SPI.setDataMode(mode)
Параметры:
mode:
SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3
Возвращаемые значения:
нет
transfer() — осуществляет передачу байта данных по шине SPI, одновременно принимая входящий байт.
Синтаксис:
SPI.transfer(val)
Параметры:
val: байт данных, который необходимо отправить по SPI
Возвращаемые значения:
байт данных, полученный по шине SPI
SoftwareSerial
Позволяет реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART (отсюда и название "SoftwareSerial").
Функции
SoftwareSerial() — функция создает новый объект типа SoftwareSerial и присваивает его указанной переменной
Синтаксис:
SoftwareSerial(rxPin, txPin)
Параметры:
rxPin: вывод для приема данных по последовательному интерфейсу
txPin: вывод для передачи данных по последовательному интерфейсу
Пример:
#define rxPin 2 #define txPin 3 // инициализируем новый последовательный порт SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
available() — возвращает количество непрочитанных байт (символов), принятых через программный последовательный порт. Непрочитанные данные накапливаются во входном последовательном буфере.
Параметры:
нет
Возвращаемые значения:
количество непрочитанных байт
Пример:
// подключаем библиотеку SoftwareSerial для использования ее функций:
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
// инициализируем новый последовательный порт
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
// задаем режим работы выводов tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// устанавливаем скорость передачи данных последовательного порта
mySerial.begin(9600);
}
void loop() {
if (mySerial.available()>0){
mySerial.read();
}
}
begin() — задает скорость передачи данных последовательного порта. Поддерживаемые значения: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600 и 115200.
Синтаксис:
mySerial.begin(speed)
Параметры:
speed: скорость передачи данных в бодах (long)
mySerial: имя экземпляра класса SoftwareSerial, который должен принимать данные
Возвращаемые значения:
нет
Пример:
// подключаем библиотеку SoftwareSerial для использования ее функций:
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
// инициализируем новый последовательный порт
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
// задаем режим работы выводов tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// устанавливаем скорость передачи данных последовательного порта
mySerial.begin(9600);
}
void loop() {
// ...
}
}
isListening() — позволяет проверить, активен ли программный последовательный порт. Функция возвращает true. если порт находится в режиме ожидания данных.
Параметры:
нет
Возвращаемые значения:
boolean
Пример:
#include <SoftwareSerial.h>
// программный последовательный порт : TX = цифровой вывод 10, RX = цифровой вывод 11
SoftwareSerial portOne(10,11);
void setup()
{
// инициализируем аппаратный последовательный порт
Serial.begin(9600);
// инициализируем программный последовательный порт
portOne.begin(9600);
}
void loop()
{
if (portOne.isListening()) {
Serial.println("Port One is listening!");
}
overflow() — проверяет входной буфер программного последовательного порта на предмет его переполнения. При вызове этой функции, флаг переполнения буфера сбрасывается.
Параметры:
нет
Возвращаемые значения:
boolean
Пример:
#include <SoftwareSerial.h>
// программный последовательный порт : TX = цифровой вывод 10, RX = цифровой вывод 11
SoftwareSerial portOne(10,11);
void setup()
{
// инициализируем аппаратный последовательный порт
Serial.begin(9600);
// инициализируем программный последовательный порт
portOne.begin(9600);
}
void loop()
{
if (portOne.overflow()) {
Serial.println("SoftwareSerial overflow!");
}
peek() — возвращает символ, принятый программным последовательным портом через вывод RX. Однако, в отличие от read(), многократный вызов данной функции будет приводить к получению одного и того же значения.
Параметры:
нет
Возвращаемые значения:
полученный символ, или -1, если такового нет
Пример:
SoftwareSerial mySerial(10,11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.peek();
}
read() — возвращает символ, принятый программным последовательным портом через вывод RX. Следует иметь ввиду, что в каждый момент времени принимать поступающие данные может только один программный порт.
Параметры:
нет
Возвращаемые значения:
полученный символ, или -1, если такового нет
Пример:
SoftwareSerial mySerial(10,11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.read();
}
print() — выводит данные через вывод TX программного последовательного порта.
Параметры:
Аналогично функции Serial.print().
Возвращаемые значения:
byte
Функция print() возвращает количество отправленных байт. Считывание этого значения не обязательно.
Пример:
SoftwareSerial serial(10,11);
int analogValue;
void setup()
{
serial.begin(9600);
}
void loop()
{
// считываем значение с аналогового входа 0:
analogValue = analogRead(A0);
// выводим его в разных форматах:
serial.print(analogValue); // выводим как ASCII-символы в десятичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, DEC); // выводим как ASCII-символы в десятичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, HEX); // выводим как ASCII-символы в шестнадцатеричном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, OCT); // выводим как ASCII-символы в восьмеричном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, BIN); // выводим как ASCII-символы в двоичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue/4, BYTE); // выводим в необработанном виде (предварительно
// поделив на 4, т.к. analogRead() возвращает значения
// в диапазоне от 0 до 1023, а в байте данных может
// хранится число не больше 255)
serial.print("\t"); // выводим символ табуляции
serial.println(); // выводим символ перевода строки
// задержка 10 миллисекунд перед очередным считыванием:
delay(10);
}
println() — выводит данные через вывод TX программного последовательного порта с последующим символом возврата каретки и перевода строки.
Параметры:
Аналогично функции Serial.println().
Возвращаемые значения:
byte
Функция println() возвращает количество отправленных байт. Считывание этого значения не обязательно.
Пример:
SoftwareSerial serial(10,11);
int analogValue;
void setup()
{
serial.begin(9600);
}
void loop()
{
// считываем значение с аналогового входа 0:
analogValue = analogRead(A0);
// выводим его в разных форматах:
serial.print(analogValue); // выводим как ASCII-символы в десятичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, DEC); // выводим как ASCII-символы в десятичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, HEX); // выводим как ASCII-символы в шестнадцатеричном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, OCT); // выводим как ASCII-символы в восьмеричном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue, BIN); // выводим как ASCII-символы в двоичном виде
serial.print("\t"); // выводим символ табуляции
serial.print(analogValue/4, BYTE); // выводим в необработанном виде (предварительно
// поделив на 4, т.к. analogRead() возвращает значения
// в диапазоне от 0 до 1023, а в байте данных может
// хранится число не больше 255)
serial.print("\t"); // выводим символ табуляции
serial.println(); // выводим символ перевода строки
// задержка 10 миллисекунд перед очередным считыванием:
delay(10);
}
listen() — переводит указанный последовательный порт в режим ожидания данных. В каждый момент времени только один программный порт может принимать данные; при этом данные, поступающие другим портам, будут игнорироваться.
Синтаксис:
mySerial.listen()
Параметры:
mySerial: имя экземпляра класса SoftwareSerial, который должен принимать данные
Возвращаемые значения:
нет
Пример:
#include <SoftwareSerial.h>
// программный последовательный порт : TX = цифровой вывод 10, RX = цифровой вывод 11
SoftwareSerial portOne(10, 11);
// программный последовательный порт : TX = цифровой вывод 8, RX = цифровой вывод 9
SoftwareSerial portTwo(8, 9);
void setup()
{
// инициализируем аппаратный последовательный порт
Serial.begin(9600);
// инициализируем оба программных порта
portOne.begin(9600);
portTwo.begin(9600);
}
void loop()
{
portOne.listen();
if (portOne.isListening()) {
Serial.println("Port One is listening!");
}else{
Serial.println("Port One is not listening!");
}
if (portTwo.isListening()) {
Serial.println("Port Two is listening!");
}else{
Serial.println("Port Two is not listening!");
}
}
write() — выводит данные в виде последовательности байт через вывод TX программного последовательного порта.
Параметры:
Аналогично функции Serial.write().
Возвращаемые значения:
byte
Функция write() возвращает количество записанных байт. Считывание этого значения не обязательно.
Пример:
SoftwareSerial mySerial(10, 11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
mySerial.write(45); // отправляем байт данных со значением 45
int bytesSent = mySerial.write("hello"); //отправляем строку "hello", считывая длину этой строки.
}