Проблема с кнопкой на ATTiny13A

Yakush

✩✩✩✩✩✩✩
31 Май 2021
4
0
Проблема с кнопкой
При нажатие на кнопку лампочка гаснет как будто аттини зависает
Отпускаешь кнопку всё работает в штатном режиме
Писал в Arduino IDE для загрузки в аттини использую библиотеку MicroCore
Может кто сталкивался
C++:
#include <EEPROM.h>
#define INIT_ADDR 50  // номер резервной ячейки
#define INIT_KEY 50
#define LAMPA_POV PB0
#define SIGNAL_POV PB1
#define SIGNAL_BLIZ PB3
#define KNOPKA_YARK PB4
void yarkost();
bool state;
byte bri = 125;
uint32_t btnTimer, myTimer1, timeCounter;
void setup() {
  pinMode(SIGNAL_BLIZ, INPUT); // объявляем пин 7 как вход
  pinMode(LAMPA_POV, OUTPUT);
  pinMode(SIGNAL_POV, INPUT); // объявляем пин 6 как вход
  pinMode(KNOPKA_YARK, INPUT_PULLUP); // кнопка настройки яркости
  if (EEPROM.read(INIT_ADDR) != INIT_KEY) {
    EEPROM.write(INIT_ADDR, INIT_KEY);
    EEPROM.put(0, bri);
  }
}
void loop() {
  boolean test;
  boolean  pov = digitalRead(SIGNAL_POV);
  boolean  bliz = digitalRead(SIGNAL_BLIZ);
  static bool flag1 = false;
  state = !digitalRead(KNOPKA_YARK);
  if (state && !flag1 && millis() - btnTimer > 100 && bliz == 1 ) {   
    flag1 = true;
    btnTimer = millis();
  }
  if (state && flag1 && millis() - btnTimer > 600 && bliz == 1) {
    btnTimer = millis();
    yarkost();
  }
  if (!state && flag1 && millis() - btnTimer > 500) {
    flag1 = false;
    btnTimer = millis();
  }
  switch (pov) {
    case 0:
      analogWrite(LAMPA_POV, 255);
      while (digitalRead(SIGNAL_BLIZ) == 1) {
        EEPROM.get(0, bri);
        bliz = digitalRead(SIGNAL_BLIZ);
        pov = digitalRead(SIGNAL_POV);
        analogWrite(LAMPA_POV, bri);
        if (pov == 1 || bliz == 0) break;
      }
      break;
    case 1:
      test = 0;
      while (test == 0) {
        pov = digitalRead(SIGNAL_POV);
        if ( pov == 1) {
          analogWrite(LAMPA_POV, 255);
          myTimer1 = millis();
        } else if ( millis() - myTimer1 < 2000 && pov < 1 ) {
          analogWrite(LAMPA_POV, 0);
        } else {
          test = test + 1;
        }
      }
      break;
  }
}

void yarkost() {
  static bool flag = true;
  uint32_t morgalka, regyark;
  byte yark;
  bri = 0;
  yark = 0;
  while (state && flag && yark < 3) {
    state = !digitalRead(KNOPKA_YARK);
    morgalka = millis();
    while (millis () - morgalka < 400) {
      analogWrite(LAMPA_POV, 0);
    }
    while (millis() - regyark > 500 && state && flag) {
      state = !digitalRead(KNOPKA_YARK);
      bri += 25;
      bri = constrain(bri, 0, 255);
      EEPROM.put(0, bri);
      morgalka = millis();
      while (millis () - morgalka < 700) {
        analogWrite(LAMPA_POV, bri);
      }
      regyark = millis();
      if (bri == 250) {
        analogWrite(LAMPA_POV, 0);
        while (yark != 10) {
          analogWrite(LAMPA_POV, bri);
          morgalka = millis();
          while (millis () - morgalka < 300) {
            analogWrite(LAMPA_POV, 0);
          }
          morgalka = millis();
          while (millis () - morgalka < 200) {
            analogWrite(LAMPA_POV, 255);
          }
          yark += 1;
          state = !digitalRead(KNOPKA_YARK);
        }
      }
    }
  }
}
 

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

★★★★✩✩✩
2 Авг 2018
727
207
Когда творится совсем уж неведомая херня и не понятно, куда копать, начинай выкидывать куски скетча, пока не начнёт работать.
 

Yakush

✩✩✩✩✩✩✩
31 Май 2021
4
0
@Александр Симонов,Да вот почему и обратился, уже выкидывал пробовал без функции яркости,что при нажатии на кнопку просто загоралась лампа,и по разному объявлял кнопку и всё равно такая же фигня
 

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

★★★★✩✩✩
2 Авг 2018
727
207
@Yakush, если делал, как я предложил, то у тебя должен был в итоге получиться рабочий скетч и нерабочий скетч, и выкинутый кусок -- разница между ними. Показывай их
 
Изменено: