Уроки / Урок 8

Потенциометр и график

Аналоговый вход: показываем значение и график на экране.

Аналоговый вход измеряет напряжение от 0 до 3,3 В и выдаёт число от 0 до 4095. Для аналоговых измерений подходят выводы GPIO0–GPIO4.

#include <U8g2lib.h>
#include <Wire.h>

// Встроенный экран 0.42": контроллер SSD1306, видимая область 72×40.
// Аргументы: поворот, вывод сброса (нет), SCL = GPIO6, SDA = GPIO5.
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 6, 5);

const int POT = 3;
uint8_t history[72];  // последние 72 значения для графика

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

void loop() {
  int value = analogRead(POT);  // 0..4095

  // сдвигаем график влево и добавляем новую точку
  memmove(history, history + 1, sizeof(history) - 1);
  history[71] = map(value, 0, 4095, 0, 27);

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_6x10_tf);
  u8g2.setCursor(0, 9);
  u8g2.print(value);
  u8g2.drawFrame(30, 2, 42, 7);                      // шкала
  u8g2.drawBox(31, 3, map(value, 0, 4095, 0, 40), 5);
  for (int i = 0; i < 72; i++) {
    u8g2.drawPixel(i, 39 - history[i]);
  }
  u8g2.sendBuffer();
  delay(30);
}

Подавайте на выводы не больше 3,3 В. 5 В может повредить чип.

Не используйте для аналоговых датчиков GPIO2, GPIO8 и GPIO9: это «загрузочные» выводы, и внешняя схема на них может помешать плате запуститься.