Arduino.Вспомогательные классы

Arduino.Вспомогательные классы

https://t.me/HotCheatSheet
Wire

Позволяет взаимодействовать с различными устройствами по интерфейсу I2C / TWI.

Функции

begin() — инициализирует библиотеку Wire и подключает Ардуино к шине I2C в роли ведущего (master) или ведомого (slave) устройства. Как правило, эта функция вызывается только один раз.

Синтаксис:

Wire.begin()

Wire.begin(address)

Параметры:

address: 7-битный адрес ведомого устройства (не обязательный параметр); если адрес не указан, то Ардуино выступает в роли ведущего устройства (master).

Возвращаемые значения:

нет


requestFrom() — функция запрашивает данные у ведомого устройства (slave). Как правило, используется только ведущим устройством (Master).

Синтаксис:

Wire.requestFrom(address, quantity)

Wire.requestFrom(address, quantity, stop)

Параметры:

address: 7-битный адрес ведомого устройства, у которого запрашиваются данные

quantity: количество запрашиваемых байт

stop: boolean. При значении true будет отправлен запрос со стоповым битом, что позволит освободить шину. При значении false - соединение будет поддерживаться в активном состоянии.

Возвращаемые значения:

byte : количество байт, возвращенных ведомым устройством


beginTransmission() — начинает процедуру передачи данных по интерфейсу I2C ведомому устройству с указанным адресом.

Синтаксис:

Wire.beginTransmission(address)

Параметры:

address: 7-битный адрес принимающего устройства

Возвращаемые значения:

нет


endTransmission() — завершает процедуру передачи данных ведомому устройству, инициированную функцией beginTransmittion().

Синтаксис:

Wire.endTransmission()

Wire.endTransmission(stop)

Параметры:

stop: boolean. При значении true будет отправлен запрос со стоповым битом, что позволит освободить шину. При значении false - соединение будет поддерживаться в активном состоянии.

Возвращаемые значения:

byte, байт данных, характеризующий статус передачи:

0: передача успешна

1: объем данных слишком велик для буфера передачи

2: получен NACK при передаче адреса

3: получен NACK при передаче данных

4: другая ошибка


write() — на ведомом устройстве (Slave) данная функция отправляет данные в ответ на запрос ведущего устройства. На ведущем устройстве (Master) функция добавляет данные в очередь отправки для последующей передачи ведомому устройству (в этом случае функция write() должна вызываться между beginTransmission() и endTransmission()).

Синтаксис:

Wire.write(value)

Wire.write(string)

Wire.write(data, length)

Параметры:

value: значение, которое необходимо отправить в виде одиночного байта

string: строка, которую необходимо отправить в виде последовательности байт

data: массив данных, который необходимо отправить в виде нескольких байт

length: количество передаваемых байт

Возвращаемые значения:

byte

Функция write() возвращает количество записанных байт. Считывание этого значения не обязательно

Пример:

#include <Wire.h>

byte val = 0;

void setup()
{
  Wire.begin(); // подключаемся к шине i2c
}

void loop()
{
  Wire.beginTransmission(44); // начинаем процедуру передачи устройству с адресом #44 (0x2c)
                              // адрес устройства указан в даташите
  Wire.write(val);             // отправляем байт данных
  Wire.endTransmission();     // завершаем процедуру передачи

  val++;        // увеличиваем значение
  if(val == 64) // при достижении значения 64 (максимум)
  {
    val = 0;    // начинаем счет заново
  }
  delay(500);
}


available() — возвращает количество байт, доступных для считывания функцией read(). На ведущем устройстве (Master) данная функция должна вызываться после функции requestFrom(), а на ведомом (Slave) - внутри обработчика onReceive().

Параметры:

нет

Возвращаемые значения:

Количество байт, доступных для считывания.


read() — данная функция считывает байт данных, полученный ведущим устройством от ведомого (либо наоборот) в результате выполнения функции requestFrom().

