Функция внутри if не работает
- Войдите на сайт для отправки комментариев
Не работает моя простейшая функция внутри оператора if, без If работает, в for работает.
Я новичок в программировании и в Arduino. Потихоньку осваиваю от простого к сложному. Разбираясь в функциях я столкнулся с проблемой, в которой ошибочность мне неочевидна, поэтому прошу указать на возможные недочеты и указать что именно почитать. Информацию беру из уроков по Ардуино, с этого сайта референс, читаю C programming for Arduino.
Проблем возникла при работе с сенсорной кнопкой. Где при соприкосновении с сенсором по моей задумке диод должен мигать одним образом, а при отсутствии соприкосновения - другим. Эти разные частоты мигания я решил "упаковать" как разные функции и их вызывать согласно событиям. Простейшую мигалку записал в фукнцию blinkLed и опробовал задав необходимые параметры - мигает как нужно. Когда же я попробовал вызвать эту фукнцию по соотвествию условию внутри оператора if, то обнаружил, что диод не мигает совершенно. Однако если явно прописать включить/выключить диод, то оператор if все отрабатывает.
После этого отказался от сенсорной кнопки и стал проверять простое условие if больше/меньше - ситуация такая же. Привожу код скетча с моими комментариями. Скетч компилируется и заливается без ошибок. Плата Arduino Nano. Учусь в Arduino IDE 1.8.2 в Kubuntu 16.04.2
/*Скетч где при проверке условия внутри if функция не работает*/ int ledPin = 13; //пин для светодиода void setup() { Serial.begin(9600); //начинаем обмен с последовательным портом pinMode(ledPin, OUTPUT); //13 пин с СИД на выход } void blinkLed(int, int); //объявим функцию void loop() { int timeLedOn = 1000; //задаем время включения диода int timeLedOff = 200; //задаем время выключения диода int a = 5; //эта переменная только для проверки условий в if if (a >= 3) //просто условие для проверки if, типа при одном условии диод мигает, в другом просто горит { /* Если использовать такой код, то диод будет мигать, а вот с вызовом функции не мигает совсем. Хотя в выводе последовательного порта показывает верные значения Touched/Not touched Здесь время включения-выключения инвертитовано относительно функции blinkLed чтобы знать отчего мигает диод digitalWrite(ledPin, LOW); delay(1200); digitalWrite(ledPin, HIGH); delay(100);*/ void blinkLed(int timeLedOn, int timeLedOff); //вот здесь диод НЕ МИГАЕТ и НЕ ГОРИТ совсем, в мониторе порта Touched Serial.println("Touched"); delay(200); } else { digitalWrite(ledPin, HIGH); //просто включим диод без мигания, здесь все в порядке при a<3 Serial.println("Not touched"); delay(200); } } void blinkLed(int timeLedOn, int timeLedOff) //функция мигания диодом с заданными временами включения и выключения диода { digitalWrite(ledPin, HIGH); delay(timeLedOn); //время включения диода digitalWrite(ledPin, LOW); delay(timeLedOff); //время выключения диода return; }
26 строка - это НЕ вызов функции. Посмотри рядом вызовы функции, например digitalWrite, delay и т.п.
Если вызываю функцию в 26 строке так:
то все работает. Спасибо Kisoft!
В итоге получилось следующее!
Главное чтобы ты понял что было написано в первом варианте