Сравнение значений
- Войдите на сайт для отправки комментариев
Вс, 09/05/2021 - 01:39
Добрый день!
Пишу (тестирую) свою первую программу, но работает как то все странно, не могу понять причины. В теле if, задержка 3500 мс, но перед включением, хотя работает наоборот, если условие соблюдается. Может еще как то не очень все правильно написано, код работает но очень странно. LOW и HIGH должны быть наоборот. Но работает именно так:
/*macro definition of sensor*/ #define SENSOR A1//the YELLOW pin of the Sensor is connected with A0 of Arduino/Catduino void setup() { Serial.begin(9600); pinMode(A2, OUTPUT); digitalWrite(A2, HIGH); pinMode(A3, OUTPUT); digitalWrite(A3, HIGH); pinMode(A4, OUTPUT); pinMode(A5, OUTPUT); digitalWrite(A5, HIGH); } void loop() { int raw = analogRead(SENSOR); float voltage = (float) (raw * 5.0)/1024; // voltage at the pin of the Arduino float voltage1 = voltage * 12 / 4.995; // voltage at the pin of the Arduino Serial.println("Pressure is"); float pressure_kPa = (voltage1); // voltage to pressure Serial.print(pressure_kPa); Serial.println(" kPa"); if (voltage1 < 1.22) { Serial.println(" da"); digitalWrite(A4, LOW); delay(3500); digitalWrite(A4, HIGH); } else { Serial.println(" net"); digitalWrite(A4, HIGH); } delay(10500); }
Да уж. Очень сумбурно объяснил. Изначально А4 LOW. Потом становиться HIGH и если else то больше никогда LOW не будет. Так задумывалось?
В теле if, задержка 3500 мс, но перед включением...
кого?! чего!? и куда!?
раз 10 перечитал и ничего не понял... если перед включением МК, то нужно включать второй МК, который будет запускать первый через 3,5 сек. А чтобы на выключенном МК было нужное состояние перед включением, нужно использовать резисторы (и не только)... нужна схема, а то ничего не понятно... ну или поток сознания превратите в ТЗ - может и вопрос тогда разрешится, когда поймете чего хотите.
негоже float срвнивать
негоже float срвнивать
Почему? Это если == то могут быть варианты, а <> работает без проблем.
А теперь тоже самое, но так, чтобы кто-то ещё, кроме Вас, мог понять. Советую разбить на 3 пункта
1. что хотелось сделать
2. как оно работает сейчас
3. Чем (2) отличается от (1)
Тогда есть шанс, что Вам помогут.
Прошу прощения за невнятность объяснения. Что задумывал и что подключено:
На ноге А1 - напряжение снимаемое с датчика давления. Хотел написать: при падении давления до менее 1.22, подавалось напряжение на ногу А4. Напряжение сохраняется 3500 мс, далее выключается. и цикл повторяется. 1. Замер напряжения;
2. Расчет по формуле
3. Если менее 1,22 то подаем напряжение на ногу А4 3500 мс времени.
4. выключаем напряжение на ногу А4
5. переход к пункту 1.
Неясность в том что сначала в коде идет LOW а потом HIGH, но должно быть вроде наоборот, HIGH подаем а LOW отключаем. Думаю где то причина есть, и в дальнейшем неясности с подключением lcd монитора. Но чтобы продолжить осознание lcd хочется закрыть пробелы в этом коде. Спасибо.
В теле if, задержка 3500 мс, но перед включением...
кого?! чего!? и куда!?
раз 10 перечитал и ничего не понял... если перед включением МК, то нужно включать второй МК, который будет запускать первый через 3,5 сек. А чтобы на выключенном МК было нужное состояние перед включением, нужно использовать резисторы (и не только)... нужна схема, а то ничего не понятно... ну или поток сознания превратите в ТЗ - может и вопрос тогда разрешится, когда поймете чего хотите.
пока я второй МК не подключал к первому. Но в планах на некоторое будущее есть такие желания попробовать. В настоящий момент у меня все по скромному.
А теперь тоже самое, но так, чтобы кто-то ещё, кроме Вас, мог понять. Советую разбить на 3 пункта
1. что хотелось сделать
2. как оно работает сейчас
3. Чем (2) отличается от (1)
Тогда есть шанс, что Вам помогут.
1. Хочется включать ногу А4 (подать напряжение) при расчетном значении <1.22.
2. Работает не ясно как. Код работает, но я не понимаю почему именно так. По документации HIGH подача напряжения. Работает если идет сначала LOW а потом HIGH. Время подачи напряжения 3500 мс.
3. Если сделать сначала HIGH а потом LOW, Подача напряжения будет 10500 мс. (в конце кода строчка).
Для полноты понимания: почему так? Может где то выше в коде есть другие допущения и я их не вижу?
У Вас в сетап не определено значение ноги А4. По умолчанию после сброса значение ноги LOW. В строке 28 опять LOW через 3.5 сек HIGH через 10.5 сек опять LOW. Это то что напрограммировано.
29 и 31 поменять местами, а else .33-37... можно вообще наверное убрать.
29 и 31 поменять местами, а else .33-37... можно вообще наверное убрать.
Пробовал. Питание будет 10500 сек, в конце кода пауза. По ней срабатывает, но это неправильно
Пробовал в сетап
не помогло.
Еще заметил странность, если при очередном loop кода будет постоянно соблюдаться условие, питание так и без перебоев и пауз будет подаваться на ногу А4. Хотя должна быть какая то пауза, пробовал delay в начале кода, все без изменений. Питание подается без перебоев.
29 и 31 поменять местами, а else .33-37... можно вообще наверное убрать.
Пробовал. Питание будет 10500 сек, в конце кода пауза. По ней срабатывает, но это неправильно
да не может быть.
Скорее всего дело в том , что выводы управляют модулями реле.
А там бывают три исполнения:
1. Включение высоким уровнем
2. Включение низким уровнем
3. Можно выбрать уровень включения
но об этом история умалчивает.