Pull to refresh
26
0
Сергей Келер @nwwind

Сисадмин

Send message
Граф лично мне показался менее наглядным.
Выше уже писали, что неплохо было бы и графом проиллюстрировать. Я, наверное, так и сделаю.
Много.
Это не самый эффективный код, конечно же.
Но с чего-то начать надо. Статья не про кнопку, а про МКА.
В статье написано не как сделать библиотеку, а как сделать МКА. То есть, вообще, а не только кнопку.

Как упаковать её в класс и спрятать в отдельную папку — я напишу в следующей статье.
Я сделал ООПный интерфейс к кнопкам, можно наследовать базовый абстрактный класс и делать свои классы кнопок для меню, для управления, для двойного клика итп.

В асинхронном режиме же, писать в loop() что-то типа if (bt.pressed()) { код } не очень правильно. Лучше код вставлять в том месте, где собственно случается событие. Без классов если, я указал где, для примера. Событий много, какие нужны лично вам, я угадать не могу.

В модели ООП для МКА с кнопкой я делаю так:

class toggleSmartButton: public SmartButton {
  private:
    byte myToggle=0;
  public:
    toggleSmartButton(int p) : SmartButton(p) {}  // Надо вызвать родительский конструктор, увы.
    virtual void onClick();		// Метод, который переопределяем. В базе он пустой.
};

// делаем объект. пин12.
toggleSmartButton bt(12);

// Этот метод переключает по клику
void modeSmartButton::onClick() {
  if (myToggle) {
     // Код для включения
      Serial.println("ON");
  } else {
    // Код для выключения
      Serial.println("OFF");
  }
  myToggle=!myToggle;
}

void loop() {
  bt.run(); // Надо положить сюда этот вызов.
}


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

Для SmartDelay есть интерфейс ООП, пожалуйста, управляйтесь событиями, делайте МКА для последовательности кусков кода с задержками. Это ардуинский путь как раз.
код1
delay(d1);
код2
delay(d2);
Можно преобразовать к МКА в четыре состояния: код1, ждём d1, код2, ждём d2 и ваш этот код будет выполняться не мешая задержками другому коду.

Если же надо просто выполнять некий код раз в N миллисекунд, то SmartDelay вообще отлично подходит.
enum class — интересно. можно указать byte вместо int.
работает! спасибо. хехе, век живи, век учись.
Можно так, да. Хммм…
Надо поэкспериментировать будет.
Почему?
У меня есть меню на МКА. Там наоборот просто: Кнопки вверх, вниз и пыщ. Длинный пыщ вызывает меню, он же закрывает.
Имеем меню с состоянием «текущий пункт» и событиями старт, вверх, вниз, ентер, выход. События прилетают от кнопочек, как я описывал в статье. Во вложенном меню будет «текущий путь».
По желанию можно добавить события «длинный вверх» и такой же вниз как перемотку в начало и конец.
Я к тому, что, если абстрагироваться от конкретных пунктов меню и реализации движения строчек на экране — то всё получится логично и красиво.
Хитрое поведение кнопок можно решить через мой класс SmartButton переопределяя его абстрактные методы, но это уже другая статья будет. Думаю написать вскоре.
Можно засунуть в PROGMEM, но оттуда доставать адрес надо каждый раз вычисляя смещение.
Красота же метода как раз в вызове из двумерного массива.
Думаю да, чтоит картинок добавить.
Я хотел мультфильм, но это уж для совсем-совсем чайников получится.
Теорию как раз не хотел привлекать тк всё-равное ЦА её читать не будет. Старался понятным непосвящённому языком писать.
Не догадался бы. Хммм… Пойду лупой разглядывать микросхему там. Здорово!
В печали пребываю.

С++ говно.

Размер объекта 157 байтов. На кнопку! Это перебор уж. Указатель на метод класса — 4 байта, на просто функцию — 2. Переписал в итоге внутри на Цэ плоском старом добром саму МКА. Интерфейс оставил старый, так что, всё прошло незаметно. В итоге 13 байтов на объект, уже ничего.
Эх, таблицей, конечно же, красиво, но в ембедеде… Жрёт память таблица, да и вообще оопность негуманно её расходует.

Закоммитил.
Применял конвертер уровня. Достаточно примитивный чип типа компаратора. Из 3.3 в 5 переводит на ура.
Там на модуле китайском защита есть.
Ага, спасибо.
Только там не датчик холла, а хз что для измерения тока.
Да, я всё это уже и сам придумал, когда статью написал. Я просто не стал бороться с еепромом, а решил проблему тупо железкой, с которой биться не нужно. :)
Вот, рекомендую.
Есть ещё батарейка, которую уже не жалко. Поиграю с ней и так и так.
Научите рисовать красиво? :)
Всё стояло в офисе, ардуина питалась от контупера.
Я читал про такой способ, им пользуется «автоматический» зарядник, которым я пользовался в этом проекте. От последствий наплевательского отношения этот способ не помогает, только контрольно-испытательный цикл.
Я использовал готовый зарядник-автомат для автомобильного аккумулятора.
Раз уж я их (два) реанимировал, то и выкидывать не буду :)
Вопрос зарядки не стоял. Для зарядки был специальный зарядник, он есть на фото.
Вся конструкция нужна, чтобы чередовать заряд и разряд.

Information

Rating
Does not participate
Location
Всеволожск, Санкт-Петербург и область, Россия
Registered
Activity