Раздел для новичков
- Войдите на сайт для отправки комментариев
Добрый вечер, господа.
Не нашел раздела для новичков на форуме, поэтому если правила форума позволят, буду в этой темке свои глупые вопросы задавать.
По образованию и профессии я химик, молодой. Как оказалось любая инженерная профессия требует понимания работы микроконтроллеров и знаний основ программирования. И мало-мальских навыков..
Начал учиться прогрммированию по учебнику Лукина, Паскаль. Хотел бы сказать, что повторил со школы Паскаль, но учитель у нас был мягко говоря плохой. Освоил основы довольно быстро, написал программку с мультиком в Паскале, понял, что углубляться дальше нет большого смысла. Поэтому решил перейти к изучению микроконтроллеров на ардуино, купил на Али старткит, и здесь столкнулся с языком С..
3 дня назад открыл учебник по Ардуино (ДЖЕРЕМИ БЛУМ), и сразу застопорлися на дребезжании кнопки. 2 дня голову чесал, так и не понял, тут явно дело в какой-то внутренней логике компилятора.
Вопрос такой, почему это работает? Вопросы в коде написал.
const int LED=9; const int BTN=2; bool lastbutton=LOW; bool currentbutton=LOW; bool ledon=0; void setup() { pinMode(LED, OUTPUT); pinMode(BTN, INPUT); } bool debounce(bool last) { bool current=digitalRead(BTN); if (last!=current) { //переменную last мы никак не привязывали ко 2 выходу и не давали ей значений // Почему программа сравнивает current с переменной которой мы не давали никаких значений? delay(5); current=digitalRead(BTN); return current; // не совсем понял, что означает "возвратить" переменную и зачем } } void loop() { currentbutton=debounce(lastbutton); if (lastbutton==LOW&¤tbutton==HIGH) { ledon=!ledon;} lastbutton=currentbutton; digitalWrite(LED, ledon);}
По образованию и профессии я химик
А что, в университетах химиков не учат программированию?
Не может такого быть! Давно бы без лицензии остались, т.к. образовательный стандарт никто не отменял.
Вы бы отформатировали свой скетч (в Arduino IDE это комбинация клавиш Ctrl+T) - появились бы отступы, а там и понимание возможно проще пришло бы. А сейчас у вас весь код, как под линейку, выравнен по левому краю. Компилятору это все-равно, а человеку удобнее читать, когда просматривается структура.
Все, что было это Basic в Excel, учили аппроксимацию делать, которую спокойно ORIGIN осилит...
По образованию и профессии я химик
А что, в университетах химиков не учат программированию?
Не может такого быть! Давно бы без лицензии остались, т.к. образовательный стандарт никто не отменял.
Толку от этого стандарта. На место приходишь и всё с нуля изучаешь, самообразованием занимаешься.
Требуйте "взад" деньги за обучение.
bool debounce(bool last) {
begin
...
end;
Требуйте "взад" деньги за обучение.
или возвращайте обратно диплом. Мол если знаний нет, то и диплом это бумашка.
ПС: Человек считает, что тупо осидев там положеный срок , знания заведутся в голове, как червяки. А на деле надо учится всю жизнь, что бы хоть соответвовать уровню
bool debounce(bool last) {
begin
...
end;
то что это логическая функция я понимаю:)
Вопрос в другом был, если посмотреть код, то для переменной last не задано ни какое значение, ни 0 ни 1, и сразу же после её объявления мы с ней же сравниваем current, которому присвоили значение с пина2. По логике получается ардуино случайно присваивает для переменной last значение и с ним сравнивает?
Не, с паскалем у Вас как-то тоже не особо. Про параметры функций что, не слышали? Как же это "значение не задано"? Функция вызывается в 21-й строке. И передаётся ей значение lastbutton. Чему оно в самый первый раз равно будет, смотрим в строке 3, где эта переменная объявлена. Всё, кстати, для паскаля применимо.
Почитайте уж ещё что-нибудь... Здесь такую азбуку не принято разжёвывать.
Теперь понятно, мне думалось, что 21 строка определяется функцией, а оказалось, что наборот.
Ладно, спасибо!
3 дня назад открыл учебник по Ардуино (ДЖЕРЕМИ БЛУМ), и сразу застопорлися на дребезжании кнопки. 2 дня голову чесал, так и не понял, тут явно дело в какой-то внутренней логике компилятора.
Вопрос такой, почему это работает?
В книге Джереми Блума (страница 57) подробно расписано как работает функция debounce() и весь скетч в целом.
Работает "антидребезг" кстати не самым лучшим способом, но для понимания новичками сгодится.
Теперь понятно, мне думалось, что 21 строка определяется функцией, а оказалось, что наборот
Не очень понял, что значит "определяется функцией". Вас не смущает запись y = sin(x) ? sin - это функция, ей передаётся x, значение, которое функция возвращает, будет присвоено y. Всё то же самое в 21-й строке.