Аналоговый вход как цыфровой.
- Войдите на сайт для отправки комментариев
Чт, 29/09/2016 - 10:14
Понимаю что тупой вопрос, но элементарно на пльцах: читать A0 как High или low, понимаю что нужно понимать что подразумевается 0 или 1 и то что скорость считывания меньше чем на цифровом . В схеме подтягивающий резистор на землю на 10кОм есть (возможно его мало?). ардуино читает всегда high. (по крайней мере в протеусе ибо только начиню ваять ) Что не находил в инете - нету вообще и слова об этом. Значит вопрос реально тупой..((
- перебросил на цифровые, так будет проще но все же для понимая-
[code] int vklLamp1 = A0; // включение лампы 1 int zakr1 = A6; // рефлектор закрыт на 1 лампе int otkr1 = A5; // рефлектор открыт на 1 лампе int konveerGO = A15; // конвеер работает int obruvPered = 53; //обрыв лениты впереди int obruvZad = 53; //обрыв лениты сзади int GOlamp1 = 43; //запуск лампы 1 long previousMillis = 0; // время последнего задействования long intervaLampGO = 1000; // интервал для ВКЛЮЧЕНИЯ ЛАМПЫ void setup() { pinMode(vklLamp1, INPUT); pinMode(zakr1, INPUT); pinMode(otkr1, INPUT); pinMode(konveerGO, INPUT); pinMode(obruvPered, INPUT); pinMode(obruvZad, INPUT); pinMode(obruvZad, INPUT); pinMode(GOlamp1, OUTPUT); pinMode(Alarmlamp1, OUTPUT); } void loop() { if (digitalRead(vklLamp1) == HIGH && zakr1 == HIGH); //ЕСЛИ КНОПКА 1НАЖАТА И РЕФЛЕКТОР ЗАКРЫТ { unsigned long currentMillis = millis(); //запускаю отсчет if(currentMillis - previousMillis > intervaLampGO)// отсчитываю время ДЛЯ ВКЛЮЧЕНИЯ ЛАМПЫ { digitalWrite(GOlamp1,HIGH); // ЗАПУСКАЮ ЛАМПУ 1 } } } [/code]
КАК?!
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
digitalRead()
скорость считывания меньше чем на цифровом .
Ни в какой мере - точно такая же скорость.
КАК?!
Правильно написать код. Если бы Вы в строке 36 сравнивали бы с HIGH не номер пина, как Вы это делаете, а значение на нём, а заодно убрали бы из конца всё той же строки точку с запятой, то всё было бы нормально с божьей помощью.
Именно так уже и сделал, не увидел сначала ошибки))
И с аналога читает HIGH без проблем, а проблема вот в протеусе оказалась. Эмуляция в нем никудышняя. После исправления запустиось как надо, но не всегда . Тупо старт стоп в эмулторе клацаю- срабатывает раз через четыре примерно. Код прошивки при этом не меняю! . Плюнул на протеус- начал набирать потихоньку так. Пока придут блоки реле и пока залужу плату с оптронами для входов (жаль что на том же алиекспресе еще модули входов не придумали продавать) Попутно вопрос :
застрял в последних строчках:
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
digitalRead()
тоисть обрщаясь к ним я имею например ввиду A0 но пишу int 14? а как же тогда от A6 и до A15? в случае с мегой.
Млин, реально не написали ниразу пример этого случая.
тоисть обрщаясь к ним я имею например ввиду A0 но пишу int 14? а как же тогда от A6 и до A15? в случае с мегой.
Млин, реально не написали ниразу пример этого случая.
Правильнее писать A0.
#define A0 14
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
digitalRead()
тоисть обрщаясь к ним я имею например ввиду A0 но пишу int 14? а как же тогда от A6 и до A15? в случае с мегой.
Млин, реально не написали ниразу пример этого случая.
не писали - рисовали.
распечатай себе картинко на память - твой случай: нижний левый угол платы - пины A0-A5, бирюзовым цветом аналоговые номера, сиреневеньким - цифровые номера пинов
http://volthauslab.com/wp-content/uploads/wppa-source/album-1/uno.jpg
застрял в последних строчках:
Нужен совет, давайет скетч целиком. Я не понимаю откуда эти строчки и в каком мест Вашего изначального скетча они стоят, а потому ничего не могу сказать.
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
digitalRead()
распечатай себе картинко на память - твой случай: нижний левый угол платы - пины A0-A5, бирюзовым цветом аналоговые номера, сиреневеньким - цифровые номера пинов
http://volthauslab.com/wp-content/uploads/wppa-source/album-1/uno.jpg
скачал с того же пигиса на свою мегу, и раньше смотрел на эту картинку но чето недогнал что при написании кода смотреть на сопоставимость входов/выходов. Думал другие правила нужны(
Строки 75 - 80.
При каждом попадании сюда Вы выполняете операцию previousMillis = currentMillis;.Это значит, что если условие в строке 73 будет выполняться часто, строка 78 не выполнится никогда, т.к. Вы каждый раз начинаете отсчёт времени заново. Думаю, что Вы хотели поставить строку 80 перед строкой 79, а не после.
Строки 92-100
Это вообще странная конструкция. Непонятно зачем считаетеся интервал в строке 93? Чтобы сбросить его в строке 95 и больше ничего не сделать? Строки 97-100 исполняются при каждом проходе, независимо от интервала. Опять же, думаю, что Вы хотели поместить строки 97-100 перед строкой 96
... и добавление про аналоговые как цифровые:
не на всех мк можно использовать аналоговые как цифровые. к примеру сравните распиновки 328р в дип и чип корпусах. adc6&adc7
ps в дипе даже не ищите их, а в чипе как цифровые нельзя. незнаю для какого чипа прога из стартового поста, но пина А15 не встречал. может надо написать д15 (А1)
Строки 75 - 80.
При каждом попадании сюда Вы выполняете операцию previousMillis = currentMillis;.Это значит, что если условие в строке 73 будет выполняться часто, строка 78 не выполнится никогда, т.к. Вы каждый раз начинаете отсчёт времени заново. Думаю, что Вы хотели поставить строку 80 перед строкой 79, а не после.
Строки 92-100
Это вообще странная конструкция. Непонятно зачем считаетеся интервал в строке 93? Чтобы сбросить его в строке 95 и больше ничего не сделать? Строки 97-100 исполняются при каждом проходе, независимо от интервала. Опять же, думаю, что Вы хотели поместить строки 97-100 перед строкой 96
Совершенно так!,и стояла она сначала в начале, но когда начал в протеусе эксперементировать то поменял местами дабы он хоть как то начал работать. Не сомневаюсь что в железе все будет правильно и по правилам. По этому строку вернул на место (перед 79)
Строки 92-100 А вот здесь как раз таки не странная конструкция а то что назвается незнанием! Затык собственно произошел из-за того что начал городить условие: " если транспортер запущен то осчитываю интервал и если после этого интервала сигнал LOW на входе то выход на аварию пока не появится HIGHyf этом входе.
как это правильно сложить ума не хватает. Вот. Да и на пальцах бы кто написал что и как работает этот previousMillis = currentMillis В. Я так понимаю. previos это предыдущее значение милисекунд , оно обычно в глобальных переменных задается или остается от предыдущей операции. current это текущее значение ибо по формуле понятно что надо отнять новое от старого и сравнить с заданым. Странно что на форуме еще нет темы именно по разжовыванию функций, так как новичку допустим не в зуб ногой!, разбираться как работает функция , то что в ссылке "программирование" это скудные лоскутки по ним впервые не поймешь, Я себя допустим не отношу к совсем тугоразвитым, учусь быстро и разбираюсь так как по сути инженер. НО! то как описаны функции ... печаль да и только.
... и добавление про аналоговые как цифровые:
не на всех мк можно использовать аналоговые как цифровые. к примеру сравните распиновки 328р в дип и чип корпусах. adc6&adc7
ps в дипе даже не ищите их, а в чипе как цифровые нельзя. незнаю для какого чипа прога из стартового поста, но пина А15 не встречал. может надо написать д15 (А1)
да здесь хотя бы в "трех соснах" разобраться - нано уно и мега чипы вроди как одинаковые пока ставят, хотя и уно уже китайци бесстыдно в чип-корпусах продают.
Работаю только с мегой(чтоб не заморачиваться) A15 в меге присутствует - это 69. теперь могу с увереностью сказать)))
да здесь хотя бы в "трех соснах" разобраться - нано уно и мега чипы вроди как одинаковые пока ставят, хотя и уно уже китайци бесстыдно в чип-корпусах продают.
Да нечего там особо разбираться. У миксросхемы atmega328 в мелкотравчатом корпусе есть два дополнительных ADC входа A6 и A7, которых нет в DIP корпусе. Так вот у этих входов нет цифрового буфера, т.е. их можно использовать только как аналоговые. Вот и вся премудрость.
Все остальные аналоговые входы (A0-A5) можно использовать как цифровые и они ничуть не хуже родных цифровых. Правда там есть нюансы. Их два. (1) Если Вы используете часть пинов одного порта как аналоговые, а часть как цифровые, то лучше бы, чтобы во время считывания аналогового значения цифровые на том же порте не менялись, а то ADC нервничает и привирать начинает немного. И (2) - если эти пины не нужны как цифровые, а нужны только как аналоговые, то можно выключить их "цифровость" программно - это обеспечит небольшую экономию электроэнергии.
нано уно и мега чипы вроди как одинаковые пока ставят
Работаю только с мегой
A15 в меге присутствует - это 69
чипы разные на нано могут стоять 168 или 328, на уно 328 в дип и чип корпусах. у некоторых уно в чипе которые даже а6 и 7 выведены, меги сейчас идут 2560 раньше встречались 1280.
ну и преобразователи уарт-юсб разные ставят.
распиновку меги посмотрел. действительно вы правы. АDC15 - порт АК7 на ноге 82 ATmega2560
" если транспортер запущен то осчитываю интервал и если после этого интервала сигнал LOW на входе то выход на аварию пока не появится HIGHyf этом входе.
как же сдесь разобраться? (
выходить на аварию должен быть при аварии коей должно быть не время, а к примеру: отситствие движения ленты, слетание ленты(обрыв), большой ток двигателя и т.д. и что тут таймерами считать. вешайте соответствующую обвязку-датчики на мк.
ну почему программу не раскидать на потоки .Да принцип разделяй и властвуй в программировании тоже действует. Да и простыня программы становится понятнее.
выходить на аварию должен быть при аварии коей должно быть не время, а к примеру: отситствие движения ленты, слетание ленты(обрыв), большой ток двигателя и т.д. и что тут таймерами считать. вешайте соответствующую обвязку-датчики на мк.
ну в даном случае нужен именно отчет 3 секунд(примерно)
(((
P.S спасибо за расклад , больше бы таких разжовываний!
да здесь хотя бы в "трех соснах" разобраться - нано уно и мега чипы вроди как одинаковые пока ставят, хотя и уно уже китайци бесстыдно в чип-корпусах продают.
Да нечего там особо разбираться. У миксросхемы atmega328 в мелкотравчатом корпусе есть два дополнительных ADC входа A6 и A7, которых нет в DIP корпусе. Так вот у этих входов нет цифрового буфера, т.е. их можно использовать только как аналоговые. Вот и вся премудрость.
Все остальные аналоговые входы (A0-A5) можно использовать как цифровые и они ничуть не хуже родных цифровых. Правда там есть нюансы. Их два. (1) Если Вы используете часть пинов одного порта как аналоговые, а часть как цифровые, то лучше бы, чтобы во время считывания аналогового значения цифровые на том же порте не менялись, а то ADC нервничает и привирать начинает немного. И (2) - если эти пины не нужны как цифровые, а нужны только как аналоговые, то можно выключить их "цифровость" программно - это обеспечит небольшую экономию электроэнергии.
Спасибо за замечания. Столкнулся с тем, что на одном пине в аналоговом порту, после считывания 1, АЦП вообще какую-то фигню показывает. Попробовать считать аналогом?