Синтаксис:

Wire.read()

Параметры:

нет

Возвращаемые значения:

Очередной полученный байт

Пример:

#include <Wire.h>

void setup()
{
  Wire.begin();        // подключаемся к шине i2c (для ведущего устройства адрес не обязательный)
  Serial.begin(9600);  // инициализируем последовательный порт для вывода информации
}

void loop()
{
  Wire.requestFrom(2, 6);    // запрашиваем у ведомого устройства #2 6 байт

  while(Wire.available())    // ведомое устройство может отправить не все запрашиваемые байты
  { 
    char c = Wire.read();    // считываем байт данных в виде символа
    Serial.print(c);         // выводим символ
  }

  delay(500);
}


onReceive() — на ведомом устройстве позволяет назначить функцию, которая будет автоматически вызываться при поступлении данных от Мастера.

Синтаксис:

Wire.onReceive(handler)

Параметры:

handler: функция, которую необходимо вызвать при поступлении данных от ведущего устройства; эта функция не должна возвращать никаких значений и может принимать только один параметр (int), описывающий количество поступивших байт.

Возвращаемые значения:

нет


onRequest() — на ведомом устройстве позволяет назначить функцию, которая будет автоматически вызываться при получения запроса от Мастера.

Синтаксис:

Wire.onRequest(handler)

Параметры:

handler: вызываемая функция без параметров, не должна возвращать никаких значений.

Возвращаемые значения:

нет


Вспомогательные классы

Класс Serial

Используется для связи платы Ардуино с компьютером или другими устройствами.

Функции

if (Serial) — позволяет проверить готовность определенного последовательного порта.

Синтаксис:

if (Serial)

Параметры:

нет

Возвращаемые значения:

boolean: возвращает true, если указанный последовательный порт готов к работе.

Пример:

void setup() { 
 //Инициализируем последовательный интерфейс и ожидаем открытия порта:
  Serial.begin(9600); 
  while (!Serial) {
    ; // ожидаем подключения последовательного порта. Нужно только для Leonardo
  }
} 

void loop() { 
 //продолжаем работу
}


available() — возвращает количество байт (символов) доступных для считывания из буфера последовательного порта. Под символами понимаются данные, которые уже приняты и хранятся в последовательном приемном буфере (который может хранить максимум 64 байта).

Синтаксис:

Serial.available()

Параметры:

нет

Возвращаемые значения:

количество байт, доступных для считывания

Пример:

int incomingByte = 0;   // для данных, поступающих через последовательный порт

void setup() {
        Serial.begin(9600);     // открываем последовательный порт 
                                //и задаем скорость обмена 9600 бод
}

