прошу помощи в скейтче

dimkadv
Offline
Зарегистрирован: 24.06.2022


#include <LiquidCrystal.h>
ЖК «Жидкий Кристалл» (2, 3, 4, 5, 6, 7);
const int RELAY_PIN = 12; // Пин управления реле
const int LED_PIN = 11; // Пин сигнального диода
const int LED_PIN2 = 10; // Пин сигнального диода
const int LED_COUNT_WRONG = 2; // Кол-во изменений состояния диода при неверном парковщике. Загорелся и потух это 2
const int LED_COUNTER_TIME = 7000; // Время наблюдения за диодом после ввода пина в мс
const int DIGIT_DELAY = 1500; // Пауза между вводом чисел в мс

интервал v = 1;
интервал v1 = 1;
интервал v2 = 1;
интервал v3 = 1;
интервал v4 = 1;
интервал led_sw = 0;
символ buf[20];
логическое значение = ложь;

недействительная установка () {
lcd.begin(16, 2);
pinMode (RELAY_PIN, ВЫХОД);
pinMode (LED_PIN, ВХОД);
pinMode (LED_PIN2, ВХОД);
Серийный.начать(9600);
}

недействительным parseV () {
v1 = (целое число) (v / 1000);
v2 = (целое число) (v% 1000/100);
v3 = (целое число) (v% 100/10);
v4 = (целое число) (v % 10);

если (v1 == 0) v1++;
  если (v2 == 0) v2++;
  если (v3 == 0) v3++;
  если (v4 == 0) v4++;

  v = v1 * 1000 + v2 * 100 + v3 * 10 + v4;
}

void writePinDigit (int num, bool is_delay) {
инт н;

для (n = 0; n < число; n++) {
цифровая запись (RELAY_PIN, ВЫСОКИЙ);
задержка(100);
цифровая запись (RELAY_PIN, НИЗКИЙ);
задержка(100);
lcd.setCursor(0, 1);
}

если (is_delay) задержка (DIGIT_DELAY);
}

недействительным ledCounter () {
int max = LED_COUNTER_TIME / 10;
интервал пред = НИЗКИЙ;
инт ш = 0;
инт п = 0;
инт ул;

для (n = 0; n < max; n++) {
if(digitalRead(14)==HIGH)//если кнопка нажата ...
{
st = цифровое чтение (LED_PIN);
 }
 еще//
 {
st = цифровое чтение (LED_PIN2);
}


если (ст != пред) {
СВ++;

предыдущий = ст;
}

задержка (10);
}

if (sw != 0 && sw != 2 && sw != 3 && sw != 4 && sw != 5 && sw != 6 && sw != 7 && sw != 8) {
sprintf(buf, "стой!!!");
Serial.println (буф);
lcd.print (буф);
стп = истина;
}

led_sw = SW;
}

недействительная итерация () {
writePinDigit(v1, правда);
writePinDigit(v2, правда);
writePinDigit(v3, правда);
writePinDigit(v4, ложь);

светодиодСчетчик();

sprintf(buf, "code:%d,led:%d", v, led_sw);
Serial.println (буф);
lcd.print (буф);

если (!stp) {
в++;
синтаксический анализ();
}
}

недействительный цикл () {
if (Serial.available() > 0) {//если есть доступные данные
String rec = Serial.readString();//читает содержимое порта


v = rec.toInt();
синтаксический анализ();
стп = ложь;

sprintf(buf, "стартовый код %d", v);
Serial.println (буф);
lcd.print (буф);
}

если (v > 0 && v < 10000 && !stp) {
итерация();
}
}

 

dimkadv
Offline
Зарегистрирован: 24.06.2022

