Добрый день, Увожаемые!
Прошу вашей помощи, написал код для ATmega328(Ардуино нано) загрузил, переключение работает вместе с таймером, то есть с задержкой. Но она нужна была для другого проекта, по этому заменил ее ардуинкой(328p lqfp32), после переноса переключение режимов работает, но задержки нет.
Вот код:
#define RELAY_IN0 2
#define RELAY_IN1 3
#define RELAY_IN2 4
#define RELAY_IN3 5
#define RELAY_IN4 6
#define RELAY_IN5 7
#define RELAY_IN6 8
#define RELAY_IN7 9
int rcPinA = 10;
int rcPinB = 11;
int rcPinC = 12;
unsigned long delayStart = 0;
bool delayRunning = false;
bool pr;
void setup() {
Serial.begin(9600, SERIAL_8N1);
pinMode(rcPinA, INPUT);
pinMode(rcPinB, INPUT);
pinMode(rcPinC, INPUT);
digitalWrite(RELAY_IN0, HIGH);
digitalWrite(RELAY_IN1, HIGH);
digitalWrite(RELAY_IN3, HIGH);
digitalWrite(RELAY_IN2, HIGH);
digitalWrite(RELAY_IN4, HIGH);
digitalWrite(RELAY_IN5, HIGH);
digitalWrite(RELAY_IN6, HIGH);
digitalWrite(RELAY_IN7, HIGH);
pinMode(RELAY_IN0, OUTPUT);
pinMode(RELAY_IN1, OUTPUT);
pinMode(RELAY_IN2, OUTPUT);
pinMode(RELAY_IN3, OUTPUT);
pinMode(RELAY_IN4, OUTPUT);
pinMode(RELAY_IN5, OUTPUT);
pinMode(RELAY_IN6, OUTPUT);
pinMode(RELAY_IN7, OUTPUT);
}
void loop() {
int inputState = pulseIn(rcPinA, HIGH);
static byte mode = 0;
static byte mode_st = 0;
//проверка без пульта радиоуправления
/*if (digitalRead(10)==1) mode =0;
else if (digitalRead(11)==1) mode = 1;
else mode =2;*/
if (inputState > 1600) mode = 0;
else if (inputState > 1200 && inputState < 1600) mode = 1;
else mode = 2;
if (mode_st != mode) {
mode_st = mode;
pr = 0;
}
switch (mode_st) {
case 0: task1(); break;
case 1: task2(); break;
case 2: stop(); break;
}
}
void stop() {
static uint32_t tmr3;
if (millis() - tmr3 >= 1000) {
tmr3 = millis();
digitalWrite(RELAY_IN0, HIGH);
digitalWrite(RELAY_IN1, HIGH);
digitalWrite(RELAY_IN3, HIGH);
digitalWrite(RELAY_IN2, HIGH);
digitalWrite(RELAY_IN4, HIGH);
digitalWrite(RELAY_IN5, HIGH);
digitalWrite(RELAY_IN6, HIGH);
digitalWrite(RELAY_IN7, HIGH);
Serial.println("STOP");
}
}
void task1() {
static uint32_t tmr1;
if (pr == 0) {
stop();
pr = 1;
} else if (pr == 1 && millis() - tmr1 >= 1000) {
tmr1 = millis();
digitalWrite(RELAY_IN0, HIGH);
digitalWrite(RELAY_IN2, HIGH);
digitalWrite(RELAY_IN4, HIGH);
digitalWrite(RELAY_IN6, HIGH);
digitalWrite(RELAY_IN1, LOW);
digitalWrite(RELAY_IN3, LOW);
digitalWrite(RELAY_IN5, LOW);
digitalWrite(RELAY_IN7, LOW);
Serial.println("MODE 1");
}
}
void task2() {
static uint32_t tmr2;
if (pr == 0) {
stop();
pr = 1;
} else if (pr == 1 && millis() - tmr2 >= 1000) {
tmr2 = millis();
digitalWrite(RELAY_IN1, HIGH);
digitalWrite(RELAY_IN3, HIGH);
digitalWrite(RELAY_IN5, HIGH);
digitalWrite(RELAY_IN7, HIGH);
digitalWrite(RELAY_IN0, LOW);
digitalWrite(RELAY_IN2, LOW);
digitalWrite(RELAY_IN4, LOW);
digitalWrite(RELAY_IN6, LOW);
Serial.println("MODE 2");
}
}