Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

API

M5
begin()
update()
powerOff()
LCD
clear()
drawCircle()
drawCircleHelper()
drawFastHLine()
drawFastVLine()
drawLine()
drawPixel()
drawRoundRect()
fillCircle()
fillRect()
fillScreen()
progressBar()
qrcode()
setBrightness()
setTextColor()
setTextSize()

M5

begin()


void begin(bool LCDEnable = true, bool SDEnable = true, bool SerialEnable = true, bool I2CEnable = false);

Функция begin() включает/отключает LCD-дисплей, TF-карту, последовательный (Serial port) порт и шину I2C. В большинстве случаев подходят значения по умолчанию, поэтому можно вызывать функцию без параметров.

После загрузки скетча в мониторе порта выводится сообщение M5Stack initializing...OK.


#include <M5Stack.h>

void setup() {
  M5.begin();
}

void loop() {}

update()


void update();

Функция update() определяет состояние кнопок A, B и C.

Отслеживаем нажатие кнопки A.


// смотри также пример Работаем с кнопками
#include <M5Stack.h>

void setup() {
  M5.begin();
}

void loop() {
  M5.update();

  if (M5.BtnA.wasReleased()) {
    Serial.println("Была нажата кнопка A");
  }
}

powerOff()

Функция устарела, используйте функцию deepSleep() из класса Power.

void powerOFF();

Функция powerOFF() отключает питание.


#include <M5Stack.h>

void setup() {
  M5.begin();
}

void loop() {
  M5.update();
  // Отключаем устройство при нажатии кнопки A
  if (M5.BtnA.wasPressed()) {
    M5.powerOFF();
  }
}

Button


M5.BtnA/B/C.read();
M5.BtnA/B/C.isPressed();
M5.BtnA/B/C.isReleased();
M5.BtnA/B/C.wasPressed();
M5.BtnA/B/C.wasReleased();
M5.BtnA/B/C.wasreleasedFor()
M5.BtnA/B/C.pressedFor(uint32_t ms);
M5.BtnA/B/C.releasedFor(uint32_t ms);
M5.BtnA/B/C.lastChange();

LCD

Функции для работы с экраном размера 320x240, отсчёт координат (0, 0) начинается левого верхнего угла. Единица измерения - пиксель.

Константы для цветов

Определение Значение R G B
TFT_BLACK (по умолчанию) 0x0000 0 0 0
TFT_NAVY 0x000F 0 0 128
TFT_DARKGREEN 0x03E0 0 128 0
TFT_MAROON 0x7800 128 0 0
TFT_PURPLE 0x780F 128 0 128
TFT_OLIVE 0x7BE0 128 128 0
TFT_LIGHTGREY 0xC618 192 192 192
TFT_DARKGREY 0x7BEF 128 128 128
TFT_BLUE 0x001F 0 0 255
TFT_GREENYELLOW 0xB7E0 180 255 0
TFT_GREEN 0x07E0 0 255 0
TFT_YELLOW 0xFFE0 255 255 0
TFT_ORANGE 0xFDA0 255 180 0
TFT_PINK 0xFC9F 255 255 16
TFT_CYAN 0x07FF 0 255 255
TFT_DARKCYAN 0x03EF 0 128 128
TFT_RED 0xF800 255 0 0
TFT_MAGENTA 0xF81F 255 0 255
TFT_WHITE 0xFFFF 255 255 255

clear()


void clear(uint16_t color);

Закрашивает экран заданным цветом.

Параметры

color
Цвет для закрашивания экрана

Закрасим экран оранжевым цветом.


#include <M5Stack.h>

void setup() {
  M5.begin();

  M5.Lcd.clear(TFT_ORANGE);
}

void loop() {}

drawCircle()


M5.Lcd.drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);

Функция рисует окружность из указанной точки с заданным радиусом и цветом.

Параметры

x0
Координата X для начальной точки
y0
Координата Y для начальной точки
r
Радиус окружности
color
Цвет (0~65535)

Нарисуем оранжевую окружность в центре экрана.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.drawCircle(160, 120, 50, TFT_ORANGE);
}

void loop() {}

drawCircleHelper()


M5.Lcd.drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);

Рисует четвертинку окружности из указанной точки с заданным радиусом и цветом в указанном месте.

Параметры

x0
Координата X для начальной точки
y0
Координата Y для начальной точки
r
Радиус окружности
cornername
Выбор четверти окружности по заданной константе. При значении 1 рисуется левая верхняя часть, 2 - правая верхняя часть, 4 - правая нижняя часть, 8 - левая нижняя часть
color
Цвет (0~65535)