Подскажите пожалуйста как сделать так что бы после третьего раза ввода pin arduino делала остановку на 5 минут (тоесть const int RELAY_PIN = 12; // Пин управления реле: Вводит цифры например 1111 пауза 1112 пауза 1113 пауза и после нужен перерыв 5 минут

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ты к следователю обратись, он подскажет

dimkadv
Offline
Зарегистрирован: 24.06.2022

Он мне сюда советовал обратится

nik182
Offline
Зарегистрирован: 04.05.2015

Ой. А на каком языке это написано? На православном вроде немного другие операторы были?

dimkadv
Offline
Зарегистрирован: 24.06.2022


#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
const int RELAY_PIN = 12; // Пин управления реле
const int LED_PIN = 11; // Пин сигнального диода
const int LED_PIN2 = 10; // Пин сигнального диода
const int LED_COUNT_WRONG = 2; // Кол-во изменения состояния диода при неверном valet. Загорелся и потух это 2
const int LED_COUNTER_TIME = 7000; // Сколько времени следить за диодом после ввода пина в мс
const int DIGIT_DELAY = 1500; // Пауза между вводом чисел в мс

int v = 1;
int v1 = 1;
int v2 = 1;
int v3 = 1;
int v4 = 1;
int led_sw = 0;
char buf[20];
bool stp = false;

void setup() {
lcd.begin(16, 2); 
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, INPUT);
pinMode(LED_PIN2, INPUT);
Serial.begin(9600);
}

void parseV() {
v1 = (int)(v / 1000);
v2 = (int)(v % 1000 / 100);
v3 = (int)(v % 100 / 10);
v4 = (int)(v % 10);

if (v1 == 0) v1++;
  if (v2 == 0) v2++;
  if (v3 == 0) v3++;
  if (v4 == 0) v4++;

  v = v1 * 1000 + v2 * 100 + v3 * 10 + v4;
}

void writePinDigit(int num, bool is_delay) {
int n;

for (n = 0; n < num; n++) {
digitalWrite(RELAY_PIN, HIGH);
delay(100);
digitalWrite(RELAY_PIN, LOW);
delay(100);
lcd.setCursor(0, 1);
}

if (is_delay) delay(DIGIT_DELAY);
}

void ledCounter() {
int max = LED_COUNTER_TIME / 10;
int prev = LOW;
int sw = 0;
int n = 0;
int st;

for (n = 0; n < max; n++) {
if(digitalRead(14)==HIGH)//если кнопка нажата ... 
{ 
st = digitalRead(LED_PIN);
 } 
 else//
 {
st = digitalRead(LED_PIN2);
}


if (st != prev) {
sw++;

prev = st;
}

delay(10);
}

if (sw != 0 && sw != 2 && sw != 3 && sw != 4 && sw != 5 && sw != 6 && sw != 7 && sw != 8) {
sprintf(buf, "stop!!!");
Serial.println(buf);
lcd.print(buf);
stp = true;
}

led_sw = sw;
}

void iteration() {
writePinDigit(v1, true);
writePinDigit(v2, true);
writePinDigit(v3, true);
writePinDigit(v4, false);

ledCounter();

sprintf(buf, "code:%d,led:%d", v, led_sw);
Serial.println(buf);
lcd.print(buf);

if (!stp) {
v++;
parseV();
}
}

void loop() {
if (Serial.available() > 0) {//если есть доступные данные
String rec = Serial.readString();//читает строку порта


v = rec.toInt();
parseV();
stp = false;

sprintf(buf, "start code %d", v);
Serial.println(buf);
lcd.print(buf);
}

if (v > 0 && v < 10000 && !stp) {
iteration();
}
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

После третьего раза чего?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

dimkadv пишет:

Он мне сюда советовал обратится

Врёшь, он бы тебя сразу в Мордовию закатал, на ПМЖ

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:
Ой. А на каком языке это написано? На православном вроде немного другие операторы были?

я тоже удивился, неужели Инфо-Бухгалтер теперь и для микроконтроллеров доступен )))

b707
Offline
Зарегистрирован: 26.05.2017

dimkadv пишет:

Подскажите пожалуйста как сделать так что бы после третьего раза ввода pin arduino делала остановку на 5 минут

завести в процедуре iteration() счетчик и когда он больше 3х - делать перерыв

dimkadv
Offline
Зарегистрирован: 24.06.2022

А можно поподробней. Просто не совсем понимаю как это стелать. Спасибо