Видеоуроки по Arduino #2.1: Кнопки, PWM / ШИМ, функции
Vložit
- čas přidán 13. 04. 2011
- Продолжение - • Видеоуроки по Arduino ...
Урок о том как подключать кнопки к Arduino, зачем нужен breadboard, как использовать широтно-импульсную модуляцию сигналов (ШИМ или PWM) и о том как создавать собственные функции в среде программирования Arduino
Скетч для Arduino - jeremyblum.com/wp-content/uplo...
Список деталей:
• Arduino Uno - amperka.ru/product/arduino-uno...
• USB-кабель - amperka.ru/product/usb-cable?u...
• Breadboard - amperka.ru/collection/breadboa...
• Светодиоды - amperka.ru/product/led-5mm?utm...
• Резисторы - amperka.ru/product/resistor?ut...
• Кнопка тактовая - amperka.ru/product/tactile-but...
• Набор перемычек - amperka.ru/product/jumper-wire...
• Мультиметр - amperka.ru/product/multimeter?...
ПО для Arduino: arduino.cc/en/Main/Software
Оригинал -
• Tutorial 02 for Arduin...
Автор - Jeremy Blum / @sciguy14
Перевод - AmperkaRu / @amperkaruofficial
Материалы переведены и опубликованы с разрешения автора - Věda a technologie
Спасибо за перевод. Отличные уроки.
LOW, false и 0 - это по сути синонимы. Также как HIGH, true, 1
Очень доходчиво! 👍😀
int switchPin = 8;
int ledPin = 13;
void setup()
{ pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switchPin) == HIGH)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
Вот все работает
спасибо
Не сложно, сделано, спасибо!
Pardon. Didn't catch a question. As a rule of thumb you're always need a resistor in series with LED.
понятно ..... что нифига не понятно ))
жиза
Нифига не панятна но очень интересно
Падерживаю ниюига не понатнооо
ты даже и не вникал и не пытался сделать переключатель
Последние минуты - взрыв головного мозга. Аж спать захотелось!
Понятно. Спасибо за ответ!
обратите внимание / if (digitalRead(switchPin) == HIGH) / нужно писать без - ; - тогда всё работает. Если нужно коммутировить 2 позиционную кнопку - то лучше использовать 2 раза (if)
Спасибо очень полезно
Хорошее дело делает
та все уже разобрался)) то глаза еррорили)))
спасибо за отзывчивость))
тяжело понять новичку, знания возможно у него есть, а вот с доходвичивым объяснением не так уж.
Мы в 6 классе фигачим уже бегающий огонёк
нужны начальные знания ООП-программирования чтобы лучше понималось
Большое вам спасибо
Погрузился в ход его мысли ). На фразе:"убедимся что мы обновили наше значение, оно будет хранить это состояние. потому что храним в выражении.." , и тут я ушёл в гипноз )))))
вместо int используйте char для определения ножек, это сильно экономит память.
Супер!!!
Даже сам Джереми не верно написал код скетча :) У него при нажатии на кнопку происходит включение и выключение диода с частотой итерации цикла. На каком состоянии он отпустит кнопку - на том и запомнится переменная xD. А при нажатии и удержании кнопки светодио светит "вполнакала", то есть от меандра постоянных включений-выключений ;-)
+Ярослав Курус Похоже Вы ошиблись:
Кнопка нажата:
1 цикл: мы входим в первое условие и меняем состояние светодиода
2 цикл: мы не можем войти в первое условие, т.к. состояние кнопки не изменилось (lastButton == LOW) === false
3 цикл и последующие такие же как 2
Выходит, что в любой последующей интерации мы изменим сотояние диода только если кнопка меняла свое состояние. Это не связано с частотой или кол-вом циклом. Это действительн освязано с дребезжанием.
Второй опыт (после использования функции debounce) показал, что предположение о дребезжании верно.
+Anatoliy Litinskiy на видео четко видно половинное свечение диода при зажатой кнопке.
+Ярослав Курус на видео видно что нет скобки в конце в первой част на 8 минуте. ничего не работает никаки правки. почему его код не работает? рабочий код в комментах есть.
+Ярослав Курус по-моему верно. решается проблема задержкой после нажатия 100-200 мсек в конце цикла
Как я где-то вычитал - прямым замыканием выходов -> входов можно повредить плату, ибо она рассчитана на ток до 40мА. Не этим ли самым не побрезговал Джереми, замкнув +5V на Pin8 через кнопку?
А видео о tehbits про которое говорит Джереми где можно посмотреть в русской озвучке?
Этот ролик мы, увы, не переводили
AmperkaRu а есть такое в планах? Было бы очень интересно посмотреть
Сергей Шиловский Учтём в планах, что многие его хотят
AmperkaRu Буду очень признателен. если переведете. :)
спасибо
По идее если в самом первом коде с горящим диодом при нажатой кнопке, по всему коду инвертировать значения с HIGH -> LOW и с LOW -> HIGH (всего в 3-х местах). Диод должен гореть, а при нажатии гаснуть. А этого не происходит (всё работает как и было до инвертации), Должно-ли вообще гаснуть? Или в таком случае обратно всё не должно работать? Может я забегаю сильно вперёд?
интересное решение - убрать дребезжание программно. но лучше аппаратно, просто включив паралельно кнопке маленький кондер
Да, это синонимы для схем с одним уровнем питания.
хотелось бы узнать о цифровых и аналоговых входах но перевода нет перейдя по ссылке - очень жаль ))))))))))
Техно Sport Arduino что именно ты хотел узнать?
Техно Sport Arduino Мы постараемся как-нибудь добраться-таки до этого ролика)
Mr.ПоделкинЦ live как ими пользоваться как скейчи писать и как их прописывать правильно и что они значат
Mr.ПоделкинЦ live Я бы хотел узнать - почему конкретные детали подключают к аналоговым выходам на плате а некоторые к цифровым...
все понятно, просто надо внимательно вслушиваться и думать об услышанном
я сто раз вслушивался, не понял!!!
Супер
В loop нужна только одна строчка:
digitalWrite(ledPin, digitalRead(switchPin));
int = ledPin = 13;
int = swichPin = 8;
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(swichPin, INPUT);
}
void loop(){
int val = digitalRead(swichPin);
digitalWrite(ledPin, val);
}
или можно сделать условие:
while(swichPin == HIGH)
{
digitalWrite(ledPin, HIGH);
}
Антон, очень по хоже по симптомам, что вы неправильно сделали стяжку/подтяжку резистором. И пока кнопка не нажата, ваш светодиод на деле очень часто мерцает и кажется, что он горит в полсилы.
Интересно, а почему переменная lastButton типа boolean проинициализирована как LOW? Она же должна быть true или false.
Чем еррорит?
А возможность подтяжки пина к 5V при помощи INPUT_PULLUP была добавлена позднее, не реализована в UNO или просто не рассматривается в этом уроке?
Там ещё ошибочка в коде. Функцию зажигания светодиода автор вынес за условие
может кто подскажет как реализовать включение по нажатию тактовой кнопки нескольких устройств (светодиодов например) в строгой последовательности и выключение всех сразу.
1) Проверить, что драйвер установился корректно
2) Проверить, что в Arduino IDE установлены нужные плата и порт, в меню Сервис
3) Проверить работоспособность USB-кабеля
ВОТ ЭТА ДА
Изменена опция сборки, пересобираем все
sketch_may27c.ino: In function 'void setup()':
sketch_may27c:6: error: 'switchPin' was not declared in this scope
sketch_may27c.ino: In function 'void loop()':
sketch_may27c:12: error: 'switchPin' was not declared in this scope
'switchPin' was not declared in this scope
вышла такая ошибка
Почему такой резкий конец?
для чего запоминать состояние системы?)
у меня воспрос, можно ли программировать ардуино на С ?
Подскажите так и задумано в конце после слов "давайте допишем программу, чтоб исправить это" - и не показано это самое дописание программы - выглядит как обрыв видео.
Здесь есть продолжение видео - czcams.com/video/LkR8rxzAo_A/video.html
Кто нибудь может объяснить как работает ардуиновский компилятор? Всё что в void loop выполняется по кругу с большой частотой вне зависимости от наших взаимодействий с ардуином?
Надежнее подтягивать кнопку к питанию, а замыкать на землю. Тогда намного меньше шансов, что контроллер схватит какую-нибудь помеху пока кнопка не нажата.
Почему?
Подтягивают хуй к жопе. В эл. схемах есть понятие коммутация или подключение.
Спасибо за видео.
У меня получилось наоборот. Лампочка горит всегда, когда на кнопку нажимаю то выключается.
Подскажите, пожалуйста что не так?
P.S. поставил другой светодиод, теперь работает как надо
ledPin, switchPin, что именно значит led и switch, и что озночает Pin? заранее спасибо:)
+Илья Антонов led это светодиод, Pin это разъем, switch это кнопка
забей. это всё переменные. назови как хочешь, главное не запутайся и подпиши комментариями
В явном виде эта фича появилась позже выхода ролика. Раньше внутренняя подтяжка была возможна, но инициализировалась неочевидным способом.
Просто!!!!че
После первого видео сразу сделал колоайдер
Можно конденсатор впаять параллельно кнопке, на 0.1 микрофарад, и будет всё ок
Походу и правда.. Глубоко воткнул, он там еще пару контактов цепляет. Спасибо)
Спасибо амперка
Успехов вам!
А резисторы на сколько Вт?
а можно ли после int вводить любое название для контакта? Прошу помочь
Можно
Я сам по этим видео учился програмировать на Arduino !
А как подключить 2-х контактную кнопку?
Но , у меня другой бед борд и другая версея набора (new IDE) сделайте инструкцию на этот набор ( я пока делаю по инструкции правильно , но вы показывает по другому) что делать ?
Здравствуйте, есть ардуино уно, при запуске подает единицу на лед пин 13, если ставлю скетч с примера блинк, то светодиод на плате мигает можно настроить паузы и т д , потом ставлю скетч
const int ledPin = 13;
const int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, INPUT);
Serial.begin(9600);
}
void loop() {
boolean pin13 = digitalRead(ledPin);
boolean pin2 = digitalRead(buttonPin);
Serial.print("pin 2 ="); Serial.print(pin2);
Serial.print(" pin 13 ="); Serial.println(pin13);
}
и он горит постоянно, в окне вывода Pin2=0 pin13=1, случайно каснулся пальцем за 13 пин и светодиод погас, отпустил опять загорелся, подскажите в чем может быть проблема (могу только предположить что резистор какой то сгорел), заранее спасибо.
такой вопрос,я понял для чего подключают большое сопротивление но не понял,почему ножки кнопки пропускают сигнал если контакты разомкнуты? Лампочка без сопротивления при разжатой кнопке горит но не ярко.
digitalWrite(ledPin, digitalRead(switchPin) );
что делать?
avrdude: stk500_getsync(): not in sync: resp=0x00
У мня не написан на сколько резистары значет без разници какой?
Почему у меня выдает ошибку, мол на input не должно быть логической 1, хотя именно так оно и должно быть
а есле по случайке перепутать и написать как лед пин вход а кнопка пин выход
Подсоединяю 2 провода: 1 к 5 В, другой на массу. Замыкаю их между собой кнопкой и Ардуино выключается. Почему у Джереми ардуино не выключается?
+ufoFly666 так два провода из розетки тоже замыкаются, допустим через электроприбор. Где моя ошибка?
+armangrad Вы Arduino короткое замыкание устраиваете через кнопку.
+AmperkaRu получается 5 В сначала идет на кнопку, потом на пин 8. через резистор на массу не идет, потому что сопротивление большое. Так?
+ufoFly666 У меня в качестве резистора автомобильная лампочка. А схема такая. 5 В идут на контакт кнопки, выходит провод, через лампу идет на массу, он же параллельно идет на 8й пин
+ufoFly666 если заменить лампу на указанный резистор, все заработает?
Здравствуйте. У меня такая проблема: все сделал как положено, но светодиод горит постоянно. А при нажатии кнопки он становится немного ярче.. в чем может быть проблема?
Нет. Смотрите, когда пин является INPUT'ом, он электрически является резистором с очень большим сопротивлением, поэтому тыкать в него напряжением до 5 В совершенно безопасно. А вот когда пин настроен, как OUTPUT и находится в состоянии LOW, электрически это эквивалент замыкания пина на землю. И вот тогда уже соединение его с +5V напрямую будет фатально.
я сделал как вы сделали но всеровно у меня светодиот светит при нажатии кнопки нечего не происходит хотя я правильно сделал почему так?
как исправить эту ошибку?
Arduino: 1.6.4 (Windows XP), Плата"Arduino Uno"
Изменена опция сборки, пересобираем все
sketch_may27h.ino: In function 'void loop()':
sketch_may27h:19: error: expected '}' at end of input
expected '}' at end of input
Помогите пожалуйста!
при загрузке скетча внизу пишет:
avrdude: stk500_getsync(): not in sync: resp=0x00
vk.com/amperkaru?w=wall-28407855_4458
Почему на втором круге светодиод тухнет? Ведь значение ledOn так и осталось тру после первого круга.
у меня заработало
int switchPin = 8;
int ledPin = 13;
void setup()
{
pinMode (switchPin, INPUT);
pinMode (ledPin, OUTPUT);
}
void loop()
{
if (digitalRead (switchPin)== HIGH)
{digitalWrite (ledPin,HIGH);
}
else
{
digitalWrite(ledPin,LOW);
}
}
Благодарю а то я уже расстроился...
только кнопка то всё равно дребезжит)
без сложной дебаунсовой функции с этим не справиться, увы.
Ребята, почему сигнал скачет, почему так происходит, не могу понять этого? Не знаю где про это прочитать.
Який коди до програми.
Столкнулся с такой проблемой: я загрузил код ,всё проверил ,но почему то работает старая программа с миганием а новая не работает.
почему его код не работает? в первом коде на 8-08 минут вконце не хватает фигуркой скобки. во второй части она появляется на видео но с новыми правками не работает тоже.
ребята я всё написал как он и я её проверял выходит (expected ' . ' or ' . ' before 'void' )
Делал в симуляторе circuits.io, к сожалению лампочка просто всегда горит и все. Не реагирует на кнопку. Видимо мне так и не понять робототехнику....
он кнопку к пину 5V подключил?
+Morkovka да
В if (digitalRead(switchPin) == HIGH && lastButton == LOW) указан lastButton,но lastButton не объявлен!{ ledOn = !ledOn; lastButton = HIGH; } Вот тут опять lastButton,и к тому же Неравно пишется вроде вот так != ,(если я не прав,поправьте),ну и в else опять lastButton.P.S.Надеюсь что помог,если я в чем то не прав поправьте,я не глянул видео,просто увидел действие на канале Амперка.
На 10:56 запустил код, подумал, что меня обманули, но посмотрев 2-ю часть понял, в чём тут подвох!
У меня почему то не работает
Прописал всё точь в точь
Ноль по фазе
И проблема не в плате или в том как я контакты подключил а именно в коде
допишим программу.. и? ?
Видимо кнопку к земле не притянули. Не так ли?
int switchPin = 8;
int ledPin = 13;
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switchPin) == HIGH)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
5:02 что это он подключает?
забудьте ...
трю, гыы
интЕджер
Олексій Сапон ;D
Стягивающий резистор ... %)
Не указано в какие шимы подключал..
Подскажите что не так? У меня работает все 30 сек а потом начинает мигать и никак не реагирует на кнопку, помогите.
По непонятной причине выдает ошибку, что нельзя писать "else" если нет "if"... Но код прописан правильно по примеру.
И, кстати, есть у него последняя фигурная скобка для loop. На 8:10.
убери
;
там где условие if
int switchPin = 8;
int ledPin = 13;
boolean lastButton = LOW;
boolean ledOn = LOW;
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
в этой строчке ошибка stray '\357' in program
}
void loop()
{
if (digitalRead(switchPin) == HIGH && lastButton == LOW)
{
ledOn = !ledOn;
lastButton = HIGH;
}
else
{
lastButton = digitalRead(switchPin);
}
digitalWrite(ledPin, ledOn);
}
и что делать?
Народ помогите разобраться. Что заставляет светодиод погаснуть при повторном нажатии на кнопку?? Ведь когда он уже горит первое условие if не выполняется и компилятор сразу переходит на else
Так в else стоит lastButton = digitalRead(swichPin) то есть когда ты отпустишь кнопку у тебя swichPin окажется LOW и оно запишется в LastButton, и при повторном нажатии кнопки у тебя выполнится условие if
я понял ахахах я поняял!!! Спасибо!!! Я не мог понять что когда мы не трогаем кнопку у нас по кругу выполняется елс. Спасибо!!!!!!!!!!
в конце программы надо две фигурные скобки }}
Там одна скобка для содержимого локальной функции, другая для void loop()
набираю тот же код что и Джереми и у меня еррорит
int switchPin = 8;
int ledPin = 13;
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switchPin) == HIGH && lastButton == LOW)
{
ledOn = !ledOn;
lastButton = HIGH;
}
else
{
lastButton = digitalRead(switchPin);
}
digitalWrite(ledPin, ledOn);
}
У меня почему то диод начинает гореть еще до того как я нажму кнопку. Просто от приближения моей руки
Arduino: 1.8.8 (Windows 7), Плата:"Arduino/Genuino Uno"
C:\Users\РђРЅРЅР°\Desktop\sketch_feb15b\sketch_feb15b.ino: In function 'void loop()':
sketch_feb15b:14:41: error: 'lastButton' was not declared in this scope
exit status 1
'lastButton' was not declared in this scope
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
10 лет прошло
У меня мозг лопнул...Не для меня это дело ...Спасибо я это понял с помощью этого урока..Не поминайте лихом
У меня светодиод тупо моргал и нифига не получилось...
Друзья подскажите что такое && ?
+Александр А (&&) - это условный оператор AND
логическое "и"
есть в интернете табличка про ето arduino.ru/Reference
Ещё есть 'and', 'or', '||'.
Вот код,должен работать:
int switchPin = 8;
int ledPin = 13;
boolean lastButton = LOW;
boolean ledOn = LOW;
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switchPin) == HIGH && lastButton == LOW)
{
ledOn = !ledOn;
lastButton = HIGH;
}
else
{
lastButton = digitalRead(switchPin);
}
digitalWrite(ledPin, ledOn);
}
А вообще,пытайся сам найти ошибки,иначе ни чему не научишся!(Амперка,ответь что нибуть,что бы все код видели)
у меня выбивает такая ошибка expected '}' at end of input
Ты забыл где-то поставить }, либо в цикле, либо в if, либо в void. Ты что-то не закрыл)
У меня ошибка в строчке if помогите
У меня не работает последняя схема. Я и схему 10 раз проверил и программу с оф.сайта скачал - все равно( Предидущие нормально работали... Подскажите, может кто-то сталкивался?
Переставил на брэд борде резистор и светодиод на другие пины - заработало!
+Н. Анисимов у тебя живая модель в руках? в программе переставил?