void loop() {

        // отправляем данные только после их получения:
        if (Serial.available() > 0) {
                // считываем входящий байт:
                incomingByte = Serial.read();

                // показываем, что именно мы получили:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}


begin() — задает скорость передачи данных по последовательному интерфейсу в битах в секунду (бодах). Для взаимодействия с компьютером следует использовать одну из предустановленных скоростей обмена: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.

Синтаксис:

Serial.begin(speed)

Serial.begin(speed, config)

Параметры:

speed: скорость в битах в секунду (бодах) - long

config: задает количество бит данных, проверку четности и стоповые биты. Ниже приведен список возможных значений:

SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (по умолчанию)

SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1

SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2

SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1, SERIAL_7O1

SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2

Возвращаемые значения:

нет

Пример:

void setup() {
    Serial.begin(9600); // открываем последовательный порт, задаем скорость передачи данных 9600 бод
}

void loop() {}


end() — функция разрывает последовательную связь, после чего выводы RX и TX снова могут использовать как выводы общего назначения.

Синтаксис:

Serial.end()

Параметры:

нет

Возвращаемые значения:

нет


find() — осуществляет чтение данных из последовательного буфера до тех пор, пока не будет найдена искомая строка заданной длины.

Синтаксис:

Serial.find(target)

Параметры:

target : искомая строка (char)

Возвращаемые значения:

boolean


findUntil() — считывает данные из последовательного буфера до тех пор, пока не будет найдена искомая строка определенной длины или символы конца строки.

Синтаксис:

Serial.findUntil(target, terminal)

Параметры:

target : искомая строка (char)

terminal : символы конца строки (char)

Возвращаемые значения:

boolean


flush() — функция ожидает завершения процесса отправки всех исходящих данных по последовательному интерфейсу.

Синтаксис:

Serial.flush()

Параметры:

нет

Возвращаемые значения:

нет


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

Синтаксис:

Serial.parseFloat()

Параметры:

нет

Возвращаемые значения:

float


parseInt() — осуществляет поиск очередного целого числа во входном потоке.

Синтаксис:

Serial.parseInt()

Параметры:

нет

Возвращаемые значения:

int : найденное целое число


peek() — возвращает очередной байт (символ), поступивший в буфер последовательного порта. При этом функция не удаляет считанный байт из буфера.

Синтаксис:

Serial.peek()

Параметры:

нет

Возвращаемые значения:

первый байт данных, доступный для чтения из буфера последовательного порта (либо -1, если таковой байт отсутствует) - int.


print() — функция выводит через последовательный порт заданный ASCII-текст в виде, понятном для человека. Эта команда может иметь несколько разных форм. При выводе числа каждой его цифре соответствует один ASCII-символ.

Синтаксис:

Serial.print(val)

Serial.print(val, format)

Параметры:

val: значение, которое необходимо вывести - любой тип данных

format: определяет систему счисления (для целочисленных типов), а также количество десятичных знаков после запятой (для чисел с плавающей точкой).

Возвращаемые значения:

size_t (long): функция print() возвращает количество выведенных байт. Считывание этого значения не обязательно.

Пример:

/*
Использования цикла FOR для обработки данных и вывода чисел в различных форматах.
*/
int x = 0;    // переменная

void setup() {
  Serial.begin(9600);      // открываем последовательный порт на скорости 9600 бод    
}

void loop() {  
  // print labels 
  Serial.print("NO FORMAT");       // выводим метку
  Serial.print("\t");              // выводим символ табуляции

  Serial.print("DEC");  
  Serial.print("\t");      

  Serial.print("HEX"); 
  Serial.print("\t");   

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.print("\t"); 

  for(x=0; x< 64; x++){    // немного ASCII-графики, можете изменить код по своему вкусу

    // выводим значение в различных форматах:
    Serial.print(x);       // выводим как десятичное число - то же, что и формат "DEC"
    Serial.print("\t");    // выводим символ табуляции

    Serial.print(x, DEC);  // выводим десятичное число ASCII-символами
    Serial.print("\t");    // выводим символ табуляции

    Serial.print(x, HEX);  // выводим шестнадатиричное число ASCII-символами
    Serial.print("\t");    // выводим символ табуляции

    Serial.print(x, OCT);  // выводим восьмиричное число ASCII-символами
    Serial.print("\t");    // выводим символ табуляции

    Serial.println(x, BIN);  // выводим двоичное число ASCII-символами
    //с символом возврата каретки, который добавляет функция "println"
    delay(200);            // задержка в 200 миллисекунд
  }
  Serial.println("");      // выводим еще один символ возврата каретки
}


println() — выводит через последовательный порт ASCII-текст в понятном для человека виде с символами возврата каретки (ASCII 13 или '\r') и новой строки (ASCII 10 или 'n').

Синтаксис:

Serial.println(val)

Serial.println(val, format)

Параметры:

val: значение, которое необходимо вывести - любой тип данных

format: определяет систему счисления (для целочисленных типов), а также количество десятичных знаков после запятой (для чисел с плавающей точкой).

Возвращаемые значения:

size_t (long): функция println() возвращает количество выведенных байт. Считывание этого значения не обязательно.

Пример:

/*Аналоговый вход

 считываем аналоговое значение с аналогового входа 0 и выводим его через последовательный порт.
 */

int analogValue = 0;    // переменная для хранения аналоговой величины

void setup() {
  // открываем последовательный порт на скорость 9600 бод:
  Serial.begin(9600);
}

void loop() {
  // считываем аналговую величиниу на выводе 0:
  analogValue = analogRead(0);

  // выводим считанное значение в различных форматах:
  Serial.println(analogValue);       // выводим десятичное число ASCII-символами
  Serial.println(analogValue, DEC);  // выводим десятичное число ASCII-символами
  Serial.println(analogValue, HEX);  // выводим шестнадатиричное число ASCII-символами
  Serial.println(analogValue, OCT);  // выводим восьмиричное число ASCII-символами
  Serial.println(analogValue, BIN);  // выводим двоичное число ASCII-символами

  // пауза в 10 миллисекунд перед следующим опросом:
  delay(10);
}


read() — считывает данные, поступающие по последовательному интерфейсу.

Синтаксис:

Serial.read()

Параметры:

нет

Возвращаемые значения:

Первый байт принятых данных (или -1, если таковых нет) - int

Пример:

int incomingByte = 0;   // переменная для хранения байта данных, 
                        //принятых по последовательному интерфейсу

void setup() {
        Serial.begin(9600);     // открываем последовательный порт
                                // задаем скорость передачи данных 9600 бод
}

void loop() {

        // отправляем данные только после их получения:
        if (Serial.available() > 0) {
                // считываем принятый байт:
                incomingByte = Serial.read();

                // сообщаем, что именно мы получили:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}


readBytes() — функция считывает символы, поступающие через последовательный порт, и помещает их в приемный буфер.

Синтаксис:

Serial.readBytes(buffer, length)

Параметры:

buffer: буфер для хранения считываемых данных (char[] или byte[])

length : количество символов, которое необходимо считать (int).

Возвращаемые значения:

byte


readBytesUntil() — функциясчитывает символы из приемного буфера последовательного порта и помещает их в массив.

Синтаксис:

Serial.readBytesUntil(character, buffer, length)

Параметры:

character: искомый символ (char).

buffer: буфер для хранения считываемых данных (char[] или byte[])

length: количество символов, которое необходимо считать (int).

Возвращаемые значения:

byte


setTimeout() — функция позволяет задать время ожидания данных, поступающих через последовательный интерфейс.

Синтаксис:

Serial.setTimeout(time)

Параметры:

time: величина таймаута в миллисекундах (long).

Возвращаемые значения:

нет


write() — записывает двоичные данные в последовательный порт. Эти данные отправляются в виде одного или нескольких байтов.

Синтаксис:

Serial.write(val)

Serial.write(str)

Serial.write(buf, len)

Параметры:

val: значение, которое необходимо отправить в виде байта

str: строка, которую необходимо отправить как последовательность байт

buf: массив, который необходимо отправить как последовательность байт

len: длина массива

Возвращаемые значения:

byte

Функция write() возвращает количество отправленных байт. Считывание этого параметра не обязательно.

Пример:

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.write(45); // отправляем байт со значением 45

   int bytesSent = Serial.write(“hello”); //отправляем строку "hello” и возвращаем длину строки.
}


serialEvent() — автоматически вызываетcя при поступлении новых данных. Чтобы считать их, используйте функцию Serial.read().

Синтаксис:

void serialEvent(){

//команды

}

Параметры:

команды - любые процедуры и функции Ардуино


Класс Stream

Является базовым классом для символьных и двоичных потоков.

Функции

available() — функция возвращает количество принятых, но не прочитанных байт из потока. 

Синтаксис:

stream.available()

Параметры:

stream: экземпляр класса, наследуемого от Stream.

Возвращаемые значения:

int: количество непрочитанных байт


read() — функция осуществляет считывание символов из входящего потока в указанный буфер. 

Синтаксис:

stream.read()

Параметры:

stream: экземпляр класса, наследуемого от Stream.

Возвращаемые значения:

первый байт принятых данных (или -1, если таковых нет)


flush() — функция очищает буфер сразу после отправки всех исходящих символов.

Синтаксис:

stream.flush()

Параметры:

stream: экземпляр класса, наследуемого от Stream.

Возвращаемые значения:

boolean


find() — функция считывает из потока данные до тех пор, пока не будет найдена искомая строка заданной длины.

Синтаксис:

stream.find(target)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

target: искомая строка (char)

Возвращаемые значения:

boolean


findUntil() — функция осуществляет поиск строки в потоке данных. В процессе поиска считывание данных из потока осуществляется до тех пор, пока не будет найдена искомая строка заданной длины или символы конца строки.

Синтаксис:

stream.findUntil(target, terminal)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

target: искомая строка (char)

terminal: символы конца строки (char)

Возвращаемые значения:

boolean


peek() — считывает из файла байт данных. При этом функция сохраняет положение указателя текущей позиции файла и не перемещает его на следующий байт. Т.е. при многократном вызове peek() функция будет возвращать одно и то же значение.

Синтаксис:

stream.peek()

Параметры:

stream: экземпляр класса, наследуемого от Stream.

Возвращаемые значения:

Байт данных (или символ), либо -1, если таковой отсутствует.


readBytes() — функция считывает символы из потока и помещает их в указанный буфер.

Синтаксис:

stream.readBytes(buffer, length)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

buffer: буфер для хранения считываемых данных (char[] или byte[])

length: количество символов, которое необходимо считать (int).

Возвращаемые значения:

Количество байт, помещенных в буфер


readBytesUntil() — функция считывает символы из потока и помещает их в указанный буфер.

Синтаксис:

stream.readBytesUntil(character, buffer, length)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

character: искомый символ (char).

buffer: буфер для хранения считываемых данных (char[] или byte[])

length: количество символов, которое необходимо считать (int).

Возвращаемые значения:

Количество байт, помещенных в буфер


readString() — функция считывает символы из потока, объединяя их в строку.

Синтаксис:

stream.readString()

Параметры:

нет

Возвращаемые значения:

Строка, состоящая из считанных символов.


readStringUntil() — функция считывает символы из потока, объединяя их в строку.

Синтаксис:

stream.readString(terminator)

Параметры:

terminator: искомый символ (char).

Возвращаемые значения:

Строка, состоящая из считанных символов.


parseInt() — осуществляет поиск целого числа во входном потоке. Процесс поиска заключается в следующем: начиная с текущей позиции, функция анализирует символы входного потока до тех пор, пока не встретится первое числовое значение. При этом все остальные символы (включая знак минус) функцией игнорируются.

Синтаксис:

stream.parseInt(list)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

list: анализируемый поток, в котором необходимо найти целое число (char)

Возвращаемые значения:

Первое попавшееся целое число (int)


parsefloat() — осуществляет поиск во входном потоке числа с плавающей точкой. Процесс поиска заключается в следующем: начиная с текущей позиции, функция анализирует символы входного потока до тех пор, пока не встретится первое числовое значение. При этом все остальные символы (включая знак минус) функцией игнорируются.

Синтаксис:

stream.parseFloat(list)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

list: анализируемый поток, в котором необходимо найти число с плавающей точкой (char)

Возвращаемые значения:

Первое попавшееся число с плавающей точкой (float)


setTimeout() — функция устанавливает максимальное время ожидания потока данных (значение по умолчанию - 1000 миллисекунд).

Синтаксис:

stream.setTimeout(time)

Параметры:

stream: экземпляр класса, наследуемого от Stream.

time: величина таймаута в миллисекундах (long).

Возвращаемые значения:

нет

Report Page