добрый день. сегодня стал облалателем Arduino Uno.
при проверке на стандартном примере Button обнаружилась проблема. Насколько я понял, один конец кнопкт надо вставить в 5v, другой в пин 2. но светодиод горел весьма избирательно, зачастую всегда. горел даже если во 2 пин вставить кусок незамкнутой проволоки. причём начинал светить корректно только если взять в руки в определённом положении. примечательно то, что реагирует даже на приближение руки.
и такие проблемы со всеми стандартными примерами, где используется считывание с пинов.
Не совсем так. Вернее вы правы кода говорите "резистор нужен", но не совсем правы когда говорить "нельзя без резистора".
Иногда можно :)
Дело в том, что, для удобства, резисторы уже есть внутри самого камня. И их можно "подключать" програмно.
Для этого нужно, пину "ВКЛЮЧЕННОМУ НА ВХОД" сделать digitalWrite(PIN,HIGH);
И вы получите пин подключенный к питанию через резистор. А кнопку, соотвественно, нужно будет подключать одной ногой к пину, другой - к земле. Ну и при чтении, в этом случае помнить что "кнопка инвертированна". То есть digitalRead==1 означает что кнопка не нажата, а 0 - нажата.
Но... осторожно. При таком подключении, если вы, случайно, перед digitalWrite(PIN,HIGH); включите пин на OUTPUT, а потом нажмете кнопку - получите короткое замыкание между питанием и землей. С некислыми шансами выпалить ногу или весь камень.
правильно-ли я понимаю, что, при желании, на ардуине можно сделать прошивку для атмеги, а потом её вытащить и впаять в желаемую схему?
Правильно понимаете. Вообщем-то "ардуина" это и есть атмега с выведеными ногами. Для удобного подключения без пайки. Но по "сути" атмега=ардуина.
А можно "не вытаскивать". Пусть живет дуинка :) Ардуино скетч можно залить и в "атмегу на схеме". даже не вынимая/выпаивая ее (ну естественно, если у нее выведены ноги для программирования наружу). Для этого нужен программатор. Прорамматор можно сделать из ардуины. Аж пять проводков потребуется для этого :) . Как это сделать - воспользуйтесь поиском по сайту (или гуглом) на слово ArduinoISP.
Ну, я всё-таки, рассматриваю ардуину, как инструмент для прототипирования. Сделать рабочий вариант на ней, а потом уже спаять его из деталей. Ардуина-то у меня одна.
" "ардуина" это и есть атмега с выведеными ногами. Для удобного подключения без пайки. "
Тогда я вообще не вижу проблемы :)
Ну, я всё-таки, рассматриваю ардуину, как инструмент для прототипирования. Сделать рабочий вариант на ней, а потом уже спаять его из деталей. Ардуина-то у меня одна.
Я изучал ардуину точно таким-же путем :)
Но пройдя его задумался: нужно "хорошо посчитать". Возможно "отлаживать" удобно на той дуине что есть, а вот "конечный" по деньгам может получится дешевле и аккуратней если взять что-то типа Arduino Mini или Pro Mini.
Особенно если смотреть не на оригинал, а китайские или местные клоны. Все-таки "заводское изготовление". Да и если "посчитать" поездки на базар за "мелочевкой которой нет под рукой", количество сломаных сверл, переведенного текстолита (тоже с первой попытки же не получится), паяльного инструмента хорошего....
вообщем нужно очень внимательно считать "дешевле самому или купить". Даже если "купить" чуть дороже, то ... если делаешь "один девайс в месяц" - можно и выкинуть лишний доллар-два :)
А сдругой стороны потом показать кому-то устройство и сказать "я сам сделал его с нуля" - тоже много стоит :)
Только мало кто поймет твои чувства :) Для них это "железяка со светодиодами", а для тебя почти ребенок которого ты месяцы вынашивал ;)
Я заказывал с ебея у китайского производителя, весьма дёшево и очень хорошего качества, но шло полтора месяца. Альтернатива - заказывать у российских распростронителей за цену в три раза больше и ждать почти столько же меня не устраивала, поскольку, даже не предполагал, чего можно от ардуино ждать. Вот почему и возникают мысли о самостоятельной сборке. Да и интересно всегда было самому что-то создавать.
Думаю, время и опыт расставит всё по своим местам. :-)
Здравствуйте. у меня вопрос по теме. сильно не пинайте пожалуйста, я только учусь.
так вот. пытаюсь сделать один проект. подключаю кнопку, и все отлично работает. разумеется не забываю про подтягивающий резистор(или стягивающий? путаю пока). стоит подключить вторую кнопку, даже с резистором в 10кОм они начинают обе дребезжать. отключаю одну(любую) вторая работает нормально. вместе не хотят.
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. подключал кнопки как в вышеуказанном видео
2. не всегда реагирует ардуино. ну, через раз.. блин, не знаю как объяснить, надеюсь вы меня поняли))
#include <LiquidCrystal.h>//библиотека для работы с LCD
long previousMillis = 0;//переменная для хранения значений таймера
int sek=0;//значение секунд
int minut=54;//значение минут
int chas=18;//значение часов
int knopka=0;//значение кнопки
int curs=0;//значение курсора
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);//инициализация портов
void setup()
{
lcd.begin(16, 2);//инициализация дисплея
pinMode(8,INPUT);//инициализация портов
pinMode(7,INPUT);//инициализация портов
pinMode(9,OUTPUT);//инициализация портов
pinMode(13,OUTPUT);
//Serial.begin(9600);
}
void loop()
{
//Serial.println(curs);
//delay(500);
if (millis() - previousMillis >500)
{
previousMillis = millis(); //запучкаем таймер
digitalWrite(13, !digitalRead(13));//меняем значение порта каждые 0.5секунд
if(digitalRead(13)==HIGH)//если 13 нога лог1 то...
{
sek++;//переменная секунда + 1
lcd.clear(); //обновление дисплея
//вывод символов на дисплей//
lcd.setCursor(2, 0);
lcd.print(":");//выводим символ ":"между часами и минутами
lcd.setCursor(5, 0);
lcd.print(":");//выводим символ ":"между минутами и секундами
}
if(digitalRead(13)==LOW)
{
//через каждые 0.5 секунд меняем символ ":" на "."
lcd.setCursor(5, 0);
lcd.print(" ");
lcd.setCursor(2, 0);
lcd.print(" ");
}
if(sek>59)//если переменная секунда больше 59 ...
{
sek=0;//сбрасываем ее на 0
minut++;//пишем +1 в переменную минута
}
if(minut>59)//если переменная минута больше 59 ...
{
minut=0;//сбрасываем ее на 0
chas++;//пишем +1 в переменную час
}
if(chas>23)//если переменная час больше 23 ...
{
chas=0;//сбрасываем ее на 0
}
//вывод символов на дисплей//
lcd.setCursor(0, 0);//выводим значение часов в строку - 1
//столбец -4
if (chas < 10){
lcd.print(" ");
lcd.print(chas);//количество часов
}
else lcd.print(chas);
lcd.setCursor(3, 0);//выводим значение часов в строку - 1
//столбец -7
if (minut < 10){
lcd.print("0");
lcd.print(minut);//количество минут
}
else lcd.print(minut);
lcd.setCursor(6, 0);//выводим значение часов в строку - 1
//столбец -10
if (sek < 10){
lcd.print("0");
lcd.print(sek);//количество секунд
}
else lcd.print(sek);
}
//установка времени//
//кнопка//
if(digitalRead(8)==HIGH&&knopka==0)//если кнопка нажата
// и перемення "knopka" равна 0 , то ...
{
minut++;//пишем + 1 в переменную минута
sek=0;//пишем 0 в переменную секунда
knopka++;//пишем 1 в переменную кнопка
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга"
//с каждым нажатием кнопки обновляем значения на дисплее//
lcd.setCursor(0, 0);
lcd.print(chas);
if(minut < 10){
lcd.setCursor(4, 0);
lcd.print(minut);
}
else {
lcd.setCursor(3, 0);
lcd.print(minut);
}
lcd.setCursor(6, 0);
lcd.print(sek);
}
if(digitalRead(8)==LOW&&knopka==1)//если кнопка НЕ нажата
//и переменная knopka равна - 1 ,то ...
{
knopka=0;//обнуляем переменную "knopka"
}
if(digitalRead(7)==HIGH)//если кнопка нажата
// и перемення "knopka" равна 0 , то ...
{
curs++;
if (curs > 7){
curs = 0;
}
}
if (curs = 1){
lcd.setCursor(1,0);
lcd.print(chas);
delay(500);
lcd.print(" ");
lcd.print(" ");
delay(500);
}
/*
//выводим надпись "CHASI." в строку - 0
lcd.setCursor(5, 0);
lcd.print("CHASI.");
*/
}
суть заключается в том, что в исходнике часы настраиваются всего одной кнопкой. мне же нужно поставить туда два "будильника", и добавлять на каждый как минимум еще по одной кнопке не хочется. поэтому решил сделать так:
одной кнопкой выбирается положение "курсора"(мигают цифры), другой настраиваются мигающие цифры(впоследствии хочу прикрутить вместо нее колесико)) пока не знаю как называется). чтобы в итоге часы и будильники настраивались всего двумя кнопками.
теперь я с помощью
Serial.println(curs);
delay(500);
отслеживаю нажатия кнопки. когда одна работает хватает однократного нажатия. при включении первой кнопки, они обе начинают "дребезжать".
Вы наверное так и не поняли понятие слова "дребезжать". Дребезг - это когда при одном нажатии на кнопку происходит несколько срабатываний. У вас же как я и предпологал понатыканы задержки (строки: 29, 167, 170). Уберите или сделайте меньше delay(), чтобы кноки работали нормально суммарно задержки не должны превышать 200 млс.
просто когда смотрел ролик(по ссылке выше), там было сказано, что кнопки дребезжат. а у меня происходил именно такой эффект как сейчас. видимо действительно не правильно понял. спасибо. пошел пробовать))
ИЛи плохо видно или правый резистор у вас подключен одной ногой в землю, а другой "в космос".
Если я прав, то правая кнопка у вас не имеет подтяжки, и "дребезжать" может даже от простого поднесения руки.
плохо видно. попробуйте посмотреть полноразмерное фото. там хоть и плохо очень, но видно))
Посмотрел. На полноразмерной вижу то же самое. Но четче. Резистор воткнут в 59-тую колонку. А больше в ней ничего нет. То есть воткнут "в никуда". Предполагаю что вы промахнулись мимо 58-мой (туда куда синий провод идет).
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
Добавлю. Нажмите Ctrl+T и код отформатируется автоматически.
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
отредактировал в предыдущем сообщении. действительно наблюдался глюк)). спасибо.
необходимо подобие колесика мыши. при вращении вверх - минуты прибаляются, вниз - убавляются. при нажатии на колесико - сброс минут в ноль. посоветуйте пожалуйста.
if(digitalRead(7) || digitalRead(8)){
time_wait = millis() + 500; // Здесь задаете время, которое нужно ждать
}
else if(millis() > time_wait){
// Здесь делаете что вам нужно по прохождении времени.
}
добрый день. сегодня стал облалателем Arduino Uno.
при проверке на стандартном примере Button обнаружилась проблема. Насколько я понял, один конец кнопкт надо вставить в 5v, другой в пин 2. но светодиод горел весьма избирательно, зачастую всегда. горел даже если во 2 пин вставить кусок незамкнутой проволоки. причём начинал светить корректно только если взять в руки в определённом положении. примечательно то, что реагирует даже на приближение руки.
и такие проблемы со всеми стандартными примерами, где используется считывание с пинов.
можете что-нибудь посоветовать
Могу вам посоветовать подтягивающий резистор. Вот видео для ознакомления и еще советую посмотреть все серии этого канала.
И еще воспользоваться поиском по сайту и найти например вот эту тему.
Спасибо. Видимо, даже кнопку нельзя подключать без резистора.
Не совсем так. Вернее вы правы кода говорите "резистор нужен", но не совсем правы когда говорить "нельзя без резистора".
Иногда можно :)
Дело в том, что, для удобства, резисторы уже есть внутри самого камня. И их можно "подключать" програмно.
Для этого нужно, пину "ВКЛЮЧЕННОМУ НА ВХОД" сделать digitalWrite(PIN,HIGH);
И вы получите пин подключенный к питанию через резистор. А кнопку, соотвественно, нужно будет подключать одной ногой к пину, другой - к земле. Ну и при чтении, в этом случае помнить что "кнопка инвертированна". То есть digitalRead==1 означает что кнопка не нажата, а 0 - нажата.
Но... осторожно. При таком подключении, если вы, случайно, перед digitalWrite(PIN,HIGH); включите пин на OUTPUT, а потом нажмете кнопку - получите короткое замыкание между питанием и землей. С некислыми шансами выпалить ногу или весь камень.
правильно-ли я понимаю, что, при желании, на ардуине можно сделать прошивку для атмеги, а потом её вытащить и впаять в желаемую схему?
Правильно понимаете. Вообщем-то "ардуина" это и есть атмега с выведеными ногами. Для удобного подключения без пайки. Но по "сути" атмега=ардуина.
А можно "не вытаскивать". Пусть живет дуинка :) Ардуино скетч можно залить и в "атмегу на схеме". даже не вынимая/выпаивая ее (ну естественно, если у нее выведены ноги для программирования наружу). Для этого нужен программатор. Прорамматор можно сделать из ардуины. Аж пять проводков потребуется для этого :) . Как это сделать - воспользуйтесь поиском по сайту (или гуглом) на слово ArduinoISP.
Ну, я всё-таки, рассматриваю ардуину, как инструмент для прототипирования. Сделать рабочий вариант на ней, а потом уже спаять его из деталей. Ардуина-то у меня одна.
" "ардуина" это и есть атмега с выведеными ногами. Для удобного подключения без пайки. "
Тогда я вообще не вижу проблемы :)
Я изучал ардуину точно таким-же путем :)
Но пройдя его задумался: нужно "хорошо посчитать". Возможно "отлаживать" удобно на той дуине что есть, а вот "конечный" по деньгам может получится дешевле и аккуратней если взять что-то типа Arduino Mini или Pro Mini.
Особенно если смотреть не на оригинал, а китайские или местные клоны. Все-таки "заводское изготовление". Да и если "посчитать" поездки на базар за "мелочевкой которой нет под рукой", количество сломаных сверл, переведенного текстолита (тоже с первой попытки же не получится), паяльного инструмента хорошего....
вообщем нужно очень внимательно считать "дешевле самому или купить". Даже если "купить" чуть дороже, то ... если делаешь "один девайс в месяц" - можно и выкинуть лишний доллар-два :)
А сдругой стороны потом показать кому-то устройство и сказать "я сам сделал его с нуля" - тоже много стоит :)
Только мало кто поймет твои чувства :) Для них это "железяка со светодиодами", а для тебя почти ребенок которого ты месяцы вынашивал ;)
Я заказывал с ебея у китайского производителя, весьма дёшево и очень хорошего качества, но шло полтора месяца. Альтернатива - заказывать у российских распростронителей за цену в три раза больше и ждать почти столько же меня не устраивала, поскольку, даже не предполагал, чего можно от ардуино ждать. Вот почему и возникают мысли о самостоятельной сборке. Да и интересно всегда было самому что-то создавать.
Думаю, время и опыт расставит всё по своим местам. :-)
Здравствуйте. у меня вопрос по теме. сильно не пинайте пожалуйста, я только учусь.
так вот. пытаюсь сделать один проект. подключаю кнопку, и все отлично работает. разумеется не забываю про подтягивающий резистор(или стягивающий? путаю пока). стоит подключить вторую кнопку, даже с резистором в 10кОм они начинают обе дребезжать. отключаю одну(любую) вторая работает нормально. вместе не хотят.
подскажите пожалуйста, что я делаю не правильно?
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
Здесь всё объясняется досконально http://www.youtube.com/v/LkR8rxzAo_A
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
Здесь всё объясняется досконально http://www.youtube.com/v/LkR8rxzAo_A
А мне то вы об этом зачем пишите??? Тем более что я эту ссылку давал выше...
1. Никому здесь не известно как вы подключаете кнопки. Опишите или лучше нарисуйте схему.
2. Как вы определяете, что они дребезжат?
3. Покажите свой код.
1. подключал кнопки как в вышеуказанном видео
2. не всегда реагирует ардуино. ну, через раз.. блин, не знаю как объяснить, надеюсь вы меня поняли))
3. если очень необходимо, завтра вечером выложу.
спасибо.
На всякий случай - вот так правильно нужно вставлять код.
вот код как и обещал.
исходник был взять здесь, и доработан маленько.
суть заключается в том, что в исходнике часы настраиваются всего одной кнопкой. мне же нужно поставить туда два "будильника", и добавлять на каждый как минимум еще по одной кнопке не хочется. поэтому решил сделать так:
одной кнопкой выбирается положение "курсора"(мигают цифры), другой настраиваются мигающие цифры(впоследствии хочу прикрутить вместо нее колесико)) пока не знаю как называется). чтобы в итоге часы и будильники настраивались всего двумя кнопками.
теперь я с помощью
отслеживаю нажатия кнопки. когда одна работает хватает однократного нажатия. при включении первой кнопки, они обе начинают "дребезжать".
вот, кстати, фото подключения
Вы наверное так и не поняли понятие слова "дребезжать". Дребезг - это когда при одном нажатии на кнопку происходит несколько срабатываний. У вас же как я и предпологал понатыканы задержки (строки: 29, 167, 170). Уберите или сделайте меньше delay(), чтобы кноки работали нормально суммарно задержки не должны превышать 200 млс.
возможно вы правы. нет.. скорее вы правы..
просто когда смотрел ролик(по ссылке выше), там было сказано, что кнопки дребезжат. а у меня происходил именно такой эффект как сейчас. видимо действительно не правильно понял. спасибо. пошел пробовать))
ИЛи плохо видно или правый резистор у вас подключен одной ногой в землю, а другой "в космос".
Если я прав, то правая кнопка у вас не имеет подтяжки, и "дребезжать" может даже от простого поднесения руки.
сорри за оффтоп. дабы не плодить темы.
впоследствии хочу прикрутить вместо нее колесико)) пока не знаю как называется
наверное называется энкодер? (как ручка громкости на автомагнитоле.)
ИЛи плохо видно или правый резистор у вас подключен одной ногой в землю, а другой "в космос".
Если я прав, то правая кнопка у вас не имеет подтяжки, и "дребезжать" может даже от простого поднесения руки.
плохо видно. попробуйте посмотреть полноразмерное фото. там хоть и плохо очень, но видно))
ИЛи плохо видно или правый резистор у вас подключен одной ногой в землю, а другой "в космос".
Если я прав, то правая кнопка у вас не имеет подтяжки, и "дребезжать" может даже от простого поднесения руки.
Да, кстати, у вас резистор не туда воткнут.
Хотя да, просто плохо видно.
вот другое фото
увы, телефон не может дать более высокого качества, поэтому так кажется.
кстати, на этом фото кажется будто левый резистор подключен в космос)))
ИЛи плохо видно или правый резистор у вас подключен одной ногой в землю, а другой "в космос".
Если я прав, то правая кнопка у вас не имеет подтяжки, и "дребезжать" может даже от простого поднесения руки.
плохо видно. попробуйте посмотреть полноразмерное фото. там хоть и плохо очень, но видно))
Посмотрел. На полноразмерной вижу то же самое. Но четче. Резистор воткнут в 59-тую колонку. А больше в ней ничего нет. То есть воткнут "в никуда". Предполагаю что вы промахнулись мимо 58-мой (туда куда синий провод идет).
суммарно задержки не должны превышать 200 млс.
я так понимаю, имеются в виду задержки именно на нажатие кнопок? ведь я не могу уменьшить задержки на отображение цифр.
кстати, на этом фото кажется будто левый резистор подключен в космос)))
Тоже разглядел. Тогда с этим все впорядке (если резисторы нормально воткнулись ;)
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
суммарно задержки не должны превышать 200 млс.
я так понимаю, имеются в виду задержки именно на нажатие кнопок? ведь я не могу уменьшить задержки на отображение цифр.
Сумарно во всей функции loop().
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
Добавлю. Нажмите Ctrl+T и код отформатируется автоматически.
Сумарно во всей функции loop().
понял спасибо.
В строках 138-141 что-то "подозрительное". Перепроверте (а лучше обейте отступами что куда вкладывается, что-бы видней было). Возможно там или 138-мая лишняя, или вокруг 140-141 потеряли фигурные скобки.
отредактировал в предыдущем сообщении. действительно наблюдался глюк)). спасибо.
спасибо огромное. все получилось. как закончу проект, поделюсь, если можно конечно))
еще вопрос.
необходимо подобие колесика мыши. при вращении вверх - минуты прибаляются, вниз - убавляются. при нажатии на колесико - сброс минут в ноль. посоветуйте пожалуйста.
Если удастся достать горизонтальный энкодер с тактовой кнопкой, то не составит особого труда
еще вопрос.
все нажатия всех кнопок считаются. knopka1++, knopka2++ и т.д.
как проверить, что если на протяжении какого-то времени ни одна кнопка не нажималась, то все счетчики сбросить в ноль?
Заводите глобальную переменную, например
Затем где-нибудь в loop:
спасибо.