Код перестает работать без команды "Serial.print().
- Войдите на сайт для отправки комментариев
Приветствую!!! Заранее говорю, что на форуме впервые. И если, что-то делаю тут не по феньшую-Пардон!
В общем начинаю осваивать программирование. Ситуация такая... Создал код, в котором имеется примитивный счетчик, при том как счетчик дотикал до определенного значения выполняется действие. И код в целом работает, но только с командой "Serial.print" ну так же конечно и с "Serial.println". Пробывал все, что может придти мне в голову при моем навыке программирования, ни чего не помогло. Остановился на примере приведенном в Arduino IDE(чтоб всех тут не "убить" своими "извращениями"))) таком как "blink without delay", суть таже. Только заменил в нем команду "millis()" на простецкую функцию счетчик. Так вот, если закоментировать команду "Serial.println(i);", которая отображает колличество тиков, то светодиод перестает изменять свое состояние. Кто-нибудь может подсказать почему код не правильно работает без "Serial.print"??? Вот код:
вместо функции Serial.print можете поставить delay(1) - уверен. тоже поможет.
Спасибо за совет! Но делу не поможет. Изменения состояния светодиода будут происходить, но не с тем периодом который имеет переменная "interval".
В отличие от миллис Ваши 200 - это не единицы времени, а "попугаи" - в данном случае число циклов loop. А длительность цикла зависит от того, что Вы в нём напишете.
//Функция счетчик int TIME (int count2) //<-- обратите на count2 { count++; //<-- а тут совсем другая переменная return count; }Ну interval это не период а полупериод. Дальше у вас там пара ошибок. Да и как вам помочь если изначально не знаем что вы хотите.
переменная "interval" имеет крайне слабое отношение к периоду мигания диода, поэтому от добавления задержки ваша программа ничего не потеряет :)
Короче, не стадайте фигней, делайте цикл на настоящих миллис, а не на кривой замене...
Вы бы вставили код по человечески. В таком виде его смотреть невозможно, да и Вам что можно сказть? "Ошибка в строке №ХЗ"? Вас устроит такой ответ?
Да, Вы правы, в примере приведенном в этой теме не правильно указал имя переменной(ну т.е. count2).
Кож будет нормальный или мне уходить?
Я ж говорю, первый раз на форуме( и про человеский пример отображения кода на сайте, даже пока понятия не имел, сорри.
Блин, ну сейчас то имеете? Так Вы вставите или нет?
Или слово "code" в панели инструментов ввода сообщения зрение не позволяет разглядеть?
Не надо оправдываться. просто сделайте это. ну, или помогайте себе сами.
int count; int i; const int ledPin = LED_BUILTIN; int ledState = LOW; int previousMillis = 0; const int interval = 200; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { //Вызов функции счетчика и присваивание "i" значения счетчика для дальнейших вычислений. i=TIME(count); int currentMillis = i; // собственно тот же "blink without delay" только с заменой миллис на значение счетчика if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); } //Serial.println(i); } //Функция счетчик int TIME (int count) { count++; return count; }все, сделал, по норме
Ну, так-то лучше. Теперь посмотрите на свой вопрос. Вы написали "если закоментировать команду "Serial.println(i);", которая отображает колличество тиков, то светодиод перестает изменять свое состояние". Что значит перестаёт? А в каком он находится? Он светится или нет? Нам самим догадываться? Учитесь задавать вопросы. Хрустальные шары тут запрещены, но рискну предположить, что он таки светится. Так? Далее, я Вам больше скажу. Он не только светится, но и мигает, только очень часто, с частотй примерно в килогерц. Глазом Вы этого не видите - возьмите осциллограф и убедитесь. А мигает он так часто, потому что Ваш интервал в 200 - это НИЧТО. Serial.print обеспечивала задержку, а без неё - мигает ... ну килогерц или околого того навскидку. Поставьте вместо print задержку на 50-100 мс и убедитесь.
P.S. Всё это относилось к изначальному коду. Потом Вы его "улучшили" :(
Замечательно: если раньше Ваша глобальная переменная менялась с неизвестной частотой, то теперь она вообще не меняется.
Невозможно найти ошибку, если неизвестно, что программа должна делать. А ни в том, ни в другом случае это непонятно.
И еще: по поводу вставки кода Вам совершенно правильно указали, и то, что Вы на форуме недавно, никак Вас не оправдывает потому, что Вы пренебрегли основным правилом хорошего тона на любом форуме: прежде чем писать на новый форум, следует его немного почитать.
миллис-то миллисом конечно же. но вопрос у меня в заключается в том что, почему при исключении(закоментированием) из кода строки№31-Serial.println(i), светодиод перестает мигать,?
А он не перестает, это Вам так только кажется.
миллис-то миллисом конечно же. но вопрос у меня в заключается в том что, почему при исключении(закоментированием) из кода строки№31-Serial.println(i), светодиод перестает мигать,?
так. Вечер перестайт быть томным.
Я Вам в посте #13 написал, что она на самом деле мигает, просто очень часто и потому Вы этого не видите. Написал почему так происходит. Написал как это проверить. Вам что-то осталось непонятным? Или Вы не читаете, а только пишете?
Евгений, Вы правы. не правильно я поставил вопрос((( светодиод светился, если смотреть на него, в половину мощности. теперь я понял в чем дело!!!
я не успевал прочесть все. тут много кто пишет.
Спасибо всем, кто дал ответ на вопрос!!!