странная работа while или for
- Войдите на сайт для отправки комментариев
Сб, 23/02/2019 - 15:27
#define nSLEEP 21 #define STEPPER_STEP 44 //STEP Pin #define STEPPER_DIR 45 // DIR Pin #define nENBL 46 unsigned int motor_running = 13000; // полный ход unsigned int steps_of_motor = 12500; // рабочее положение, начальное unsigned int is_steps_of_motor = 0; // текущее положение unsigned int bars; boolean t=0, closed=1; byte timerST; byte timerDSB=0; //таймер датчика температуры byte timerDR=0; //таймер переключения показаний температуры boolean flagD=0, flagDR=0; //флаги void setup() { WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты WDTCSR=(1<<WDIE)| (1<<WDP2); // разрешение прерывания + выдержка 1/4 секунды pinMode(STEPPER_DIR, OUTPUT); pinMode(STEPPER_STEP, OUTPUT); pinMode(nENBL, OUTPUT); pinMode(nSLEEP, OUTPUT); digitalWrite (nSLEEP, 1); TCCR5A = 0; TCCR5B = (1<<WGM52) | (1<<CS51) | (1<<CS50); // Режим работы таймера CTC со сбросом счетчика + предделитель 64 TIMSK5 = 1<<OCIE5A; // Разрешение прерывания по сравнению OCR5A = 10; // Частота прерываний будет = Fclk/(N*(1+OCR1A)) где N - коэф. предделителя (1, 8, 64, 256 или 1024) closed=0;// полностью закрываем bars=0; while (bars < motor_running){ digitalWrite (nENBL, 0); digitalWrite(STEPPER_DIR, closed);} digitalWrite (nENBL, 1); //delay(3000); } void loop() { if (t==0) { closed=1; //открывает, положение начального запуска is_steps_of_motor = steps_of_motor; //где стоит Step(); t=1; } if (timerST==20) { closed=0; //закрывает Step(); } if (timerST==40) { closed=1; //открываем Step(); timerST=0;} } ISR (TIMER5_COMPA_vect) { digitalWrite(STEPPER_STEP, !digitalRead(STEPPER_STEP)); bars ++; } void Step() { bars=0; while (bars < is_steps_of_motor){ digitalWrite(STEPPER_DIR, closed); digitalWrite (nENBL, 0);} digitalWrite (nENBL, 1); } ISR (WDT_vect){ //вектор прерывания WD timerDSB++; // таймер датчика температуры timerDR++; //таймер переключения показаний температуры timerST++; }
есть такой код, все замечательно работает
есть такой код, тоже все хорошо работает
когда объединяешь два кода while блокирует работу датчика температуры и дисплея, остальное работает
может кто то объяснить в чем проблемма
блокировать начинает с строк 43-48, пробовал с for то же самое
http://arduino.ru/Reference/While
Вот и я об этом. Если в видео один мужик голый- то это эротика, а если одна баба ,то тоже эротика. А вот если вместе то блин порнуха выходит. Здесь нужны уже другие стандарты. Так и у вас.
из цикла выходит
Вот и я об этом. Если в видео один мужик голый- то это эротика, а если одна баба ,то тоже эротика. А вот если вместе то блин порнуха выходит. Здесь нужны уже другие стандарты. Так и у вас.
Ну слава богу, хоть кто-то сравнил программазм с порнухой!
mykaida.Так тут идет сплошная парнуха начина с Джереми Блума "Онанизм для начинающих". https://arduino.ua/docs/AOU164.pdf
похоже умные бухают, а красивые сидят здесь
С праздником!!!
пойду за умного попробую, может получится
пойду за умного попробую, может получится
Пральна!
Тут сэдмен недавно правильно сказал "Тут все тупые". Ну, почти правильно. Совсем правильно было бы "все, кроме ворот".
mrtester, а что дума закон приняла, чтоб каждое предложение в отдельном посте? Или это указ президента?
строки 48 и 83 выполняет, мотор останавливает
значит из цикла выходит?
mykaida.Так тут идет сплошная парнуха начина с Джереми Блума "Онанизм для начинающих". https://arduino.ua/docs/AOU164.pdf
а всю книгу можно
mrtester, главное в жизни не зацикливаться. Как только зациклишься на одном деле, то все писец другие дела по боку. Лучше делать все дела по чуть-чуть. То там то там и все будешь успевать. И программу пишите с таким же подходом и структурируйте, а то в винигрете сложно ковыряться. Это картошечка, а это горошек, а это камушек. Кто бросил камушек в винигрет. Никто. Ясно же когда готовил еду так свалися.
а всю книгу можно
Вам нужна книга Блума? Или что?
а всю книгу можно
Вам нужна книга Блума? Или что?
да, Блума
Вам нужна книга Блума? Или что?
да, Блума
И что, Вы не можете найти, где её скачать? Странно как-то, она на каждом углу валяется. Ну, держите - https://drive.google.com/open?id=0B9r7cRXQ4DU4XzVLeUVkNHdiaVU
Фи, Евгений Петрович, почто каку детям раздаете?))))
:)
А бедный Блум писал, старалса...
и всё, больше нечего писать, ответить ни кто не может
и всё, больше нечего писать, ответить ни кто не может
"Ни кто" :(
Тебе, родной, ещё в посте #6 все ответили.
тогда почему мотор останавливается четко по тактам?
убираем строки с 86 по 98 и 106 по 112, оставляем строки только в setup с 43 по 48. Нога nENBL после цикла переходит в 5 вольт
дальше while нет в коде и все равно не работает
я в коде это проблему пешил, мне интересно в теории что я не понял
убираем строки с 86 по 98 и 106 по 112, оставляем строки только в setup с 43 по 48. Нога nENBL после цикла переходит в 5 вольт
дальше while нет в коде и все равно не работает
ну ты думаешь кто-то будет сидеть и убирать-добавлять строки, как ты командуешь? - почисти код, оставь в нем 30-40 строчек так, чтобы проблема была видна - и выложи. Тогда, может, кто и снизойдет.
если убрать строчку 29 по 34 в сериал показывает температуру, если оставить, мотор отрабатывает 1 раз и выкл
А если описать bars как volatile?
тоже самое
Давайте свежий код. И заодно поставьте печать чего-нибудь (хоть Hello, world") после строки 35 и скжите печатается или нет, ну когда while на месте.
работает
дальше нет ни чего
дальше нет ни чего
А код, Евгений Петрович просил самый свежий код
36 строку печатает
вот так работает
похоже while использовает сторежевой таймер
даже вот так заработала
а если строчки 37 и 38 (код сообщения #41) поставить до while ?
А, ну поставьте после строки 49 кода из #39 печать переменной timerDSB и flagDR. Думаю, всё поймёте. У Вас условие в лупе не выполняется никогда.
Если вочдог срабатывает раньше первого прохода loop, то timerDSB становится 1, а flagDR остаётся нулём и всё - приплыли.
после выполнения строки 54 температуру перестает выдавать
Я говорю о коде из №39, не пудрите мозг строкой 54
У Вас условие в лупе не выполняется никогда.
ну уж прям-таки "никогда" :) там размерность счетчика всего байт. Если иметь терпение - сработает :)
Если повезёт :)
согласен
все что в ISR не работает