Здраствуйте! Я новичок в создании схем на Ардуино, только закончил изучать Руководство по освоению Arduino 2012. Мне дали задание сделать тахометр. Я решил для реализации этого использовать датчик препятствия.
Посмотрел, как с ним работать, так же посмотрел, как AlexGyver реализовал тахометр в одном из видео(датчик у него был другой). Решил так же рассчитывать время вращения между двумя лопастями. По итогу получился такой код:
// пин датчика
#define SENSOR A1
unsigned long sg, tim; // время
void setup() {
// открываем последовательный порт
Serial.begin(9600);
}
void loop() {
// считываем значение с датчика
bool signal = digitalRead(SENSOR);
if ( !signal ) {
// если сигнал ноль
sg=micros()-tim; // вычисление времени между двумя сигналами
tim=micros(); // время последнего сигнала
} else {
// если сигнал единица то все заново
asm volatile("jmp 0x00");
}
Работает, на сигнал реагирует и даже что-то похожее на правду выводит, но asm volatile(“jmp 0x00”) будет мешать выполнению другой части кода. Я пытался воспользоваться for, но ардуино выдавало ошибку. Подскажите, пожалуйста, как сделать так чтобы при сигнале датчика запускался таймер, а при повторном сигнале он перезапускался?
Была еще идея воспользоваться лазером и оптическим датчиком, но у меня их нет.
Потому что я не понимал, как сделать по другому. Еще плюс программа начала работать, как нужно, то есть в порт выводилось время при отсутствии сигнала и время перезапускалось при наличии сигнала.
Не сказал бы. У меня, просто, работа с таймерами в ардуино всегда проблемы и непонятки вызывает. Я вот пока со временем не разобрался, но уже подключил и настроил дисплей, ветряк, плюс формулы записал. Только со временем бы разобраться и все
А зачем мне прерывания? Мне нужно чтобы таймер обновлялся при получении сигнала. То есть в порту я хочу увидеть время полуоборота:
1
2
3
4
получили сигнал, таймер перезапустился
1
2
3
4
опять получили сигнал, таймер перезапустился и так до тех пор пока вентилятор не остановиться.