Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
M5
begin()
update()
powerOff()
LCD
clear()
drawCircle()
drawCircleHelper()
drawFastHLine()
drawFastVLine()
drawLine()
drawPixel()
drawRoundRect()
fillCircle()
fillRect()
fillScreen()
progressBar()
qrcode()
setBrightness()
setTextColor()
setTextSize()
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() {}
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");
}
}
void powerOFF();
Функция powerOFF() отключает питание.
#include <M5Stack.h>
void setup() {
M5.begin();
}
void loop() {
M5.update();
// Отключаем устройство при нажатии кнопки A
if (M5.BtnA.wasPressed()) {
M5.powerOFF();
}
}
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();
Функции для работы с экраном размера 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 |
void clear(uint16_t color);
Закрашивает экран заданным цветом.
Закрасим экран оранжевым цветом.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.clear(TFT_ORANGE);
}
void loop() {}
M5.Lcd.drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
Функция рисует окружность из указанной точки с заданным радиусом и цветом.
Нарисуем оранжевую окружность в центре экрана.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.drawCircle(160, 120, 50, TFT_ORANGE);
}
void loop() {}
M5.Lcd.drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
Рисует четвертинку окружности из указанной точки с заданным радиусом и цветом в указанном месте.
Нарисуем окружности в центре экрана из четырёх четвертинок.
#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(int32_t x, int32_t y, int32_t w, uint32_t color);
Функция рисует горизонтальную линию из указанной точки с заданными длиной и цветом.
Рисуем горизонтальную линию, которая делит экран пополам.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.drawFastHLine(0, 120, 320, TFT_GREEN);
}
void loop() {}
drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color);
Функция рисует вертикальную линию из указанной точки с заданными длиной и цветом.
Рисуем вертикальную линию, которая делит экран пополам.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.drawFastVLine(160, 00, 240, TFT_GREEN);
}
void loop() {}
M5.Lcd.drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
Функция рисует прямую линию из заданной точки в заданную точку указанным цветом.
Нарисуем диагональ.
#include <M5Stack.h>
void setup()
{
M5.begin();
M5.Lcd.drawLine(0, 0, 320, 240, TFT_BLUE);
}
void loop(){}
M5.Lcd.drawPixel(int16_t x, int16_t y, uint16_t color);
Функция рисует точку (пиксель) в указанной позиции указанным цветом.
Рисуем зелёную точку в центре экрана.
#include <M5Stack.h>
void setup()
{
M5.begin();
M5.Lcd.drawPixel(160, 120, TFT_GREEN);
}
void loop() {}
M5.Lcd.drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
Функция рисует прямоугольник с закруглёнными углами.
Нарисуем закруглённую рамку синего цвета.
#include <M5Stack.h>
void setup()
{
M5.begin();
M5.Lcd.drawRoundRect(10, 10, 300, 220, 8, BLUE);
}
void loop() {}
M5.Lcd.fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
Функция рисует круг в заданных координатах, радиусе и цвете.
Рисуем круг красного цвета в центре экрана радиусом 50 пикселей.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.fillCircle(160, 120, 50, RED);
}
void loop() {}
M5.Lcd.fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t 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() {}
M5.Lcd.fillScreen(uint16_t color);
Функция закрашивает весь экран заданным цветом.
Закрасим экран цветом Magenta.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.fillScreen(TFT_MAGENTA);
}
void loop() {}
void progressBar(int x, int y, int w, int h, uint8_t val);
Функция progressBar() рисует индикатор прогресса синий цветом (0x09F1). Функция не возвращает значения. При обновлений значений нужно стирать фон экрана.
Рисуем прогресс индикатора на 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(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-кода.
Внедряем в QR-код адрес сайта и выводим на экран в указанных координатах.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.qrcode("http://developer.alexanderklimov.ru/arduino/m5stack/", 50, 10, 220, 6);
}
void loop() {}
M5.lcd.setBrightness(uint8_t brightness);
Функция устанавливает яркость экрана, функция ничего не возвращает..
Установим максимальную яркость экрана.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.setBrightness(255); // уровень яркости экрана
M5.Lcd.println("The cat"); // вывод текста
}
void loop() {}
M5.Lcd.setTextColor(uint16_t color);
M5.Lcd.setTextColor(uint16_t color, uint16_t backgroundcolor);
Устанавливает цвет и фон для текста. Есть две перегруженные версии. Если не указывать цвет для фона, то будет использован текущий цвет.
Выводим текст красным цветом.
#include <M5Stack.h>
void setup() {
M5.begin();
M5.Lcd.setTextColor(RED);
M5.Lcd.print("Hello Kitty");
}
void loop() {}
M5.Lcd.setTextSize(uint8_t size);
Устанавливает размер текста от 0 до 255. По умолчанию текст выводится белым цветом.
Выводим текст мелким шрифтом.
#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
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);
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();
Официальная документация на английском