Светодиод и кнопка в классах.
- Войдите на сайт для отправки комментариев
Ср, 06/07/2016 - 03:09
Задача простая. Светодиод кнопка .
Кнопку нажали- светодиод горит. Отпустили, разумеется погасла. Задачу можно решить без Ардуины и тем более без содание классов. Но все же если попробовать. Что из этого выйдет.
Моя версия кода.
// программа класс светодиод, класс кнопка #define pinLed 13 #define pinBottom 2 // ---класс светодиод--- class qw_led { public: qw_led(int pin); void on(); void off(); private: int _pin; }; qw_led::qw_led(int pin){ _pin=pin; pinMode(_pin, OUTPUT); } void qw_led::on(){ digitalWrite(_pin, HIGH); } void qw_led::off(){ digitalWrite(_pin, LOW); } // --- класс кнопка ---- class qw_bottom { public: qw_bottom(int pin); boolean input(); private: int _pin; int _data; }; qw_bottom::qw_bottom(int pin){ _pin=pin; pinMode(_pin, INPUT); } boolean qw_bottom::input(){ _data = digitalRead(_pin); return _data; } // ----- сама программа ------ qw_led VD1(pinLed); qw_bottom SB1(pinBottom); void setup() { } void loop() { delay(100); //пауза 0.1 сек if (SB1.input() == 1) VD1.on(); else VD1.off(); }
1. Для светодиода может понадобиться запрос текущего состояния.
2. А вот для кнопки переменная, хранящая считанное значение, явно лишняя.
3. Зачем писать (SB1.input() == 1), это чем-то лучше, чем просто SB1.input()?
Я такое уже делал (с помощью ЕвгенияП) http://arduino.ru/forum/programmirovanie/biblioteka-dlya-tsifrovogo-vykhoda Только для кнопки антидребезг организован, а для выходов медленный шим, инвертирование, приравнивание одного выхода к другому.
Для того что бы гнуть ложку, надо поверить что ложки нет. Из Матрицы. Вот так и с дребезгом. Правильно организованая программа дребезг не чувствует.
Ладно продолжу. Теперь возьмем 6 (кнопок) и 6 светодиодов. Пусть каждая кнопка при нажатии переключает свой светодиод (ВКЛ- ВЫКЛ -ВКЛ).
Мой код.
Правильно организованая программа дребезг не чувствует.
delay(100);
//пауза 0.1 сек потому что нечего бегать процессору
жги дальше - все внимательно жрут попкорн.
А не наоборот? :)
qw_button, тогда уж - bottom это что-то совсем другое.
Для того что бы гнуть ложку, надо поверить что ложки нет. Из Матрицы. Вот так и с дребезгом. Правильно организованая программа дребезг не чувствует.
Да. Это так. О нем просто не задумываешся и он не проявляется.
Для того что бы гнуть ложку, надо поверить что ложки нет. Из Матрицы. Вот так и с дребезгом. Правильно организованая программа дребезг не чувствует.
Да. Это так. О нем просто не задумываешся и он не проявляется.
дребезга нед!(с)delay(100)
Почти. Гиря лежит неподвижно, хотя все её атомы в движении, но это не мешает нам считать гирю неподвижной. делей - моветон, нада делом заниматся, а не делеится или дребезг кнопки опрашивать.
qwone, а почему у Вас "on" - 1, а "off" - 0? Обычно активный уровень низкий. Тут, конечно, у каждого свои заморочки, но все равно, стоило бы в конструкторе указать, какой именно уровень считается активным. И не включать сразу светодиод. По умолчанию он должен быть выключен.
Это по желанию. Вы видете , что я не создал из класса библиотеку и не отправил их в .h и .срр файлы. Позже я дам продолжение. А библиотеку я не делаю, что бы не создавалось много лишнего кода компилятором.
Да и еще классы я создал qw_bottom и qw_led. Только из -за того что бы они не мешались с привычными.Много разных классов и библиотек с одними и теми же названиями банально сбивают людей. Вы можете городить свои классы с нужной вам логикой 0 или 1. Называть к примеру an_bottom и an_led. Тогда вы точно не будете мешать их с моими.
qwone, я не собираюсь пользоваться Вашими классами. От слова совсем. Мне проще написать свои под мои конкретные задачи, чем разбираться с Вашими.
Но коль скоро Вы создали тему, значит, Вы предлагаете обсуждение. Вот в рамках обсуждения я и предупредил Вас, что отождествление активного уровня с 1 в корне неверно. А также порекомендовал режим "выключено" по умолчанию. Первое - принципиально, второе - по вкусу.