Внутри case, OLED тормозит millis.
- Войдите на сайт для отправки комментариев
Вс, 09/01/2022 - 19:27
Внутри case, OLED тормозит millis!
Как побороть?
Без вывода на дисплей работает все четко, а с выводом тормозит раз в 5 наверное.
Как правильно оформить логику или сам код?
#include <OLED_I2C.h> OLED myOLED(SDA, SCL, 1); extern uint8_t SmallFont[]; const int endSwitch_a = 10; const int endSwitch_b = 11; const byte butnPin = 2; bool butn; const byte ledPin = 13; bool Led; unsigned long past; const unsigned long time2sec = 2000; unsigned long mill; int endSwitch_a_State = 0 ; enum {READY_ERROR, CARRENT_SENSOR} Mode; void setup() { if (!myOLED.begin(SSD1306_128X64)) while (1); myOLED.setFont(SmallFont); pinMode(2, 0x2); pinMode(butnPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, Led = 0); pinMode(endSwitch_a, INPUT_PULLUP); } void loop() { switchEnd(); stateManager(); } void switchEnd() { endSwitch_a_State = !digitalRead(endSwitch_a); if (endSwitch_a_State == 0) { Mode = READY_ERROR; } else Mode = CARRENT_SENSOR; } void stateManager() { switch (Mode) { case READY_ERROR: mill = millis(); butn = digitalRead(butnPin); if ((!butn) && (past == 0)) { /* если кнопка нажата*/ digitalWrite(ledPin, Led = 1); /*то вкл светодиод*/ past = mill; } if (Led & mill - past >= time2sec) {/*если светодиод горит больше 2 сек*/ digitalWrite(ledPin, Led = 0);/*то выкл*/ } //============ вывожу на дисплей и время замедляется ============ myOLED.clrScr(); myOLED.print("READY_ERROR", CENTER, 0 ); myOLED.update(); //=============================================================== break; case CARRENT_SENSOR: myOLED.clrScr(); myOLED.print("CARRENT_SENSOR", CENTER, 0 ); myOLED.update(); break; } }
Чо, вместо 2 секунд диод горит 10? Или как определил то?
Строка 47 вообще как работает ?
Может все же не '&' а "&&" там должно быть ?
Иначе выражение Led&mill будет равно либо 0 (если mill имеет четное значение) либо 1 (если нечётное), ну и вычитать из него что то , такое себе занятие ...
У Вас не миллис тормозит. Вы сами тормозите не по детски.
Что за бред написан в строках №№ 47-49? Вы при КАЖДОМ проходе loop выполняете clrScr и update. Чего б ему не тормозить?
А миллис Вы вообще используете только один раз. После первого исполнения строки №45, миллис больше вообще не используется.
Возможно. Я у "квона" позаимствовал.
Какая разница, у кого Вы позаимствовали?
Даже если бы здесь и было правильно, логика работы с миллис всё равно кривая донельзя, см. мой предыдущий пост.
У Вас не миллис тормозит. Вы сами тормозите не по детски.
Что за бред написан в строках №№ 47-49? Вы при КАЖДОМ проходе loop выполняете clrScr и update. Чего б ему не тормозить?
А миллис Вы вообще используете только один раз. После первого исполнения строки №45, миллис больше вообще не используется.
Дык а как мне выводить, и при этом выполнять процедуру кейса.
Какая разница, у кого Вы позаимствовали?
Даже если бы здесь и было правильно, логика работы с миллис всё равно кривая донельзя, см. мой предыдущий пост.
Подскажите как правильно! Это же форум? Или здесь умеют обзывать тормозами!
Здесь всё умеют.
http://arduino.ru/tutorials/BlinkWithoutDelay - вместо светодиода следует дёргать экран.
Да, нет, см. приоритет операций.
Другое дело, что я уже задолбался писать ТС в каждой теме
Igoreck СТАВЬТЕ СКОБКИ !!!
Но он же, сцуко, умнее всех и плевать ему на то, что здесь пишут. Он уже "зделал".
Подскажите как правильно!
А Вы для начала объясните словами, что написано в строках, которые я упомянул. Глядишь, пока объясняете и поймёте. А нет, так помогу.
"Это же форум? Или "вы умеете только не думая передрать у квона, не понимая ни одной буквы, и требовать, чтобы Вам написали правильно? Вам тут все должны? Или через одного?
Я Вам подсказал в каких именно строках у Вас бред. Так и работайте над этим.
Да, нет, см. приоритет операций.
Другое дело, что я уже задолбался писать ТС в каждой теме
Igoreck СТАВЬТЕ СКОБКИ !!!
Но он же, сцуко, умнее всех и плевать ему на то, что здесь пишут. Он уже "зделал".
Не обобщайте, да и не судите по себе.
Какие скобки и где ставить?
Подскажите как правильно!
А Вы для начала объясните словами, что написано в строках, которые я упомянул. Глядишь, пока объясняете и поймёте. А нет, так помогу.
"Это же форум? Или "вы умеете только не думая передрать у квона, не понимая ни одной буквы, и требовать, чтобы Вам написали правильно? Вам тут все должны? Или через одного?
Я Вам подсказал в каких именно строках у Вас бред. Так и работайте над этим.
Какие скобки и где ставить?
Если после вот этого поста, Вы ещё не поняли, то не ставьте нигде и никакие.
И, да, кстати, правильно ли я Вас понял, что моя просьба "А Вы для начала объясните словами, что написано в строках, которые я упомянул" проигнорирована?
Какие скобки и где ставить?
Если после вот этого поста, Вы ещё не поняли, то не ставьте нигде и никакие.
У меня там не правильная приоритезация?
[/quote]
И, да, кстати, правильно ли я Вас понял, что моя просьба "А Вы для начала объясните словами, что написано в строках, которые я упомянул" проигнорирована?
[/quote]
Нет не игнорировал, а думаю как объяснить словами.
Думаю что как - то так:
Если светодиод и время вычтено за отведенное время, то лед перевести в лов
Мне кто-нибудь поможет?
У меня там не правильная приоритезация?
Простите, но Вы мне надоели своей "приоритезацей". Вам было сказано, ставьте скобки, а Вы опять ничего не поставили и свою "приоритезацию" доказываете. Кому? Мне? Нах не надо, у меня всё работает.
Вот она, сцуко, Ваша "приоритезация" ... ответьте, что у Вас написан вот в этом месте:
Led && mill - past >= time2sec
Это означает:
Led && (mill - past >= time2sec)
или
(Led && mill - past) >= time2sec
или
Led && (mill - past) >= time2sec
Нет не игнорировал, а думаю как объяснить словами.
Думаю что как - то так:
Если светодиод и время вычтено за отведенное время, то лед перевести в лов
Подумайте ещё и объясните СЛОВАМИ как оно работает. Вы правила форума читали?
Вы же не понимаете, что там написано, поэтому что-то подсказывать Вам бесполезно. Ну, попробую, конечно, ... нух, хорошо, Вы выждали интервал, а где "будильник заводится на новый"?
Мне кто-нибудь поможет?
Да, как только начнёте работать сами.
Объясните, что и как у Вас работает и объясните словами.
Разберитесь в моём вопросе про скобки из предыдущего поста и ответьте на него. Только доказательно ответьте, а не пальцем в небо.
Думаю так будет правильней. Даже скобки поставлю!
if ((mill - past) >= time2sec){
}
Словами это:
Если вычтеное время старта (past), от времени запуска (mill) больше чем две секунды, то ...
А вообще-то, боюсь далее вести диалог, в виду того как гражданин "ЕвгенийП", очень нервничает.
Чо ему нервничать то? Нервничать ты должен. Если хоть немного уважения к отвечающему на твой вопрос имеется.
Igoreck -языки вам явно не даются.
В прошлый раз я вычитал у вас _з_делал, теперь читаю C_a_rrent
Carrent - это что? Car_rent? - прокат авто?
И Си вы тоже не знаете... не даются вам языки
а что касается ваших "диалогов" - так это не Евгений очень нервичает, это вы невероятно тупите... тут любой из себя выйдет. Так что либо терпите, либо идите с миром учиться куда-нить еще.
Может это концептуальное программирование? Ну по типу концептуального искусства? А мы просто не догоняем! ;)))) Злые мы стали, и "квартирный вопрос" опять же... эхх...
Igoreck -языки вам явно не даются.
В прошлый раз я вычитал у вас _з_делал, теперь читаю C_a_rrent
Carrent - это что? Car_rent? - прокат авто?
И Си вы тоже не знаете... не даются вам языки
а что касается ваших "диалогов" - так это не Евгений очень нервичает, это вы невероятно тупите... тут любой из себя выйдет. Так что либо терпите, либо идите с миром учиться куда-нить еще.
«Current» , «сделал» - поспешил и опечатался, с кем не бывает.
И я прошу помощи всего на всего. Почему нельзя объяснить что, мол так не делается, а делается так и так. Я буду учиться и запоминать, на следующий раз буду делать уже правильно.
Вот Вы своим детям тоже так объясняете типа, ты что тупой, не умеешь читать, писать, считать не важно, - это не твоё.
Почему здесь на форуме так относятся к тебе, как к прокаженному.
Я никого не оскорбляю, пытаюсь научится, мне это нравится.
«Current» , «сделал» - поспешил и опечатался, с кем не бывает.
опечатался - поправь. а не жди пока над тобой смеятся начнут. Тем более что в слове carrent ты опечатался много раз в нескольких местах кода.
А что до отношения к тебе - надо не только лошить на форуме и вопросы задавать, надо и самому искать ответы в книжках и в сети. А ты все готовенького ждешь. И еще - когда тебя говорят. как правильно - то надо слушать, а не огрызаться.
Вот и сейчас - прежде чем задавать новые вопросы - перечитай уже полученные ответы и исправь все ошибки, на которые тебе указали. И новые вопросы, просьба, только когда выложишь полностью исправленный скетч.
И я прошу помощи всего на всего. Почему нельзя объяснить что, мол так не делается, а делается так и так. Я буду учиться и запоминать, на следующий раз буду делать уже правильно.
Представим: подошел к Вам в парке карапуз лет шести и говорит - дед, как посчитать площадь нашего города?
А я ему: "Да лехко. Нужно длину города умножить на ширину города, и сё. Иди, малыш, мерий"
Думаю так будет правильней. Даже скобки поставлю!
if ((mill - past) >= time2sec){
}
Словами это:
Если вычтеное время старта (past), от времени запуска (mill) больше чем две секунды, то ...
А вообще-то, боюсь далее вести диалог, в виду того как гражданин "ЕвгенийП", очень нервничает.
В посте #16 в моём вопросе там еще Led был. Ответьте полностью.
Что касается описания словами. Я же Вам дал наводящий вопрос, "как Вы заводите будильник для нового звонка?" Вас это ни на какие мысли не навело? Как он в следующий раз сработает? Если бы Вы попытаись сами объяснить работу (а не скопипастили не понимая), Вы не могли бы не споткнуться об эту ошибку.
Так не работает. Пока Вы не поймёте - ничего Вы не будете делать правильно. Вот я и пытаюсь, чтобы Вы поняли. Но Вы мои вопросы игнорируете и просто ждёте готового решения. Работайте, отвечайте на вопросы, переделывайте. Только так поймёте.
Думаю так будет правильней. Даже скобки поставлю!
if ((mill - past) >= time2sec){
}
Словами это:
Если вычтеное время старта (past), от времени запуска (mill) больше чем две секунды, то ...
А вообще-то, боюсь далее вести диалог, в виду того как гражданин "ЕвгенийП", очень нервничает.
В посте #16 в моём вопросе там еще Led был. Ответьте полностью.
Что касается описания словами. Я же Вам дал наводящий вопрос, "как Вы заводите будильник для нового звонка?" Вас это ни на какие мысли не навело? Как он в следующий раз сработает? Если бы Вы попытаись сами объяснить работу (а не скопипастили не понимая), Вы не могли бы не споткнуться об эту ошибку.
Так не работает. Пока Вы не поймёте - ничего Вы не будете делать правильно. Вот я и пытаюсь, чтобы Вы поняли. Но Вы мои вопросы игнорируете и просто ждёте готового решения. Работайте, отвечайте на вопросы, переделывайте. Только так поймёте.
Led && mill - past >= time2sec
Led && здесь лишний и не нужен, так как он в этом выражении принимает два значения до нажатия кнопки 0, а после 1.
Первое действие выполняется в скобках.
Соответственно:
1) Led && (mill - past >= time2sec)
Если вычитаемое время старта (past), от времени запуска (mill) больше или равно чем две секунды, и логическая 1 (Led) которая здесь при запуске принимает истинное значение, то получается, - если истина и истина, значит истина.
2)(Led && mill - past) >= time2sec
Здесь по моему мнению логики нет. И конструкция не работает.
Если время старта (past), минус время запуска (mill), то есть от меньшего отнять больше получим ложь, и логическая 1 (Led) истина, больше или равно чем две секунды, то получается, - если ложь и истина значит ложь.
3)Led && (mill - past) >= time2sec 1
Тут также рабочая конструкция, как и в первом варианте.
Если истина и истина то истина.
По поводу будильника. Я прекрасно понимаю, что функция однократного действия.
Но если добавить условие "past = 0;", которое возращает "затвор", то функция многократного действия.
Даже если и здесь, я ошибся, то с удовольствием выслушаю. Только если можно, без грубостей.
Ах да, по поводу нерешенной задачи. Подскажите пожалуйста, а написать, я напишу.
Может это концептуальное программирование? Ну по типу концептуального искусства? А мы просто не догоняем! ;)))) Злые мы стали, и "квартирный вопрос" опять же... эхх...
а я давно говорил, что москвичей испортил квартирный вопрос, вон чел под Архызом сделал шалаш и уже несколько лет ждёт конца света, наслаждаясь свободой )))