Официальный сайт компании Arduino по адресу arduino.cc
Нужна помощь со скетчем (Реле и кнопки )
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 02/04/2016 - 11:20
Привет ребята, нужна ваша помощь.
Удалось запустить скеч для MPU6050. Он передает данные осей X и Y, в монитор порта. К нему, нужно добавить функцыи, с кнопками и рэле. Но чтобы не путаца решил попробовать пока отдельно написать эти функцыи.
Но чтото у меня пока не очень получается. Помогите решить эту задачу.
Итак задача...
Имеются:
КНОПКА1 //кнопка1 обычная тактовая без фиксацый
КНОПКА2 //кнопка2 обычная тактовая без фиксацый
RELAY1 //реле инверсное
RELAY2 //реле инверсное
BUZZER //пищалка
По умолчанию RELAY1 и RELAY2 отключены.
При нажатии на тактовую (кнопку1):
Включить (RELAY1)
Запомнить покозатели (kalAngleX)
Запомнить показатели (kalAngleY)
При изменении показателей (kalAngleX) и (kalAngleY), больше или меньше 5 градусов:
Включить (RELAY2) //на 60сек
Включить (BUZZER) //на 60сек
Через 60сек выключить:
Выключить (РЕЛЕ2)
Выключить (BUZZER)
После начать цыкл, как после нажатия (кнопки1)
Но есле нажать (кнопку2) то:
Выключить (RELAY1)
Выключить (RELAY2) есле включено
Выключить (BUZZER) если включён.
Пробовал написать начало. Вот что получилось:
#define BUZZER_PIN 6; // 6 пин Пищалки #define RELAY_PIN 4; //4 пин РЕЛЕ1 #define RELAY_PIN2 5; // 5 пин РЕЛЕ2 #define BUTTON_PIN1 2; // пин для Кнопка1 #define BUTTON_PIN2 3; // пин для Кнопка2 #define BEEP_INTERVAL 1000 // частота включения зуммера, мсек #define BUZZER_TIMEOUT 30UL // длительность звучания зуммера, сек #define RELAY_TIMEOUT2 30UL // длительнасть включения Реле2, сек boolean relayEnable = false; // флаг Реле1 boolean relay2Enable = false; // флаг Реле2 boolean buzzerEnable = false; // флаг Пищалки void setup() { Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); // Реле1 pinMode(RELAY_PIN2, OUTPUT); // Реле2 pinMode(BUTTON_PIN1, INPUT); // Кнопка1 pinMode(BUTTON_PIN2, INPUT); // Кнопка2 pinMode(BUZZER_PIN, OUTPUT); // Пищалка } void loop() { }
Как запомнить показатели (kalAngleX) и (kalAngleY) после нажатия кнопки?
Как запомнить показатели (kalAngleX) и (kalAngleY) после нажатия кнопки?
Элементарно:
тоесть double означает копировать?
double означает двойной, двуспальный, двукратный, сдвоенный...
странно, в этой теме, связанной с кнопками Клапауций ничего не написал про Титановый велосипед для тактильной кнопки... ладно, нужно исправить это недоразумение. http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki по этой ссылке ты узнаешь как прикрутить кнопки. Также поизучай типы данных double это тоже самое что и float - тип данных для хранения чисел с плавающей запятой. Еще нужно blink without delay. смысл в том что при наступлении тех условий что тебе нужно (температура там больше или меньше либо кнопка нажата) ты сохраняешь время в какой нибудь переменой (для времени лучше unsigned long), а потом эту переменную сравниваешь с текущем значением millis() и смотришь, прошли ли нужные 60 сек или нет. Кстати динамик просто так пищать не будет, тут нужна функция tone() или самодельная какая нибудь...
странно, в этой теме, связанной с кнопками Клапауций ничего не написал про Титановый велосипед для тактильной кнопки...
...тактовой кнопки.
да - странно, что я на входе в форум всех новичков не луплю дубиной по голове не сбрасываю в подвал с титановыми велосипедами.
да - странно, что я на входе в форум всех новичков не луплю дубиной по голове не сбрасываю в подвал с титановыми велосипедами.
Пусть сперва сами помучаются)
Ребята, дубиной и велосипедом по голове ненадо, уж лучше я помучаюсь)))
Но вы всётаки подсказывайте, ведь в диалоге с преподователями предмет можно изучить быстрей :)
Но вы всётаки подсказывайте, ведь в диалоге с преподователями предмет можно изучить быстрей :)
Ну вектор полета тебе был задан, если что непонятно спрашивай, пиши код, выкладывай куски или весь. где ошибка есть какая то тебе подскажут, но писать код за тебя никто не станет...
Хорошо, я полетел )
Очень понравился вопрос про double. В связи с чем - история:
ПРЕАМБУЛА
Как-то давно, мой одноклассник, работающий в банке, вместе со своим начальником съездил в командировку в город Лондон, тот самый который "из зе кэпитал ов...".
Я - говорю по аглицки бегло, читаю - раза в два медленнее, чем по русски, и считаю, что знаю не очень и надо бы получше,
одноклассник мой, основываясь на том, что в чате Рейтерс-диллинга его все понимали - считал, что знает достаточно,
но его начальник - это песня - Мутко мог быть для него гуру, но считал он, что говорит свободно!
ИСТОРИЯ
После поездки начальник спрашивает моего одноклассника: Все, мол, понятно, английский - простой язык, только ты объясни мне одно слово: вот англичане все время "get" говорят, что этот "get" значит?
---------------
Мне уже 46 лет, я уже знаю не только аглицкий, но внятно ответить на вопрос - не могу! ;)
Вот и про double и оператор присваивания - точно также. Я могу представить на форуме человека, которые не уверенно пишет на С, просто потому, что он старый и писал всю жизнь базы на фокспро или коболе. Даже страшный PL-1, и тот не оставляет на мозге неустранимых рубцов.
Но никак не могу понять человека, который вообще не знает даже основ программирования, но купившего ардуино. Зачем? Запакуйте его, если сохранилась упаковка и отправьте обратно продавцу, возможно вернут деньги.
Такой человек правда считает, что можно научиться программированию на форуме?
Керниган, Ричи, Язык программирования С. Там, в зависимости от издания около 120 страниц. Хотя бы первую треть прочитайте, а потом приходите на форум.
Но никак не могу понять человека, который вообще не знает даже основ програмирования, но купившего ардуино. Зачем? Запакуйте его, если сохранилась упаковка и отправьте обратно продавцу, возможно вернут деньги.
а, если купить программируемый калькулятор, то дуино после него покажется раем.
Что бы не было неуместных обидок:
На Ваш вопрос просто нельзя ответить коротко и понятно.
Если Вы спрашиваете, "что тако double" значит Вы совсем ничего не знаете.
Коротко я отвечу - но Вам нужен курс программирования минимум на пару месяцев, если интенсивно. Вы просто ничего не поймете, но Ваше право, читайте:
Результат предыдущего измерения хранить в специальной переменной. Причем ни разу не double, так как все измерения в ардуино не точнее 10 бит.
Завести переменную для состояния со значениями:
1. начальное состояние;
2. состояние отслеживания (после нажатия кн1 и после обработко отклонений)
3. обнаружено отклонение, пищим баззером и ждем 60 сек.
(эти 60 секунд отслеживать в специальной переменной "время после обнаружения отклонения")
========
Вы ведь ничего не поняли, так? Поэтому читайте Кернигана и Ричи и возвращайтесь поумнев немного.
Вы ведь ничего не поняли, так? Поэтому читайте Кернигана и Ричи и возвращайтесь поумнев немного.
или купите
козупрограммируемый калькулятор.Ребят, я честно прочитал первых 3-4 страницы пособие по СИ Керна и Ричи к ВВЕДЕНИЮ и СОДЕРЖАНИЮ не относится ))
Да, конечно я согласен это совсем не густо. Я там только самые азы прочел и то не все. Кое что подчерпнул в роликах ютуба. Там когда пишут, и тут же объясняют, то очень легко и быстро понять что к чему. Но всё дело во времени, у меня просто нет столько времени, чтобы читать книги, а роликов в ютубе понятных для новичков, к сожалению очень мало.
Вот поэтому и пишу на форум. Здесь спросишь и грамотные люди сразу подталкивают в нужном направлении, что читать и как писать. И я за это им очень благодарен. Жил бы рядом купил бы пиво с рыбкой ;)
А если пытаться одному, и всё по книгам то я свой скеч наверное следующей зимой закончу. Ито это в лучшем случае. ))
Обид не каких нет. За критику даже спасибо, строго но зато честно и справедливо. Буду знать на что расчитывать с моим богажом... ))
Ну что я могу сказать, да буду читать книгу. Но думаю изучать её когда пишешь скеч и общаешся с людьми будет проще и быстрей. Надеюсь вы непротив того что я буду продолжать общатся с вами и изучать СИ поролельно???
Ну double я впихнул не просто так, хоть и для ардуины что double, что float.
Так как ТС ни скетча, ни библиотеки не то что не привел, а даже и ссылок на них не дал,то я не поленился и погуглил сам. И нагуглил я, что переменная kalAngleX имеет тип double. А поскольку "по квитанции корова рыжая одна! Брали мы ее одну по квитанции! Сдавать будем одну", то и временную переменную я тоже сделал такого же типа "чтоб не нарушать отчетности!"
Да действительно, это я неподумав сделал. Просто хотел сначало с кнопками и переменными разобратся, чтобы не запутатся. Но теперь понемаю что зря.. )
Вот скеч, естественно писал не я, просто нашол на просторах интернета. С ним удалось получать данные осей X и Y в монтеторе компорта. Буквально выгледит так
X:180 Y:180
Ребят посоветуйте какое издание Кернигана и Ричи лучше? У меня 3-е издание V0.1
Ребят посоветуйте какое издание Кернигана и Ричи лучше? У меня 3-е издание V0.1
да, никакое, пока не настроишься на волну - читай пока это Программирование
Еще выше хотел попросить: пропускайте свой текст через проверку орфографии. Грамма-наци тут нет, форум технический и мистайпинг бывает у всех. Но мистайпинг - одно, а АшиПки - немного режут глаза.
Ясно, тут нет В.Г. Белинского, всего такого неистового, но проявите немного уважения.
сначалО
понЕмаю
монЕторе
выглЕдит
------------------
Я - зае...лся, прошу прощения!
да, никакое, пока не настроишься на волну - читай пока это Программирование
Не могу согласиться, брат.
Читать описание методов и функций библиотеки wiring нет смысла, пока непонятно, что такое переменная, инструкция, оператор, параметр, значение и указатель, поток управления, прерывание.
Я уже даже не упоминаю про классы, методы, наследование, конструкторы и перегрузку, а то ведь крыша может поехать.
Ребят посоветуйте какое издание Кернигана и Ричи лучше? У меня 3-е издание V0.1
Любое. И попроси друга поставить Linux на виртуалку, не забыв поставить компилятор.
В Линухе он ТОЧНО такой, как описан у Кернигана и Ричи. Даже откомпилированный файл называется a.out, как в книжке. Только он вызывается командой gcc, а не cc. Это единственное различие. Вот прямо по книжке, решая задачки к каждой главе, вот так и двигайся.
В среде Ардуино используется тот же самый компилятор gcc.
Все, без исключения все, люди моего поколения, кто пишет на С - начинали с этой книжки. Молодежь, иногда, начинает со всяких "верхних" языков, типа C#, Python, JS, php.
Но мы с гневом отвергает такой подход! ;)
Но мы с гневом отвергает такой подход! ;)
у кого не было программируемого калькулятора, тот не умеет гневаться.
у кого не было программируемого калькулятора, тот не умеет гневаться.
Каюсь, не было. Но был БК-0010, 64К, с клавой от ХТ, программы с магнитофона, о эти божественные звуки!
Я лабу по военной кафедре на нем делал. Принтера не было - переписывал результаты от руки.
Ребят, ну как, косяков много? ))
Я хоть суть велосипеда понял? Или не очень ))
Нужно ли писать в начале флаги состояния реле? (реле инверсное)
У меня когда-то был микроша я кажется догадываюсь о каких звуках идёт речь )))
Буззер и включение реле2 пока не трогал.
Это как позвонить друзьям и сказать "Друганы, я пиво купил! Приходите". Друганы пришли, а пива и нету! Могут ведь и по шапке надавать.
Так и тут, ненужный флаг (типа отвечающий за состояния реле) зачем-то взвел, но реле не включил.
это лишнее:
07
boolean relay1Enable =
false
;
//флаг состояния реле1
08
boolean relay2Enable =
false
;
//флаг состояния реле2
реле включается digitalWrite(pin, value) http://arduino.ru/Reference/DigitalWrite
это не нужно - это делает класс:
12
pinMode(BUTTON_01, INPUT);
13
pinMode(BUTTON_02, INPUT);
Исправил :)
Но что-то ошибок целую кучу показывает, после компиляции. Не пойму вроде ничего не пропустил...
RELEY_01
RELAY_01
*включи подробные логи в настройках ИДЕ
и, не понятно, зачем выключать реле 2 и буззер, если они у тебя никогда не включаются?
блин. занимаешься убийством времени своего и моего - что за сто чертей за тобой гонится?
что это за нах? Klass_Velosiped_Knopki.ino ?
если всё должно быть так #186
и должно быть так:
Ёмаё засада ( ; ) не обратил внемание :(
Спасибо.
Ошибки исчезли... Буду думать как привинтить включение на реле2 и бузер
Ребят, голова уже закипает)))
Как правильно написать такое выражение?? Суть в том чтобы узнать разницу между двумя числами и результат сравнить с числом 5.
if (a - b == 5) {// что-то сделать если разница равна 5}
if (a - b < 5) {// что-то сделать если разница меньше 5}
if (a - b > 5) {// что-то сделать если разница больше 5}
if (a - b <= 5) {// что-то сделать если разница меньше или равно 5}
if (a - b >= 5) {// что-то сделать если разница больше или равно 5}
Круть ! вот это я и искал !
Спасибо!!
Круть ! вот это я и искал !
Спасибо!!
поэтому и рекомендовал бросить нафиг все учебники по C++ и, сначала, прочитать основы
Ребят посоветуйте какое издание Кернигана и Ричи лучше? У меня 3-е издание V0.1
да, никакое, пока не настроишься на волну - читай пока это Программирование
Как правильно написать такое выражение?? Суть в том чтобы узнать разницу между двумя числами и результат сравнить с числом 5.
Вот объясни пожалуйста. Ты что-то спрашиваешь, тебе отвечают, через некоторое время ты снова спрашиваешь об этом же. Что не так и как это называется?
Я еще в сообщении #7 привел пример со сравнением разницы между двумя значениями. Кому я это написал?
Ну прям на парня набросились... Вы его просто не понимаете потому что слишком умные...
Как правильно написать такое выражение?? Суть в том чтобы узнать разницу между двумя числами и результат сравнить с числом 5.
Вот объясни пожалуйста. Ты что-то спрашиваешь, тебе отвечают, через некоторое время ты снова спрашиваешь об этом же. Что не так и как это называется?
Я еще в сообщении #7 привел пример со сравнением разницы между двумя значениями. Кому я это написал?
Друг, я сразу не въехал ))
То есть у тебя в примере abs это и есть разность этих двух переменных, и за скобками ты её сравниваешь?
Извиняй я просто не знал что так можно и сразу не понял что такое abs...
if
(abs(Chislo1 - kalAngleX) > 5.0)
Извиняй я просто не знал что так можно и сразу не понял что такое abs...
if
(abs(Chislo1 - kalAngleX) > 5.0)
блин. ну в который раз тебя посылать в Программирование ?
http://arduino.ru/Reference/Abs - у тебя же там походу и отрицательные значения.
abs - это модуль числа. Я так понял, что по условиям задания, текущее значение может отклоняться от предыдущего как в большую, так и меньшую сторону.
Чтобы узнать, на сколько оно отклонилось, то из одного значения вычитается другое. Если просто вычесть, то результат может быть и положительным, и отрицательным (в зависимости, что больше).
Чтобы не делать два сравнения (первое на случай, если текущее значение больше предыдущего, а второе наоборот, если предыдущее больше текущего), то к разнице применяется модуль и уже он (будучи всегда положительным) сравнивается с предельным значением.
ну да получается кажется от -360 до 360...
У меня уже процессор закипает, походу пень1 ))) чтото я запутался... Что значит (Возвращает модуль числа.)
Тоесть если я напишу так :
то получается что два раза, тоесть вот так делать ненадо, и этим самым можно сократить код?
У меня уже процессор закипает, походу пень1 ))) чтото я запутался... Что значит (Возвращает модуль числа.)
Тоесть если я напишу так :
то получается что два раза, тоесть вот так делать ненадо, и этим самым можно сократить код?
на этот вопрос ты должен ответить самостоятельно - потому, что если тебе без разницы, что делать если что-то отклонилось в сторону, то модуль, а если отклонилось в минус, то крутить серву в одну сторону для возвращения в ноль, а если отклонилось в плюс, то в другую сторону, что бы вернуться. как пример, чем ты там занят с гироскопом.
Ааа теперь кажется понял...
Но мне получается вродебы незачем возврощать число в исходное. Нужно будет только чтобы при нажатии кнопки2 оно кагбы обнулялось и не сравнивалось. Как до ножатия кнопки1. Тоесть чтобы обратно стало не активным чтоли.
Ребят а как обьяснить переменной kalXold что она должна обнулится?
как то так?
kalXold = 0;
Ребят а как обьяснить переменной kalXold что она должна обнулится?
как то так?
kalXold = 0;
налить текилы, рассказать смешной анекдот - и, она твоя.