не, не надо.
Я слепой и перепутал прерывания между собой.
@te238s прав
Все мои замечания выше ошибочны
не, не надо.
Я слепой и перепутал прерывания между собой.
@te238s прав
Все мои замечания выше ошибочны
При значении 500 лучше конечно стало. Быстрее. Просто идея была отправлять в терминал не с 63 строчки а с 71
А частоту отправки изменять 72 строкой и значением как вы указали в 41. Это не спидометр. Такой точности мне бы хватило.
Сам код то может и гавно) как то топорно, не как обычно, но он работает. Вопрос в том, почему строка 69 работает (регулярно) а следующая 71 нет (как будто через неё перескакивает)
Верно. С 40000 снизил до 1000, стало быстрее, просто точность измерения снижается. Но такой точности мне хватает. А вот всё же, почему 71 строчка не работает, в отличии от 69… так и не разобрался.
Так. Я в такой ситуации бы:
1.В целях отладки убрать вычисления,пусть будет в попугаях
Speed=countin;
вместо
Поставить
И,соответственно,выбрать ближайший подходящий предделитель(на вскидку не вспомню),например 1024.
Так меньше шансов запутаться и словить непонятные глюки.
Возможно из-за частых прерываний? Без отладки наверняка не сказать.
Попробуй в setup
поставить. Хотя бы исключим перезагрузку от переполнения стека.
Если в исходном коде заменить добавить volatile то 71 строчка будет выводится и при пустом цикле while (Finishcountin == 0)
volatile unsigned long Finishcountin = 0;
(На работоспособности не сказывается, но не ясно зачем переменная unsigned long, там где достаточно байта).
Дополнение
countin и timer тоже объявить volatile
ISR(TIMER2_OVF_vect) // процедура обработки прерывания
{
Finishcountin = 1;
}
Исправил как ты подсказал. Работает хорошо. Предделитель на 1024.
Но print работает без изменений только в цикле while. В цикле Loop не работает. Хотя если их установить оба, то в паре работают
void loop()
{
Finishcountin = 0;
countin = 0;
timer = 0;
Floy = 0;
while (Finishcountin == 0)
{
Serial.print(64); // для теста
delay(500); // для теста
}
Speed = countin;
Serial.print(128);
delay(1000);
}
Ещё подсказали что то про volatile. С ним пока не разбирался.
“Finishcountin изменит значение в строке 42”. Этого не будет, т.к. без таймера(если действительно его убрать) и обработчик вызываться не будет. Видимо не полностью убираете.
Просто в строке 14 добавить volatile
Вообще, в Протеусе у меня всё работает и без volatile
void loop()
{
Finishcountin = 0;
countin = 0;
timer = 0;
Floy = 0;
while (Finishcountin == 0)
{
Serial.print("Speed on 63 line = ");
Serial.println(Speed); // тут переменная отправляется в порт
delay(500);
}
////////////////////////////
xx = (62500*countin)/timer; // Вычисляет частоту. В Гц
Speed = ((2*3.14*Rkolesa*((xx/42)*60))/60)*3.6; // Вычисляет скорость от частоты и радиуса колеса. (42 - это 42 импульса на 1 оборот)
Serial.print("Speed on 71 line = ");
Serial.println(Speed); // тут переменная не отправляется в порт
delay(1000);
}
Огромное вам спасибо. Искренне благодарен. Всё заработала как нужно. While пуст
Да volatile всё решил. Буду дальше править. Спасбо
Возможно, Дим-мычь прав и это происки компилятора. Что-то где-то упрощает,выкидывая “ненужное”.
Поэтому я и не понимаю,как люди вообще пишут код в Ардуино ИДЕ без пошаговой отладки.
Вечерком,если силы и время будут попробую прогнать в Студии.
Опоздал)
Про волатиль было первое сообщение) я лох.
Это оптимизатор. Мне на форуме это не так давно объясняли, тоже не верил
Всё заработало с volatile. А как делать пошаговую отладку ? Хотя поищу в гугле)))
Спасибо за отклик. Буду дальше править и добавить ADC нужно ещё
Просто я сразу начал это занятие в Avr Studio, потом уже Microchip Studio. Это правильно. Это по-взрослому. Детально видишь что,где и как происходит с переменными.
В последней,кстати, можно и скетчи запускать,но пока не пробовал,нужды не было.
Когда то очень давно тоже начал с Avr Studio но не осилел. Потом попался Flowcode. Он очень расслабил своей простотой)) А теперь когда понадобилось что то по серьёзней сделать приходится всё таки изучать нормальное программирование. Но все равно Flowcode помог в каком то смысле понять логику.
Спасибо вам огромное что не отвернулись от корявого кода и помогали)