Можно. Но для этого его нужно включить. Взять характеристики датчика. Определить режим работы транзистора (если это аналоговый сигнал) с целью определить падение напряжения на транзисторе
Да ладно, что там определять Стоит npn в нижнем плече, работает с открытым коллектором. Подтягиваем ему коллектор (выход датчика) к питанию через резюк в пару килоом и готово. Подтягивающие резюки стоят на портах, включабтся при инициализации pinMode(pin, INPUT_PULLUP). Соглашусь только, что подтягивающие резюки в атмелках от 20 ком и до 150 ком, что может быть многовато, особенно в "шумном" окружении, желательно 5-10 ком. Но для работы "на столе" тоже покатит.
Говорит о том, что ТС сбросил пдфку на свой датчик. Просто он сам не разобрался как его правильно включить, поэтому решил что он аналоговый. Но даже если работать с ним как с аналоговым, то вот как бы я делал Код (C++): #define SENSOR_PIN A0 int t_min=20; // порог минимального сигнала: все что меньше - темнота int t_max=400; // порог максимального сигнала: все что выше - свет byte porog_1=5; // порог накопления суммы для отбрасывания дребезга byte value=3; void setup() { Serial.begin(9600); } void loop() { int v=analogRead( SENSOR_PIN ); // переводим попугаи датчика в логические уровни if (v < t_min) { if (value > 0) value -= 1; } if (v > t_max) { value += 1; if (value > porog_1) value=porog_1; } // проверяем сумму уровней. если достигли порога, то уже стабильная 1 if (value == porog_1) { Serial.println("Светло"); } // проверяем сумму уровней. если достигли нуля, то уже стабильный 0 if (value == 0) { Serial.println("Темно"); } delay(2); }
Сложно как... Я бы так не делал. Вы просто посмотрите все сообщения ТС, сколько он уже на форуме и сделайте выводы. Я безмерно уважаю людей, стремящихся что-то делать, но если за два с половиной года не разобраться как подключать датчики и как писать для ардуино, то... В общем, доброй ночи.
Не пойму, что за наезды??? Форум для этого и есть, чтобы задавать вопросы, которые не ясны. Да, я более двух лет назад зарегистрировался на форуме - это лично вас обижает??? Причем здесь мой стаж??? Раз в год возникает необходимость подключить что-нибудь, отправил сообщение, помогли - все, спасибо. Мне, чтобы восстановить знания по "подключать датчики и как писать для ардуино" требуется всю вики амперки 3 раза перечитать. Jedi, вы наверное супер специалист в программировании и лет 5 ещё на электронщика учились? Я в своей жизни не занимался ни тем и ни этим, но когда ставиться задача, при выполнении которой я могу получить опыт в любой сфере - я берусь за это дело. Молодец, покрасовались - изучили мою переписку Только вот тему я начал в конце декабря (меньше месяца назад).
Если уж датчик таки аналоговый, а не неправильно подключенный цифровой, то зубья через него следует считать не по абсолютным показаниям, а по их изменению за определенный квант времени. Для этого, правда, потребуется провести некоторую исследовательскую подготовку с применением инструментальных средств таких как осциллограф. То есть потребуется узнать: за какой максимальный промежуток времени можно гарантировано словить перепад не являющийся помехой (а для уверенности лучше за два и более промежутка с одинаковым вектором), какова максимальная скорость появления одноименных перепадов - то есть частота мелькания зубьев при самом быстром их вращении, ну и само значение этого перепада за принятый квант времени. Тут может возникнуть проблема: не известно успеет ли функция аналогового преобразования и прочих вычислений успеть сделать все несколько раз за один фронт. Далее дело техники: квант выставляем прерыванием по таймеру, в функции прерывания записываем в кольцевой буфер значение двух (а лучше больше) точек измерения, сравниваем их между собой и, заметив правильный сдвиг засчитываем зуб. Далее, в этом же прерывании отслеживаем спад для фиксации окончания зуба, чтобы не засчитать несколько зубов как один. Примерно так я оцифровывал показания с аналогового датчика пульса, только сложнее. Потому что перепад был очень небольшой и с двумя горбинками, ибо так работает сердце, плюс частенько проскакивали разного рода шумы типа скрипов ребер и хрипов легких, приходилось все как то фильтровать, отбрасывая заведомо неверное. Так что вам еще повезло. Надеюсь, я достаточно подробно раскрыл свое видение решения данного вопроса. Но все же, для такой задачи я бы предпочел использовать обычную цифровую щелевую оптопару. И вместо шестеренки со скошенными зубами использовать диск с прорезями как то рекомендует даташит из вашей же ссылки. Тогда сделать все будет возможно за час или два даже не зная тонкостей и не вникая в глубины. Хотя...
Это они самоутверждаются. Кстати, не только на Ваших вопросах, так что не воспринимайте эти наезды как личное- а то бывает сразу 2-3 налетят и самоутверждаются, хотя они абсолютно не правы не только этически (в общем это конечно форум непрофессионалов, и не стоит злорадствовать и высокомерно поучать), но и технически, чего они, впрочем, никогда не признают. С биполярным приветом и фронтом синусоиды..
Хочу посамоутверждаться Код (C++): #define SENSOR_PIN A0 int t_min=20; // порог минимального сигнала: все что меньше - темнота int t_max=400; // порог максимального сигнала: все что выше - свет byte porog_1=10; // порог накопления суммы для отбрасывания дребезга byte value=5; bool light = false; // логический уровень с датчика - свет или темень bool has_impulse=false; // флаг прохода одного зуба int cnt=0; // счетчик зубов int max_cnt=100; // void setup() { Serial.begin(9600); } void loop() { int v=analogRead( SENSOR_PIN ); // переводим попугаи датчика в логические уровни if (v < t_min) { if (value > 0) value -= 1; } if (v > t_max) { value += 1; if (value > porog_1) value=porog_1; } // проверяем сумму уровней. если достигли порога, то уже стабильная 1 if (value == porog_1) { //Serial.println("Светло"); if ( light == false ) { // перход из темноты в свет считаем как один зуб has_impulse = true; } light = true; } // проверяем сумму уровней. если достигли нуля, то уже стабильный 0 if (value == 0) { //Serial.println("Темно"); light = false; } if ( has_impulse ) { Serial.println("Зуб!"); // дальше обрабатывайте свой счетчик cnt = cnt + 1; if (cnt >= max_cnt) { Serial.println("Насчитали норму"); cnt = 0; } has_impulse = false; // сбрасываем флаг } }
Выключается питание на устройстве? Значит на выходе нет напряжения и что тогда мерить? Подтяните к земле аналоговый вход резистором в несколько сотен килоом - хотя бы 0 вольт покажет. И покпжите свой код. Влияния входов друг на друга быть не должно.
Ребята всем привет, пытаюсь перевести скетч генератора для модуля AD9851 под дисплей Исправил все функции для вывода на экран, я понимаю что там все сикось-накось будет выводится, но это форматирование текста я исправлю чуть позже, когда удастся запустить скетч. После замены всех функций вывода на экран стали переть ошибки. Сама библиотека рабочая ровно как и библиотека генератора. Но где-то я накосячил и битый час не могу понять почему я дурак. Ткните носом, пожалуйста. На данный момент ругается на exit status 1 'setincrement' was not declared in this scope Хотя эта функция описана в скетче. Исходник в пост не влез, выложил тут http://pastebin.com/6TRHkacF
ПРОШУ ПОМОЩИ! Не работает ЖК дисплей LCD 16x2, вчера работал стабильно, я разобрал\собрал\включил и из всего только ряд квадратов и не реагирует на скетч. Подключал Ардуино______________Экран А0/А0 5V/5V RST/RST GND/GND VIN/VIN D2-D5,D11,D12/D2-D5,D11,D12 приметки* контрастность регулировал но не в этом дело, он то квадраты показывает, то крякозябры, даж не знаю от чего зависит...