Нарисуем окружности в центре экрана из четырёх четвертинок.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.drawCircleHelper(160, 120, 30, 1, TFT_BLUE);
  M5.Lcd.drawCircleHelper(160, 120, 30, 2, TFT_MAGENTA);
  M5.Lcd.drawCircleHelper(160, 120, 30, 4, TFT_RED);
  M5.Lcd.drawCircleHelper(160, 120, 30, 8, TFT_ORANGE);
}

void loop() {}

drawFastHLine()


drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color);

Функция рисует горизонтальную линию из указанной точки с заданными длиной и цветом.

Параметры

x
Координата X для начальной точки
y
Координата Y для начальной точки
w
Длина линии
color
Цвет

Рисуем горизонтальную линию, которая делит экран пополам.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.drawFastHLine(0, 120, 320, TFT_GREEN);
}

void loop() {}

drawFastVLine()


drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color);

Функция рисует вертикальную линию из указанной точки с заданными длиной и цветом.

Параметры

x
Координата X для начальной точки
y
Координата Y для начальной точки
h
Длина линии
color
Цвет

Рисуем вертикальную линию, которая делит экран пополам.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.drawFastVLine(160, 00, 240, TFT_GREEN);
}

void loop() {}

drawLine()


M5.Lcd.drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);

Функция рисует прямую линию из заданной точки в заданную точку указанным цветом.

Параметры

x0
Координата X точки начала линии
y0
Координата Y точки начала линии
x1
Координата X точки конца линии
y1
Координата Y точки конца линии
color
Цвет (0~65535). Обычно используют шестнадцатеричные значения или константы

Нарисуем диагональ.


#include <M5Stack.h>

void setup()
{
  M5.begin();
  M5.Lcd.drawLine(0, 0, 320, 240, TFT_BLUE);
}

void loop(){}

drawPixel()


M5.Lcd.drawPixel(int16_t x, int16_t y, uint16_t color);

Функция рисует точку (пиксель) в указанной позиции указанным цветом.

Параметры

x
Координата X пикселя
y
Координата Y пикселя
color
Цвет пикселя

Рисуем зелёную точку в центре экрана.


#include <M5Stack.h>

void setup()
{
  M5.begin();
  M5.Lcd.drawPixel(160, 120, TFT_GREEN);
}

void loop() {}

drawRoundRect()


M5.Lcd.drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);

Функция рисует прямоугольник с закруглёнными углами.

Параметры

x0
Координата X верхнего угла прямоугольника
y0
Координата Y верхнего угла прямоугольника
w
Ширина круга для рисования закруглённого участка в углах прямоугольника
h
Высота круга для рисования закруглённого участка в углах прямоугольника
radius
Радиус круга в углах прямоугольника
color
Цвет

Нарисуем закруглённую рамку синего цвета.


#include <M5Stack.h>

void setup()
{
  M5.begin();
  M5.Lcd.drawRoundRect(10, 10, 300, 220, 8, BLUE);
}

void loop() {}

fillCircle()


M5.Lcd.fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);

Функция рисует круг в заданных координатах, радиусе и цвете.

Параметры

x0
Координата точки X центра круга
y0
Координата точки Y центра круга
r
Радиус в пикселях
color
Цвет (0~65535). Обычно используют шестнадцатеричные значения или константы

Рисуем круг красного цвета в центре экрана радиусом 50 пикселей.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.fillCircle(160, 120, 50, RED);
}

void loop() {}

fillRect()


M5.Lcd.fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);

Функция рисует прямоугольник в заданных координатах с заданными размерами и цветом.

Параметры

x
Координата точки X (левый угол)
y
Координата точки Y (левый угол)
w
Ширина прямоугольника в пикселях
h
Высота прямоугольника в пикселях
color
Цвет

Рисуем закрашенный прямоугольник синего цвета из точки (10, 10) шириной 310 пикселей и высотой 20 пикселей.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setBrightness(255);
  M5.Lcd.fillRect(10, 10, 310, 20, BLUE);
}

void loop() {}

fillScreen()


M5.Lcd.fillScreen(uint16_t color);

Функция закрашивает весь экран заданным цветом.

Параметры

color
Цвет для закраски экрана

Закрасим экран цветом Magenta.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(TFT_MAGENTA);
}

void loop() {}

progressBar()


void progressBar(int x, int y, int w, int h, uint8_t val);

