два модуля NRF24L01 и состояние кнопки
- Войдите на сайт для отправки комментариев
Приветствую всех!
Нужно осуществить беспроводную связть между кнопкой и сетодиодом с помощью модулей NRF24L01.
Один модуль NRF24L01 подключен к плате Arduino Nano. К этой же плате подключена кнопка.
Второй модуль NRF24L01 подключен к плате Arduino Uno. К плате Uno подключен светодиод.
Надо сделать так,чтобы при нажатии на кнопку(которрая находится на Nano) включался светодиод (расположен на плате Uno), а при отжатии кнопки светодиод погас.
Код рабочий, НО! при открытии монитора порта, если я не трогаю кнопку, её состояние при не нажаии постоянно передается, мне надо сделать так,чтобы состояние передавалось только тогда, когда я нажму на кнопку. То есть как добавить ещё изменение состояния к этой кнопке? Подскажите пожалуйста, как изменить скетчи?
Передатчик:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" int val[1]; RF24 radio(7,8); const uint64_t pipe = 0xE8E8F0F0D6LL; int button = 2; void setup(void){ Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); } void loop(void){ if (digitalRead(button) == HIGH) { val[0] = 1; radio.write(val, 1); } if (digitalRead(button) == LOW){ val[0] = 0; radio.write(val, 1); } }
Приемник:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" int val[1]; RF24 radio(7,8); const uint64_t pipe = 0xE8E8F0F0D6LL; int LED = 3; void setup(void){ Serial.begin(9600); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); pinMode(LED, OUTPUT); } void loop(void){ if(radio.available()) { bool done = false; while(!done) { radio.read(val, 1); if(val[0] == 1){digitalWrite(LED, HIGH); Serial.println(val[0]); } else if(val[0] == 0) {digitalWrite(LED, LOW); } delay(10); Serial.println(val[0]); } } }
а зачем val обьявлен массивом?
Для начала, поставить на передатчике светодиод и зажигать/гасить его по состоянию кнопки. Это поможет понять, виновато направильное подключение кнопки или же сам передатчи чего-то не то гонит. Сделайте это и отпишитесь.
Кнопка-то хоть к земле притянута? Схему покдлючения давайте.
Для начала, поставить на передатчике светодиод и зажигать/гасить его по состоянию кнопки. Это поможет понять, виновато направильное подключение кнопки или же сам передатчи чего-то не то гонит. Сделайте это и отпишитесь.
Кнопка-то хоть к земле притянута? Схему покдлючения давайте.
С кнопкой и светодиодом все нормально, они работают как надо, но вот в мониторе порта когда нажимаю на кнопку постоянно считываются и выводятся значения с кнопки. (прокручивается всё вниз с автопрокруткой)А мне надо чтобы состояние кнопки один раз показалось в мониторе порта когда нажал, и один раз когда отпустил, ну или хотя бы один раз чтобы показалось значение при нажатии. То есть чтобы кнопка в ненажатом состоянии не посылала никаких значений
а зачем val обьявлен массивом?
честно говоря, я впервые сталкиваюсь с таким радиомодулем, и не знаю что большинство функций значат. Мне нужно сделать чтобы кнопка управляла светодоидом на расстоянии с помощью этих модулей, скетч взял с интернета.
Так она никуду нчего не посылает - это Вы сами постоянно считываете и что-то посылаете.
Сохраняйте последнее считанное значение кнопки в переменной. Сравнивайте только прочитанное состояние с сохранённым и посылайте по радио только тогда, когда новое не равно последнему считанному.
Так она никуду нчего не посылает - это Вы сами постоянно считываете и что-то посылаете.
Сохраняйте последнее считанное значение кнопки в переменной. Сравнивайте только прочитанное состояние с сохранённым и посылайте по радио только тогда, когда новое не равно последнему считанному.
а что для этого надо добавить в коде? не понимаю как это делается(
Простите, Вы прогрммировать не умеете от слова "вообще"? Да?
Простите, Вы прогрммировать не умеете от слова "вообще"? Да?
да, учусь только)
Ну, Вы знаете, тогда я вряд ли смогу Вам помочь. Я не пишу кодов, я только подталкиваю в нужную сторону. А Вам надо именно написать, толка Вас пока бесполезно. Это не моё. Надеюсь, кто-нибудь другой поможет. Удачи!
Ну, Вы знаете, тогда я вряд ли смогу Вам помочь. Я не пишу кодов, я только подталкиваю в нужную сторону. А Вам надо именно написать, толка Вас пока бесполезно. Это не моё. Надеюсь, кто-нибудь другой поможет. Удачи!
Спасибо, буду думать
kentforth, открою Вам страшную тайну: контроллер должен делать то же самое, что делали бы Вы на его месте.
То есть представьте что:
1. Перед Вами светодиод.
2. Если светодод изменил состояние, Вы должны послать сообщение об этом, иначе - ничего не делать.
3. Подробно распишите по-русски, как бы Вы стали это делать.
4. Переведите с русского на С - это и будет готовым скетчем.
kentforth, открою Вам страшную тайну: контроллер должен делать то же самое, что делали бы Вы на его месте.
То есть представьте что:
1. Перед Вами светодиод.
2. Если светодод изменил состояние, Вы должны послать сообщение об этом, иначе - ничего не делать.
3. Подробно распишите по-русски, как бы Вы стали это делать.
4. Переведите с русского на С - это и будет готовым скетчем.
в данном скетче светодиод отрабатывает как надо, то есть загорается на приемнике при нажатии на кнопку, которая расположена на передатчике. Но вот в компьютер при нажатии кнопки постоянно посылаются сообщения о том,что кнопка НЕ НАЖАТА. Для меня это неприемлемо, потому,что я хочу туда добавить ещё посыл миди сооьшений, и если постоянно будудут посылатся сообщения о том,что кнопка не нажата, хотя я даже не трогую кнопку, то это будет засорять буфер и устройство будет тормозить, поэтмоу и хочу додавить созранение текушего состояния кнопки. Но! когда я добваляю сохранение состояние кнопки, то светодиод уже не работает как надо(при нажатии на кнопку загорается и тут же гаснет) Не знаю как именно добавить это состояние , и где вооьбше его нужно добавлять в примнике или передачтике,чтобы все работало как надо.
Не знаю как именно добавить это состояние , и где вооьбше его нужно добавлять в примнике или передачтике,чтобы все работало как надо.
Может работать и так, и так. Делайте так, как ВАМ надо. Никто лучше Вас этого не знает.
Сделал скетч с двумя светодиодами. Кнопка, первый светодиод и передатчик подключены на Arduino Nano. Второй светодиод и приемник подключены на Arduino Uno. При нажатии на кнопку, светодиод,коотрый подключен к передатчику отрабаывает отлично(при нажатии на кнопку загорается, при отпускании кнопки-гаснет) , а вот второй светодиод(подключеный к приемнику) при нажатии на кнопку загорается с сразу гаснет, то есть загорается совсем на доли секунды. Как сделать чтобы и второй светодиод отрабатывал также хорошо как и первый?
Передатчик:
Приемник:
kentforth, в передатчике Вы запиминаете состояние, чтобы лишний раз не отправлять команду, а в приемнике не делаете этого.
kentforth, в передатчике Вы запиминаете состояние, чтобы лишний раз не отправлять команду, а в приемнике не делаете этого.
Добавил состояния в скетче с приемником, но теперь светодиод ни приемнике вообще не зажигается. Где возможна ошибка?
Передатчик:
Приемник:
kentforth, у Вас логическая ошибка - Вы пытаетеся управлять светодиодом непосредственно от сигнала. Но сигнал - это однократное действие, а горение светодиода - процесс продолжительный. Вам нужно развязать прием сигнала и управление светодиодом: пусть приемник только меняет состояние, а уже состояние управляет светодиодом.
...,а уже состояние управляет kentforth.
О_О
kentforth, у Вас логическая ошибка - Вы пытаетеся управлять светодиодом непосредственно от сигнала. Но сигнал - это однократное действие, а горение светодиода - процесс продолжительный. Вам нужно развязать прием сигнала и управление светодиодом: пусть приемник только меняет состояние, а уже состояние управляет светодиодом.
а как передавать это состояние на приемник,чтобы оно управляло светодиодом? какую функцию надо прописать?
kentforth, у Вас проблемы не с функцией, а с логикой.
Распишите подробно по-русски, как должны между собой взаимодействовать передатчи, приемник и светодиод.
kentforth, у Вас проблемы не с функцией, а с логикой.
Распишите подробно по-русски, как должны между собой взаимодействовать передатчи, приемник и светодиод.
Плата Arduino Nano, к ней подключен передатчик NRF24L01. На этой плате имеется кнопка и светодиод. На плате Arduino Uno имеется приемник NRF24L01 и cветодоид.
При нажатии на кнопку (которая подключена вместе с передатчиком к Nano) должен загораться светодиод на Nano, и также загораться светодиод на Uno, при отжатии кнопки, оба светодиода тухнут.
Распишите подробно по-русски, как должны между собой взаимодействовать передатчи, приемник и светодиод.
а, мне, пожалуйста, панемецки. \о О_О
а, мне, пожалуйста, панемецки. \о О_О
Да, не вопрос! Geh dich ficken!
kentforth, у Вас проблемы не с функцией, а с логикой.
Распишите подробно по-русски, как должны между собой взаимодействовать передатчи, приемник и светодиод.
Плата Arduino Nano, к ней подключен передатчик NRF24L01. На этой плате имеется кнопка и светодиод. На плате Arduino Uno имеется приемник NRF24L01 и cветодоид.
При нажатии на кнопку (которая подключена вместе с передатчиком к Nano) должен загораться светодиод на Nano, и также загораться светодиод на Uno, при отжатии кнопки, оба светодиода тухнут.
Это все хорошо, но Вы описали не алгоритм работы, а желаемый результат. И, кстати, вообще ничего не написали про передатчики.
Итак, у нас есть цепочка, состоящая из 4-х приборов, которые взаимодействуют строго односторонне:
кнопка -> передатчик -> приемник -> светодиод
Т.к. взаимодействие одностороннее, определяет все последующие действия - кнопка.
Кнопка имеет два состояния: "нажата" и "отпущена", и, кроме того, возможны два события: "нажатие" т.е. переход из состояния "отпущена" в состояние "нажата" и наоборот = "отпускание", когдла кнопка переходит из состояния "нажата" в состояние "отпущена".
Итого, 4 варианта (совпадение числа устройств с числом состояний чисто случайно, пусть оно Вас не смущает):
1. Кнопка "нажата".
2. Кнопка "отпущена".
3. Переход из состояния "отпущена" в состояние "нажата".
4. Переход из состояния "нажата" в состояние "отпущена".
Вот и распишите для каждого из 4-х вариантов предполагаемые действия последовательно в цепочке для каждого из 4-х устройств.
Это все хорошо, но Вы описали не алгоритм работы, а желаемый результат. И, кстати, вообще ничего не написали про передатчики.
Итак, у нас есть цепочка, состоящая из 4-х приборов, которые взаимодействуют строго односторонне:
кнопка -> передатчик -> приемник -> светодиод
Т.к. взаимодействие одностороннее, определяет все последующие действия - кнопка.
Кнопка имеет два состояния: "нажата" и "отпущена", и, кроме того, возможны два события: "нажатие" т.е. переход из состояния "отпущена" в состояние "нажата" и наоборот = "отпускание", когдла кнопка переходит из состояния "нажата" в состояние "отпущена".
Итого, 4 варианта (совпадение числа устройств с числом состояний чисто случайно, пусть оно Вас не смущает):
1. Кнопка "нажата".
2. Кнопка "отпущена".
3. Переход из состояния "отпущена" в состояние "нажата".
4. Переход из состояния "нажата" в состояние "отпущена".
Вот и распишите для каждого из 4-х вариантов предполагаемые действия последовательно в цепочке для каждого из 4-х устройств.
Не понимаю как прописываются эти переходы. И где вообще их надо прописывать, в скетче передатчика или в скетче приемника?
kentforth, до скетчей еще далеко. Не бросайтесь сразу программировать, Вам нужно сначала понять, что должны делать как передатчик, так и приемник, и пока с этим не будет полной ясности, о скетчах даже не думайте.
Вам нужно сперва понять, как должны реагировать на каждый из четырех описанных мной вариантов:
- сначала передатчик (т.е. должен ли он в этом случае что-то делать, если должен - что именно),
- потом что должен делать приемник в ответ на сигнал с передатчика (разумеется, сделать что-то он может только в том случае, если у передатчика на этот случай запланирована какая-то реакция).
3. Переход из состояния "отпущена" в состояние "нажата".
4. Переход из состояния "нажата" в состояние "отпущена".
переход Суворова через Альпы в состояние "а, нахуа?".
kentforth, до скетчей еще далеко. Не бросайтесь сразу программировать, Вам нужно сначала понять, что должны делать как передатчик, так и приемник, и пока с этим не будет полной ясности, о скетчах даже не думайте.
Вам нужно сперва понять, как должны реагировать на каждый из четырех описанных мной вариантов:
- сначала передатчик (т.е. должен ли он в этом случае что-то делать, если должен - что именно),
- потом что должен делать приемник в ответ на сигнал с передатчика (разумеется, сделать что-то он может только в том случае, если у передатчика на этот случай запланирована какая-то реакция).
так я за этим на форум и пришёл, в интернете проекты с кнопкой есть толкьо без сохранения кнопки, с этим все просто. А вот чтобы ещё и состояние кнопки на приемник тут похоже свои хитрости. Думал здесь найду ответ на свой вопрос
Ведь andriano задал Вам два простых вопроса, а Вы вместо того, чтобы нормальными русскими словами ответить (тогда бы он сказал. что дальше делать), начинаете плакаться. что "думал найду, а не нашёл". Как же Вы найдёте, если игнорируете то, что Вам пишут?
Если Вы надеялись на то, что кто-то напишет готовый кусок кода, то напрасно, я Вам уже говорил. А вот помочь написать самому тут могут, но для этого надо делать что говорят, а не плакаться.
Отвечайте на вопросы andriano словами, чётко и подробно.
Ведь andriano задал Вам два простых вопроса, а Вы вместо того, чтобы нормальными русскими словами ответить (тогда бы он сказал. что дальше делать), начинаете плакаться. что "думал найду, а не нашёл". Как же Вы найдёте, если игнорируете то, что Вам пишут?
Если Вы надеялись на то, что кто-то напишет готовый кусок кода, то напрасно, я Вам уже говорил. А вот помочь написать самому тут могут, но для этого надо делать что говорят, а не плакаться.
Отвечайте на вопросы andriano словами, чётко и подробно.
Я в коде как раз и прописал состояния кнопки и в передатчике они отрабатывают как надо, а вот чтобы эти состояния передать на приемник, я не знаю как сделать, ибо инфы с таким проектом не нашёл в интернете.
есть ли какая-то специальная функция для этой библиотеки NRF24lL01, которая передает именно стостояния кнопок/потенциометров на приемник?
kentforth, еще раз повторяю: у Вас проблема не в коде и не в библиотеках, а втом, что Вы не понимаете, как это вообще должно работать. И без этого понимания Вы работающий как надо код никогда не напишете. Ну не то чтобы совсем никогда, но по времени примерно столько же, чтобы обезьяне за пишущей машинкой, случайно ударяя по клавишам, напечатать "Войну и мир". Поверьте, гораздо быстрее научиться программировать, чем, надеясь на удачу, без понимания переставлять местами операторы языка, пока не получится нужная программа.
А чтобы разобраться, нужно это все сначала словами сформулировать.
Что именно Вам нужно - решайте сами, но на этом форуме есть только два варианта:
1. Вы обращаетесь в раздел "Ищу исполнителя", где Вам за денежку реализуют любые Ваши хотелки.
2. Вы учитесь программировать, а присутствующие здесь участники форума помогают Вам в этом. Обратите внимание: не помогают написать Вашу программу, а помогают научиться программировать, чтобы писать любые программы.
kentforth, еще раз повторяю: у Вас проблема не в коде и не в библиотеках, а втом, что Вы не понимаете, как это вообще должно работать. И без этого понимания Вы работающий как надо код никогда не напишете. Ну не то чтобы совсем никогда, но по времени примерно столько же, чтобы обезьяне за пишущей машинкой, случайно ударяя по клавишам, напечатать "Войну и мир". Поверьте, гораздо быстрее научиться программировать, чем, надеясь на удачу, без понимания переставлять местами операторы языка, пока не получится нужная программа.
А чтобы разобраться, нужно это все сначала словами сформулировать.
Что именно Вам нужно - решайте сами, но на этом форуме есть только два варианта:
1. Вы обращаетесь в раздел "Ищу исполнителя", где Вам за денежку реализуют любые Ваши хотелки.
2. Вы учитесь программировать, а присутствующие здесь участники форума помогают Вам в этом. Обратите внимание: не помогают написать Вашу программу, а помогают научиться программировать, чтобы писать любые программы.
Понял! благодарю всех за ответы!