Добрый день уважаемые форумчане! Так сложилась моя нелегкая ситуация, что необходима Ваша помощь, а именно есть "как бы работающий скетч", человек , который его делал утверждает что он полностью рабочий, но я , подключая свои девайсы, немогу точно так же утверждать. Будет ли у Вас возможность проверить данное творение? Очень на это уповаю! Да прибудет с Вами сила!) Необходима ардуино Нано, уздатчик, реле(лоу тригер), потенциометр 10ком, ргб светодиод и обычный светодиод. /* дальномер во время мигания отображает реальную дальность измерения (допустим прибор ставится в узкий пролет (до 1 метра) - вкл питание, настроил макс дальность срабатывания ((это желтый свет ргб светодиода) т.е. я установил потенциометром определенную дистанцию (например 1 м, наглаз) всё что дальше 1 м - не регистрируется (устройство не реагирует), всё что ближе отображается желтым ргб (а после 30 сек и замыкает реле). Первые 30 сек реле не реагирует на возникновение препятствий, а после, при возникновении иных, замыкается. Тоесть первые 30 секунд необходимы для комфортной установки устройства, а после 30 секунд устройство работает в нормальном режиме (преграда - замыкает реле) */ ////// выводы подключения компонентов ////////// const int potPin = A0; const int echoPin = 9; const int trigPin = 8; const int relay = 15; /// A1 const int g_led = 16; /// A2 const int b_led = 17; /// A3 const int led = 18; /// A4 ///////// переменные ////////////////// long period = 300; /// период снятия показаний с дальномера 300 - 0.3 сек long blink_period_0 = 1000; /// период миганий кр. светодиода в начале 1000 - 1 сек long blink_period_1 = 500; /// период миганий кр. светодиода в конце 500 - 0.5 сек long relay_period = 3000; /// время работы реле 3000 - 3 сек unsigned long us_millis = 0; unsigned long time = 0; unsigned long relay_time = 0; int distance = 0; int distance_control = 0; int counter = 0; byte state = 0; byte led_state = 0; byte blink_state = 0; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(g_led, OUTPUT); pinMode(b_led, OUTPUT); pinMode(led, OUTPUT); pinMode(relay, OUTPUT); digitalWrite(relay, HIGH); } void loop() { Serial.print(distance_control); Serial.print(" "); Serial.print(distance); Serial.print(" "); Serial.print(blink_state); Serial.print(" "); Serial.println(counter); ////////////// работа дальномера ////////////////////// if (millis() - us_millis >= period) { DISTANCE(); us_millis = millis(); } /////// определяем предельное расстояние только в первые 30 сек //////////////////// if (blink_state < 2) { distance_control = map(analogRead(potPin), 0, 1023, 10, 200); } ////// мигаем красным светодиодом ////////////// if (blink_state == 0) { if ((millis() - time) > (led_state ? blink_period_0 : blink_period_0)) { led_state = !led_state; counter ++; digitalWrite(led, led_state); time = millis(); } if (counter >= 20) { counter = 0; blink_state = 1; } } if (blink_state == 1) { if ((millis() - time) > (led_state ? blink_period_1 : blink_period_1)) { led_state = !led_state; counter ++; digitalWrite(led, led_state); time = millis(); } if ((counter / 2) >= 10) { counter = 0; digitalWrite(led, LOW); blink_state = 2; } } ////////// РАБОЧИЙ ЦИКЛ ////////////////////// if (distance > 0 && distance < distance_control && blink_state == 2) { digitalWrite(g_led, HIGH); digitalWrite(b_led, HIGH); digitalWrite(relay, LOW); relay_time = millis(); state = 1; } if (state == 1) { if (millis() - relay_time > relay_period) { digitalWrite(g_led, LOW); digitalWrite(relay, HIGH); state = 2; } } } ////////// функция измерения расстояния дальномером ///////////////// void DISTANCE() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); distance = pulseIn(echoPin, HIGH) / 58; }
1 вставьте нормально код 2 у вас два варианта, или учить самому программирование или обратиться к автору кода
Смущают эти строки (тернарный оператор не делает выбора) Код (C++): if ((millis() - time) > (led_state ? blink_period_0 : blink_period_0) if ((millis() - time) > (led_state ? blink_period_1 : blink_period_1))