Функция progressBar() рисует индикатор прогресса синий цветом (0x09F1). Функция не возвращает значения. При обновлений значений нужно стирать фон экрана.

Параметры

x
Координата X (левый угол)
y
Координата Y (левый угол)
w
Ширина прямоугольника в пикселях
h
Высота прямоугольника в пикселях
val
Значение индикатора прогресса (0-100%)

Рисуем прогресс индикатора на 50%.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setBrightness(255);
  M5.Lcd.fillRect(10, 10, 310, 20, BLUE);
  M5.Lcd.progressBar(10, 10, 310, 20, 50);
}

void loop() {}

qrcode()


qrcode(const char *string, uint16_t x, uint16_t y, uint8_t width, uint8_t version);

qrcode(const String &string, uint16_t x, uint16_t y, uint8_t width, uint8_t version);

Выводит на экран картинку QR-кода.

Параметры

string
Строка, которая будет внедрена в QR-код
x
Координата X левого угла картинки
y
Координата Y левого угла картинки
width
Ширина в пикселях
version
Версия QR-кода

Внедряем в QR-код адрес сайта и выводим на экран в указанных координатах.


#include <M5Stack.h>

void setup() {
  M5.begin();

  M5.Lcd.qrcode("http://developer.alexanderklimov.ru/arduino/m5stack/", 50, 10, 220, 6);
}

void loop() {}

setBrightness()


M5.lcd.setBrightness(uint8_t brightness);

Функция устанавливает яркость экрана, функция ничего не возвращает..

Параметры

brightness
Тип uint8_t. Устанавливает яркость экрана от 0 (выключен) до 255 (самая яркая).

Установим максимальную яркость экрана.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setBrightness(255); // уровень яркости экрана
  M5.Lcd.println("The cat"); // вывод текста
}

void loop() {}

setTextColor()


M5.Lcd.setTextColor(uint16_t color);
M5.Lcd.setTextColor(uint16_t color, uint16_t backgroundcolor);

Устанавливает цвет и фон для текста. Есть две перегруженные версии. Если не указывать цвет для фона, то будет использован текущий цвет.

Параметры

color
Устанавливает цвет текста.
backgroundcolor
Устанавливает цвет фона для текста.

Выводим текст красным цветом.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setTextColor(RED);
  M5.Lcd.print("Hello Kitty");
}

void loop() {}

setTextSize()


M5.Lcd.setTextSize(uint8_t size);

Устанавливает размер текста от 0 до 255. По умолчанию текст выводится белым цветом.

Параметры

size
Устанавливает размер экрана.

Выводим текст мелким шрифтом.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(3);
  M5.Lcd.print("Hello Kitty");
}

void loop() {}

Другие функции


M5.Lcd.fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,int16_t delta, uint16_t color);
M5.Lcd.drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
M5.Lcd.fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
M5.Lcd.fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
M5.Lcd.drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color);
M5.Lcd.drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h),
M5.Lcd.drawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint16_t bg, uint8_t size);
M5.Lcd.setCursor(uint16_t x0, uint16_t y0);
M5.Lcd.setTextWrap(boolean w);
M5.Lcd.printf();
M5.Lcd.print();
M5.Lcd.println();
M5.Lcd.drawCentreString(const char *string, int dX, int poY, int font);
M5.Lcd.drawRightString(const char *string, int dX, int poY, int font);
M5.Lcd.drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x, uint16_t y);
M5.Lcd.drawJpgFile(fs::FS &fs, const char *path, uint16_t x, uint16_t y);
M5.Lcd.drawBmpFile(fs::FS &fs, const char *path, uint16_t x, uint16_t y);
M5.Lcd.sleep
M5.Lcd.wakeup

Power


M5.Power.setPowerBoostKeepOn()
M5.Power.setCharge(uint8_t mode);
M5.Power.setPowerBoostKeepOn(bool en);
M5.Power.isChargeFull();
M5.Power.setWakeupButton(uint8_t button);
M5.Power.powerOFF();
bool setPowerBoostOnOff(bool en);
bool setPowerBoostSet(bool en);
bool setPowerVin(bool en);
bool setPowerWLEDSet(bool en);

Speaker


M5.Speaker.tone(uint32_t freq);
M5.Speaker.tone(freq, time);
M5.Speaker.beep();
M5.Speaker.setBeep(uint16_t frequency, uint16_t duration);
M5.Speaker.mute();

Дополнительные материалы

Официальная документация на английском

Реклама