Это видео недоступно.
Сожалеем об этом.
Видеоуроки по Arduino #2.1: Кнопки, PWM / ШИМ, функции
HTML-код
- Опубликовано: 13 апр 2011
- Продолжение - • Видеоуроки по Arduino ...
Урок о том как подключать кнопки к Arduino, зачем нужен breadboard, как использовать широтно-импульсную модуляцию сигналов (ШИМ или PWM) и о том как создавать собственные функции в среде программирования Arduino
Скетч для Arduino - jeremyblum.com/...
Список деталей:
• Arduino Uno - amperka.ru/prod...
• USB-кабель - amperka.ru/prod...
• Breadboard - amperka.ru/coll...
• Светодиоды - amperka.ru/prod...
• Резисторы - amperka.ru/prod...
• Кнопка тактовая - amperka.ru/prod...
• Набор перемычек - amperka.ru/prod...
• Мультиметр - amperka.ru/prod...
ПО для Arduino: arduino.cc/en/M...
Оригинал -
• Tutorial 02 for Arduin...
Автор - Jeremy Blum / @sciguy14
Перевод - AmperkaRu / @amperkaruofficial
Материалы переведены и опубликованы с разрешения автора
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);
}
}
Вот все работает
спасибо
понятно ..... что нифига не понятно ))
жиза
Нифига не панятна но очень интересно
Падерживаю ниюига не понатнооо
ты даже и не вникал и не пытался сделать переключатель
LOW, false и 0 - это по сути синонимы. Также как HIGH, true, 1
тяжело понять новичку, знания возможно у него есть, а вот с доходвичивым объяснением не так уж.
Мы в 6 классе фигачим уже бегающий огонёк
нужны начальные знания ООП-программирования чтобы лучше понималось
Последние минуты - взрыв головного мозга. Аж спать захотелось!
обратите внимание / if (digitalRead(switchPin) == HIGH) / нужно писать без - ; - тогда всё работает. Если нужно коммутировить 2 позиционную кнопку - то лучше использовать 2 раза (if)
вместо int используйте char для определения ножек, это сильно экономит память.
Погрузился в ход его мысли ). На фразе:"убедимся что мы обновили наше значение, оно будет хранить это состояние. потому что храним в выражении.." , и тут я ушёл в гипноз )))))
Как я где-то вычитал - прямым замыканием выходов -> входов можно повредить плату, ибо она рассчитана на ток до 40мА. Не этим ли самым не побрезговал Джереми, замкнув +5V на Pin8 через кнопку?
Pardon. Didn't catch a question. As a rule of thumb you're always need a resistor in series with LED.
А видео о tehbits про которое говорит Джереми где можно посмотреть в русской озвучке?
Этот ролик мы, увы, не переводили
AmperkaRu а есть такое в планах? Было бы очень интересно посмотреть
Сергей Шиловский Учтём в планах, что многие его хотят
AmperkaRu Буду очень признателен. если переведете. :)
такой вопрос,я понял для чего подключают большое сопротивление но не понял,почему ножки кнопки пропускают сигнал если контакты разомкнуты? Лампочка без сопротивления при разжатой кнопке горит но не ярко.
интересное решение - убрать дребезжание программно. но лучше аппаратно, просто включив паралельно кнопке маленький кондер
хотелось бы узнать о цифровых и аналоговых входах но перевода нет перейдя по ссылке - очень жаль ))))))))))
Техно Sport Arduino что именно ты хотел узнать?
Техно Sport Arduino Мы постараемся как-нибудь добраться-таки до этого ролика)
Mr.ПоделкинЦ live как ими пользоваться как скейчи писать и как их прописывать правильно и что они значат
Mr.ПоделкинЦ live Я бы хотел узнать - почему конкретные детали подключают к аналоговым выходам на плате а некоторые к цифровым...
Почему у меня выдает ошибку, мол на input не должно быть логической 1, хотя именно так оно и должно быть
Даже сам Джереми не верно написал код скетча :) У него при нажатии на кнопку происходит включение и выключение диода с частотой итерации цикла. На каком состоянии он отпустит кнопку - на том и запомнится переменная xD. А при нажатии и удержании кнопки светодио светит "вполнакала", то есть от меандра постоянных включений-выключений ;-)
+Ярослав Курус Похоже Вы ошиблись:
Кнопка нажата:
1 цикл: мы входим в первое условие и меняем состояние светодиода
2 цикл: мы не можем войти в первое условие, т.к. состояние кнопки не изменилось (lastButton == LOW) === false
3 цикл и последующие такие же как 2
Выходит, что в любой последующей интерации мы изменим сотояние диода только если кнопка меняла свое состояние. Это не связано с частотой или кол-вом циклом. Это действительн освязано с дребезжанием.
Второй опыт (после использования функции debounce) показал, что предположение о дребезжании верно.
+Anatoliy Litinskiy на видео четко видно половинное свечение диода при зажатой кнопке.
+Ярослав Курус на видео видно что нет скобки в конце в первой част на 8 минуте. ничего не работает никаки правки. почему его код не работает? рабочий код в комментах есть.
+Ярослав Курус по-моему верно. решается проблема задержкой после нажатия 100-200 мсек в конце цикла
По идее если в самом первом коде с горящим диодом при нажатой кнопке, по всему коду инвертировать значения с HIGH -> LOW и с LOW -> HIGH (всего в 3-х местах). Диод должен гореть, а при нажатии гаснуть. А этого не происходит (всё работает как и было до инвертации), Должно-ли вообще гаснуть? Или в таком случае обратно всё не должно работать? Может я забегаю сильно вперёд?
Изменена опция сборки, пересобираем все
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
вышла такая ошибка
В 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);
}
Но , у меня другой бед борд и другая версея набора (new IDE) сделайте инструкцию на этот набор ( я пока делаю по инструкции правильно , но вы показывает по другому) что делать ?
все понятно, просто надо внимательно вслушиваться и думать об услышанном
я сто раз вслушивался, не понял!!!
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);
}
}
Здравствуйте, есть ардуино уно, при запуске подает единицу на лед пин 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 пин и светодиод погас, отпустил опять загорелся, подскажите в чем может быть проблема (могу только предположить что резистор какой то сгорел), заранее спасибо.
Подскажите так и задумано в конце после слов "давайте допишем программу, чтоб исправить это" - и не показано это самое дописание программы - выглядит как обрыв видео.
Здесь есть продолжение видео - ruclips.net/video/LkR8rxzAo_A/видео.html
Спасибо за перевод. Отличные уроки.
1) Проверить, что драйвер установился корректно
2) Проверить, что в Arduino IDE установлены нужные плата и порт, в меню Сервис
3) Проверить работоспособность USB-кабеля
Надежнее подтягивать кнопку к питанию, а замыкать на землю. Тогда намного меньше шансов, что контроллер схватит какую-нибудь помеху пока кнопка не нажата.
Почему?
Подтягивают хуй к жопе. В эл. схемах есть понятие коммутация или подключение.
Подсоединяю 2 провода: 1 к 5 В, другой на массу. Замыкаю их между собой кнопкой и Ардуино выключается. Почему у Джереми ардуино не выключается?
+ufoFly666 так два провода из розетки тоже замыкаются, допустим через электроприбор. Где моя ошибка?
+armangrad Вы Arduino короткое замыкание устраиваете через кнопку.
+AmperkaRu получается 5 В сначала идет на кнопку, потом на пин 8. через резистор на массу не идет, потому что сопротивление большое. Так?
+ufoFly666 У меня в качестве резистора автомобильная лампочка. А схема такая. 5 В идут на контакт кнопки, выходит провод, через лампу идет на массу, он же параллельно идет на 8й пин
+ufoFly666 если заменить лампу на указанный резистор, все заработает?
ВОТ ЭТА ДА
А возможность подтяжки пина к 5V при помощи INPUT_PULLUP была добавлена позднее, не реализована в UNO или просто не рассматривается в этом уроке?
Там ещё ошибочка в коде. Функцию зажигания светодиода автор вынес за условие
Почему на втором круге светодиод тухнет? Ведь значение ledOn так и осталось тру после первого круга.
ledPin, switchPin, что именно значит led и switch, и что озночает Pin? заранее спасибо:)
+Илья Антонов led это светодиод, Pin это разъем, switch это кнопка
забей. это всё переменные. назови как хочешь, главное не запутайся и подпиши комментариями
Почему такой резкий конец?
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);
}
и что делать?
Интересно, а почему переменная lastButton типа boolean проинициализирована как LOW? Она же должна быть true или false.
Кто нибудь может объяснить как работает ардуиновский компилятор? Всё что в void loop выполняется по кругу с большой частотой вне зависимости от наших взаимодействий с ардуином?
В явном виде эта фича появилась позже выхода ролика. Раньше внутренняя подтяжка была возможна, но инициализировалась неочевидным способом.
Спасибо за видео.
У меня получилось наоборот. Лампочка горит всегда, когда на кнопку нажимаю то выключается.
Подскажите, пожалуйста что не так?
P.S. поставил другой светодиод, теперь работает как надо
Антон, очень по хоже по симптомам, что вы неправильно сделали стяжку/подтяжку резистором. И пока кнопка не нажата, ваш светодиод на деле очень часто мерцает и кажется, что он горит в полсилы.
та все уже разобрался)) то глаза еррорили)))
спасибо за отзывчивость))
у меня воспрос, можно ли программировать ардуино на С ?
почему его код не работает? в первом коде на 8-08 минут вконце не хватает фигуркой скобки. во второй части она появляется на видео но с новыми правками не работает тоже.
Походу и правда.. Глубоко воткнул, он там еще пару контактов цепляет. Спасибо)
как исправить эту ошибку?
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
Помогите пожалуйста!
У меня почему то диод начинает гореть еще до того как я нажму кнопку. Просто от приближения моей руки
Я сам по этим видео учился програмировать на Arduino !
У мня не написан на сколько резистары значет без разници какой?
Делал в симуляторе circuits.io, к сожалению лампочка просто всегда горит и все. Не реагирует на кнопку. Видимо мне так и не понять робототехнику....
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
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
У меня почему то не работает
Прописал всё точь в точь
Ноль по фазе
И проблема не в плате или в том как я контакты подключил а именно в коде
Просто!!!!че
После первого видео сразу сделал колоайдер
Очень доходчиво! 👍😀
Ребята, почему сигнал скачет, почему так происходит, не могу понять этого? Не знаю где про это прочитать.
Нет. Смотрите, когда пин является INPUT'ом, он электрически является резистором с очень большим сопротивлением, поэтому тыкать в него напряжением до 5 В совершенно безопасно. А вот когда пин настроен, как OUTPUT и находится в состоянии LOW, электрически это эквивалент замыкания пина на землю. И вот тогда уже соединение его с +5V напрямую будет фатально.
я сделал как вы сделали но всеровно у меня светодиот светит при нажатии кнопки нечего не происходит хотя я правильно сделал почему так?
а можно ли после int вводить любое название для контакта? Прошу помочь
Можно
Можно конденсатор впаять параллельно кнопке, на 0.1 микрофарад, и будет всё ок
может кто подскажет как реализовать включение по нажатию тактовой кнопки нескольких устройств (светодиодов например) в строгой последовательности и выключение всех сразу.
в ошибки валиться весь его скетч что то не так все пересмотрел хрень какаето, причем с самого начала,
int switchPin = 8;
int ledPin = 13;
boolean lasrButton - LOW;
boolean LedOn = false;
void setup()
{
pinMode(switchPin, imput);
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switch) == HIGH);
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
Здравствуйте. У меня такая проблема: все сделал как положено, но светодиод горит постоянно. А при нажатии кнопки он становится немного ярче.. в чем может быть проблема?
Не сложно, сделано, спасибо!
СИНТАКСИС И РЕГИСТР ОБЯЗАТЕЛЕН!!!
int switchPin=8;
int ledPin=13;
boolean Knopka = LOW;
void setup()
{
pinMode(switchPin,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop()
{
if(digitalRead(switchPin)==HIGH )
{
digitalWrite(ledPin, HIGH);
Knopka = !Knopka;
}
else if (digitalRead(switchPin)==LOW && Knopka ==HIGH )
{
digitalWrite(ledPin, LOW);
}
}
Денис Грибанов это просто переменные
Подскажите что не так? У меня работает все 30 сек а потом начинает мигать и никак не реагирует на кнопку, помогите.
А резисторы на сколько Вт?
Який коди до програми.
а есле по случайке перепутать и написать как лед пин вход а кнопка пин выход
Да, это синонимы для схем с одним уровнем питания.
при загрузке скетча внизу пишет:
avrdude: stk500_getsync(): not in sync: resp=0x00
vk.com/amperkaru?w=wall-28407855_4458
у меня заработало
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);
}
}
Благодарю а то я уже расстроился...
только кнопка то всё равно дребезжит)
без сложной дебаунсовой функции с этим не справиться, увы.
У меня не работает последняя схема. Я и схему 10 раз проверил и программу с оф.сайта скачал - все равно( Предидущие нормально работали... Подскажите, может кто-то сталкивался?
Переставил на брэд борде резистор и светодиод на другие пины - заработало!
+Н. Анисимов у тебя живая модель в руках? в программе переставил?
Большое вам спасибо
А как подключить 2-х контактную кнопку?
что делать?
avrdude: stk500_getsync(): not in sync: resp=0x00
Понятно. Спасибо за ответ!
Здравствуйте, Я с большим трудом продираюсь через дебри программирования.
У меня к вам просьба.
Прошу написать несколько строчек кода, которые выполняют следующее:
На воды D2 и D3 заранее подаются команды в двоичном коде
00
01
10
11
Как заставить скетч на каждое из этих двоичных чисел выполнять различные части программы.
Каждая из этих частей мне уже покорилась, и работает. Нужна возможность выбора одной из них, без препрошивки скетча :)
Спасибо большое.
Столкнулся с такой проблемой: я загрузил код ,всё проверил ,но почему то работает старая программа с миганием а новая не работает.
Хорошее дело делает
Народ помогите разобраться. Что заставляет светодиод погаснуть при повторном нажатии на кнопку?? Ведь когда он уже горит первое условие if не выполняется и компилятор сразу переходит на else
Так в else стоит lastButton = digitalRead(swichPin) то есть когда ты отпустишь кнопку у тебя swichPin окажется LOW и оно запишется в LastButton, и при повторном нажатии кнопки у тебя выполнится условие if
я понял ахахах я поняял!!! Спасибо!!! Я не мог понять что когда мы не трогаем кнопку у нас по кругу выполняется елс. Спасибо!!!!!!!!!!
для чего запоминать состояние системы?)
По непонятной причине выдает ошибку, что нельзя писать "else" если нет "if"... Но код прописан правильно по примеру.
И, кстати, есть у него последняя фигурная скобка для loop. На 8:10.
убери
;
там где условие if
Чем еррорит?
Спасибо очень полезно
ребята я всё написал как он и я её проверял выходит (expected ' . ' or ' . ' before 'void' )
Спасибо амперка
Успехов вам!
у меня выбивает такая ошибка expected '}' at end of input
Ты забыл где-то поставить }, либо в цикле, либо в if, либо в void. Ты что-то не закрыл)
У меня ошибка в строчке if помогите
Супер!!!
Какой-то бред! Как по таким урокам можно чему-то научиться? Зачем автор лепит резистор на кнопку? Как можно подключать два светодиода параллельно после общего резистора? Ведь то, что светодиод светит - это чистая удача, и в случае с другим светодиодом может не прокатить! Резистор, который обеспечивает фиксацию потенциала на выводе микросхемы с неопределенным состоянием как правило называют подтягивающим, а не стягивающим, он как бы подтягивает вывод к определенному потенциалу. В общем, есть ляпы как у автора, так и у переводчиков... Амперка - магазин нелохой, сам у них покупаю, но для само рекламы могли бы что-то по серьезнее сделать. Может быть стоит снять что-то свое вместо переводов?!
Вот код,должен работать:
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);
}
А вообще,пытайся сам найти ошибки,иначе ни чему не научишся!(Амперка,ответь что нибуть,что бы все код видели)
Не понятно как это работает и зачем это вообще
else{
lastButton = digitalRead(switchPin);
}
digitalWrite(ledPin, ledOn);
}
В if (digitalRead(switchPin) == HIGH && lastButton == LOW) указан lastButton,но lastButton не объявлен!{ ledOn = !ledOn; lastButton = HIGH; } Вот тут опять lastButton,и к тому же Неравно пишется вроде вот так != ,(если я не прав,поправьте),ну и в else опять lastButton.P.S.Надеюсь что помог,если я в чем то не прав поправьте,я не глянул видео,просто увидел действие на канале Амперка.
Не указано в какие шимы подключал..
номера пинов лучше константами делать а не int переменными. память не резиновая
Супер
набираю тот же код что и Джереми и у меня еррорит
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);
}
Вот полный скретч, писал так же как на видео
int swittchPin=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);
}
}
У меня всё равно ошибку показывает
спасибо
Видимо кнопку к земле не притянули. Не так ли?
Почему видео урезанное, на его блоге оно продолжается что бы диод не моргал
Это первая часть видео, есть продолжение: Видеоуроки по Arduino. Кнопки, PWM, функции (2-я серия, часть 2)
Спасибо, просто она оказалась значительно ниже первой части в плейлисте
Спасибо за замечание, разберемся ;)
digitalWrite(ledPin, digitalRead(switchPin) );
а почему перевели не до конца? пол урока нет
Переводили в те времена, когда на RUclips ограничения надлинну ролика были. Запустите следующее в плейлисте видео.
У меня мозг лопнул...Не для меня это дело ...Спасибо я это понял с помощью этого урока..Не поминайте лихом