Собрал следующую модель: Arduino Nano включает лазерный модуль с частотой, которая пропорциональна углу вращения энкодера.
Датчик света, подключён к UNO к пину с аппаратным прерыванием, программа считает длительность импульсов начиная с 1 по 5 и включает светодиод на 5 пине пропроциональным шим сигналом.
Есть в наличии два вида UNO, с смд и дип версиями. С дип версией программа не работает, переменная R (количество прерываний) не обнуляется, яркость светодиода не регулируется, с смд версией все отлично, пример на видео.
Пробовал ввести переменную с классификатором volatile, не помогло.
Прошу вашей помощи.
Возможно нужно перепрошить UNO, раз это встречается только у конкретных плат
Код для UNO:
int R = 0;
int T = 0;
int T2 = 0;
void interrupt_3(){
R = R + 1;
}
void setup() {
Serial.begin(9600);
pinMode(5, OUTPUT);
attachInterrupt(digitalPinToInterrupt(3),interrupt_3,RISING);
}
void loop() {
if (R == 1) {
T = millis();
}
if (R == 5) {
T2 = millis();
T = T2 - T;
T = map(T, 200, 900, 255, 0);
analogWrite(5, T);
R = 0;
T = 0;
T2 = 0;
}
}
Доктор посмотрите, у моего сына что-то с писей.
Доктор смотрит:
Так, с этого момента писю называем членом и начинаем лечить сифилис.
В “схеме” с “энкодером” так же ошибка. Может это реально специфический энкодер за кучку деняк(ссылку пожалуйста), но тогда может это вопрос не для любительского форума?
Потом уже и аналоговый “датчик света” на прерывании обсудим.
Чтобы как с “энкодером” не получилось, выкладывайте качественные фото Вашего UNO, который не работает. Надо смотреть, такой ли уж он UNO…
А что-нибудь на нём работает? (Хотя бы из примеров)
Попробовал, ничего не изменилось, но начал отправлять в монитор порта значения переменной R, значения отсекаются правильно. Видимо проблема в функции millis()
Я отказался от подобных сборок, как на фото у ТС после первого случая ковыряния со схемой 4 (!) дня, а оказалось - контакт хреновый. Только пайка, только хардкор!