Пт июн 11, 2021 16:13:21
#include <EEPROM.h>
#define INIT_ADDR 7 // номер резервной ячейки
#define INIT_KEY 50
#define LAMPA_POV PB0
#define SIGNAL_POV PB1
#define SIGNAL_BLIZ PB3
#define KNOPKA_YARK PB4
void yarkost();
bool state;
unsigned char bri = 125;
uint32_t btnTimer, myTimer1, timeCounter;
void setup() {
pinMode(SIGNAL_BLIZ, INPUT); // объявляем пин 7 как вход
pinMode(LAMPA_POV, OUTPUT); // объявляем пин 5 как выход
pinMode(SIGNAL_POV, INPUT); // объявляем пин 6 как вход
pinMode(KNOPKA_YARK, INPUT_PULLUP); // кнопка настройки яркости
}
void loop() {
boolean test;
boolean pov = digitalRead(SIGNAL_POV);
boolean bliz = digitalRead(SIGNAL_BLIZ);
static bool flag = false;
if (EEPROM.read(INIT_ADDR) != INIT_KEY) {
EEPROM.write(INIT_ADDR, INIT_KEY);
EEPROM.put(0, bri);
}
state = !digitalRead(KNOPKA_YARK);
if (state && !flag && millis() - btnTimer > 100) {
flag = true;
btnTimer = millis();
}
if (state && flag && millis() - btnTimer > 600 && bliz == 1) {
btnTimer = millis();
yarkost();
}
if (!state && flag && millis() - btnTimer > 500) {
flag = false;
btnTimer = millis();
}
if (pov == 0 && bliz == 1) { //При выполнение этого условия программа зависает и не выходит отсюда
EEPROM.get(0, bri);
analogWrite(LAMPA_POV, bri);
} else {
if (pov == 0) {
digitalWrite(LAMPA_POV, HIGH);
}
else {
test = 0;
while (test == 0) {
pov = digitalRead(SIGNAL_POV);
if ( pov == 1) {
digitalWrite(LAMPA_POV, HIGH);
myTimer1 = millis();
} else if ( millis() - myTimer1 < 2000 && pov < 1 ) {
digitalWrite(LAMPA_POV, LOW);
} else {
test = test + 1;
}
}
}
}
}
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) {
digitalWrite(LAMPA_POV, LOW);
}
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) {
digitalWrite(LAMPA_POV, LOW);
while (yark != 10) {
analogWrite(LAMPA_POV, bri);
morgalka = millis();
while (millis () - morgalka < 300) {
digitalWrite(LAMPA_POV, LOW);
}
morgalka = millis();
while (millis () - morgalka < 200) {
analogWrite(LAMPA_POV, bri);
}
yark += 1;
state = !digitalRead(KNOPKA_YARK);
}
}
}
}
}
Сб июн 12, 2021 12:23:01