Здравствуйте вот код скетча на открывание сервы и закрывание , но проблема в том что нажатие кнопки не реагирует ,то есть не выполняется код при нажатии на нее хотя в серийном порту пишет button on ,если не нажимать на кнопку выполняется код по истечению таймера. Подправьте мой скетч, подскажите что делать, чтобы работало как и от нажатия кнопки так и от таймера Код (C++): const int buttonPin = 12; // номер входа, подключенный к кнопке //const int ledPin = 13; // номер выхода светодиода // переменные int buttonState = 0; // переменная для хранения состояния кнопки long prevmillis = millis(); long interval = 10000; #include <Servo.h> //используем библиотеку для работы с сервоприводом Servo servo; //объявляем переменную servo типа Servo void setup() { Serial.begin(9600); servo.attach(9); //привязываем привод к порту 9 // инициализируем пин, подключенный к светодиоду, как выход // pinMode(ledPin, OUTPUT); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); } void loop(){ buttonState = digitalRead(buttonPin);// считываем значения с входа кнопки if (buttonState == HIGH) { // проверяем нажата ли кнопка // если нажата, то buttonState будет HIGH: // включаем светодиод Serial.println("Button on"); // вывести открыть градусы на открытие servo.write(0); //ставим вал под 180(открытие сервы) delay(3000); //ждем 2 секунды servo.write(99); //ставим вал под 0 (закрытие закрытие) delay(3000); //ждем 2 секунды } else if (( millis() - prevmillis) > interval){ // если прошедшее время с начала запуска скетча > интервала prevmillis = millis(); // вновь обнуляем время счетчика servo.write(0); //ставим вал под 180(открытие сервы) Serial.println("Open"); // вывести открыть градусы на открытие delay(5000); //ждем 2 секунды servo.write(99); Serial.println("Close"); // вывести закрытие delay(5000);//ставим вал под 0 (закрытие закрытие) } }
Что к советам прислушался хорошо. Надо иметь уважение к тем, к кому обращаешься за помощью. Теперь можно и посмотреть. Хотя нет, не отфарматировано, читать глаза ломать. Сделай автоформат в IDE. И насчет орфографии. Не понятно что происходит и что должно происходить. Хорошо бы задачу описать понятнее.
для компьютера это, как уже верно сказали, без разницы, ибо и то и другое в машинном коде превращается в "1". Но в смысловом плане "HIGH" как раз более правильно, потому что в коде речь идет о состояниях пина, которые как раз описываются как HIGH и LOW, а не о логических значениях TRUE-FALSE
А у самого-то какие хоть мысли есть по этому поводу, кроме "Подправьте мой скетч..." ? Что было опробовано ? Какие изменения были сделаны в ходе экспериментов (если они были) ? Или сразу "Подправьте мой скетч" ? Тогда уж лучше в "Заказы...", там люди заинтересованы, сразу вцепятся похлеще кота некормленного из-за неработающего скетча...
Были закоментированы с кнопкой и без по отдельности работаю а все местете нехотят. Думаю может както через switch case.
я же не прошу сделайте . Тут же можно просто советом помочь мол я бы сделал так то , или лучше сделай то . Все лучше чем советы подправь читаемость кода , орфографию, или поставь True вместо High блин ну дурость какая то взрослые люди
А в чём проблема?Всё работает.Куда у Вас подключена кнопка?По умолчанию на пине (кнопка отжата) всегда HIGH поэтому сразу срабатывает по умолчанию.Её надо притянуть к GND.При разрыве с GND будет срабатывать.А вообще логика не понятна.Что и как должно работать?
Она и подключена к земле , может я чего то не понимаю, но вот схема подключения. Логика проста есть серва которая поворачивается на 2 положения (Открыты, закрыта). Действия открытие происходят в 2-ух случаях либо это нажатие кнопки либо выдержка по таймеру. Остальное время она находитья в положение закрыто
Правильнее сказать, что в нормальном положении с кнопки считывается "1", а при нажатии на этом пине "0". Другими словами - кнопка не "подключена к земле", а "подключается к земле". Дальше обдумываем рекомендации Airbus
Судя по схеме, в ненажатом состоянии считывается 0, а в нажатом 1. Программа написана жутко. Никакой однотипной логики, какие то разнообразные заплатки. Даже отформатировать не удосужились после моей просьбы. Подсказка только из любви к котам. Эта команда: prevmillis=millis(); выполняется после процедуры, а не до. В том виде как у вас программа только и делает что щелкает сервой и выжидает паузы делеем, на опрос кнопки времени не остается, т.к. 5000+5000=10000, то есть интервал. Все решается переносом одной строки на несколько строк вниз.
Как ? Поражают такие "вопрошатели"... Зададут вопрос, взбаламутят, а потом - "Спасибо всем..." Каков результат (путь) решения ? Другим "вопрошателям", возможно, не придется спрашивать, если не поленятся форум полистать...
Все просто , были проблемы с кнопкой или резистором , поменял их на другие и приспособление заработало. Не стал расписывать почему решение проблемы было решено , так как я понял, что тут несмотря на достижения гуру, гики и прочих магистров форума , попадаються 90 % флудистов . (Поправь мне вид скетча я читать не могу) - хотя другие читают, (поставь True а не HIGH) - да блин это булевая перменная тут либо 1 либо 0 какая разница HiGH или TRUE будет обозначенно в процессе. Но все равно спасибо , так просто осадок отстоявшегося говнеца в 3-ех литровой банки остался от "спецов"