NodeMCU esp8266 + потенциометр = интерфейс управления


NodeMCU esp8266 + потенциометр = интерфейс управления.

Предистория.
Понадобилось переключать программную часть (выбирать сценарии) аппаратно.
Первое что пришло в голову — кнопки. Нажал одну — выбрал первый сценарий, вторую — второй и т.д.
Но поскольку речь шла о esp8266, то каждая кнопка предполагала занятый пин (и дополнительный резистор).
Вспомнил про аналогово-цифровой вход (ADC) и сделал нечто вроде ПТК для сценариев на потенциометре.

 

node mcu esp8266 pin

Пример простой. в качестве вывода используется println в терминал (то есть esp8266 подключена к компьютеру).
Можно придумать как отображать переключение при автономной работе (прикупить дисплей, мигать разными диодами при переключении или еще 1000 вариантов), но моя адача была сделать переключатель.
Там где event 1,2,3,4,5 можно вызывать разные свои сценарии.

// Выбираем сценарий действий при помощи переменного резистора (реостата, потенциометра).
// кодил: Ben-Ja в 2019
// Дано:
// 1. NodeMCU esp8266 с али
// 2. реостат ( я взял на 10 кОм. )
// Подцепляю без обвязок, напрямую к плате.
// Если крутилку в пузо, ногами вверх, то слева направо:
// 3,3v - A0 - Gnd
// А теперь я через это хочу управлять (выбирать программный сценарий)

const int adc = A0; // Аналоговый вход (он единственный на моей плате)
int inVal = 0;      // Сюда будут складываться считаные значения 0-1023

void setup(){
  Serial.begin(115200); // Можно 9600 но, захотелось 115200
}

void mycase(int val){
// вариант с возвратом значения int mycase(int val){
  // выбор действий от значений реостата.
  val /= 4; // вместо 0-1023 мне проще 0-255
  int res = 0;
  switch(val){
    case 0 ... 49:
      res = 1;
      Serial.println ("event 1");
      break;
    case 50 ... 99:
      res = 2;
      Serial.println ("event 2");
      break;
    case 100 ... 149:
      res = 3;
      Serial.println ("event 3");
      break;
    case 150 ... 205:
      res = 4;
      Serial.println ("event 4");
      break;
    case 206 ... 255:
      res = 4;
      Serial.println ("event 5");
      break;
    default:
    // Значения уже вне диапазона.
      res = 0;
      Serial.println ("error 0");
      break;
  }
// вариант с возвратом значения	return res;
}

void loop(){
  inVal = analogRead (adc); // аналоговое значение 0-1023
// вариант с возвратом значения Serial.println (mycase(inVal));
  mycase(inVal);
  delay(1000); // ждать секунду.
}
// END

esp8266 resistor as switch

esp8266 resistor as switch