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

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

Шкодим

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

M5Stack. Работаем с кнопками

Устройство M5Stack имеет три встроенных кнопки, которые имеют названия BtnA, BtnB, BtnC соответственно слева направо. Для работы с ними есть несколько функций.

  • M5.BtnA/B/C.read() - считывает состояние кнопки. Возвращает true, если кнопка нажата. Иначе возвращается false
  • M5.BtnA/B/C.isPressed() - если кнопка нажата, всегда возвращает true
  • M5.BtnA/B/C.isReleased() - если кнопка отпущена, всегда возвращает true
  • M5.BtnA/B/C.wasPressed() - кнопка была нажата один раз, возвращает true
  • M5.BtnA/B/C.wasReleased() - кнопка отпущена после нажатия, возвращает true
  • M5.BtnA/B/C.pressedFor(uint32_t ms) - если кнопка нажата больше указанного времени, то возвращается true
  • M5.BtnA/B/C.releasedFor(uint32_t ms) - если кнопка находится в нажатом состоянии больше указанного времени, то возвращается true
  • M5.BtnA/B/C.lastChange() - возвращает время нажатой кнопки

Пример Button

В примерах есть скетч для работы с кнопками - File | Examples | M5Stack | Basic | Button.


#include <M5Stack.h>

void setup() {
  M5.begin(true, false, true);

  M5.Power.begin();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(65, 10);
  M5.Lcd.println("Button example");
  M5.Lcd.setCursor(3, 35);
  M5.Lcd.println("Press button B for 700ms");
  M5.Lcd.println("to clear screen.");
  M5.Lcd.setTextColor(RED);
}

void loop() {
  // update button state
  M5.update();

  if (M5.BtnA.wasReleased()) {
    M5.Lcd.print('A');
  } else if (M5.BtnB.wasReleased()) {
    M5.Lcd.print('B');
  } else if (M5.BtnC.wasReleased()) {
    M5.Lcd.print('C');
  } else if (M5.BtnB.wasReleasefor(700)) {
    M5.Lcd.clear(BLACK);
    M5.Lcd.setCursor(0, 0);
  }
}

После запуска скетча мы видим чёрный экран с надписью "Button example" (Пример с кнопкой). На другой строчке надпись "Press button B for 700ms to clear screen" (Нажмите кнопку B на 700 миллисекунд для очистки экрана).

Далее вы можете нажимать на любые из трёх кнопок в любом порядке - соответствующие символы кнопок будут появляться на третьей строке.

Button

Вы можете очистить экран, если удерживать кнопку B чуть больше, чем обычно. Затем снова можете нажимать на кнопки - символы будут выводиться уже с первой строки.

Рисуем круги

Напишем другой пример - в зависимости от нажатой кнопки будем выводить круг определённого цвета.


#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setBrightness(100);
  M5.Lcd.setTextSize(3);
  M5.Lcd.fillScreen(TFT_WHITE);

  M5.Lcd.setCursor(44, 215);
  M5.Lcd.setTextColor(RED);
  M5.Lcd.printf("RED");

  M5.Lcd.setCursor(116, 215);
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.printf("GREEN");

  M5.Lcd.setCursor(222, 215);
  M5.Lcd.setTextColor(BLUE);
  M5.Lcd.printf("BLUE");
}

void loop() {
  if (M5.BtnA.wasPressed())
  {
    M5.Lcd.fillCircle(160, 100, 80, RED);
  }
  if (M5.BtnB.wasPressed())
  {
    M5.Lcd.fillCircle(160, 100, 80, GREEN);
  }

  if (M5.BtnC.wasPressed())
  {
    M5.Lcd.fillCircle(160, 100, 80, BLUE);
  }
  M5.update();
}

На рисунке представлен результат после нажатия синей кнопки.

Button

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

Реклама