#1 Re: Проекты » ищу помощь в организации связи на nRF24 » 2018-04-11 11:08:41

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
uint32_t message;  // Эта переменная для сбора обратного сообщения от приемника;
void setup (){
radio.begin();
radio.enableAckPayload();
radio.openWritingPipe(pipe);
}
void loop(){
int command = 555;  // Не суть - приемнику надо что-то передать, но это может быть и полезная информация;
radio.write( &command, sizeof(command) );  //Отправляем команду;
if ( radio.isAckPayloadAvailable() ) {  // Ждем получения...
      radio.read(&message,sizeof(message));  //... и имеем переменную message с числом 111 от приемника.
}
}

#2 Re: Проекты » ищу помощь в организации связи на nRF24 » 2018-04-11 11:07:07

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10); // Определяем рабочие ножки;
const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем адрес рабочей трубы;

void setup(){
radio.begin(); // Старт работы;
radio.enableAckPayload();  // Разрешение отправки нетипового ответа передатчику;
radio.openReadingPipe(1,pipe);  // Открываем трубу и
radio.startListening();  //начинаем слушать;
}
void loop (){

uint32_t message = 111;  //Вот какой потенциальной длины сообщение - uint32_t!
//туда можно затолкать значение температуры от датчика или еще что-то полезное.
radio.writeAckPayload( 1, &message, sizeof(message) ); // Грузим сообщение для автоотправки;
if ( radio.available() ) { //Просто читаем и очищаем буфер - при подтверждении приема
    int dataIn;  //передатчику приемник протолкнет ему в обратку наше сообщение;
    bool done = false;
    while (!done) {
        done = radio.read( &dataIn, sizeof(dataIn)); // Значение dataIn в данном случае
        //не важно. Но его можно использовать и как управляющую команду.
    }
}
}

#3 Re: Проекты » ищу помощь в организации связи на nRF24 » 2018-04-11 11:03:18

по библиотеке RF24 все последовательно и кропотливо делал по сообщениям ИгорьК вот с этого форума http://forum.amperka.ru/threads/nrf24l01-%D0%BF%D0%BE%D0%B1%D0%B5%D0%B6%D0%B4%D0%B0%D0%B5%D0%BC-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C.3205/

#4 Re: Проекты » ищу помощь в организации связи на nRF24 » 2018-04-11 10:57:46

по библиотеке Mirf полностью взял код отсюда https://uscr.ru/podklyuchenie-radio-modulya-nrf24-k-arduino/

#5 Проекты » ищу помощь в организации связи на nRF24 » 2018-04-10 23:33:14

ya_serega
відповідей: 5

Доброго времени суток !! )) ищу помощь в организации обмена информацией по радиоканалу nRF24 . задача : сервер ардуино  посылает команды на 4 клиента с подтверждением полученной информации . три дня бьюсь об монитор с форумами - не могу добиться никакой связи между двумя модулями nRF24.чувствую буду так же еще месяц страдать с тем же эффектом (( прошу помощи у тех кто работал с этими модулями и совсем не безвозмездно готов направить меня на путь истинный ! . с электроникой у меня проблем нет,с программированием тоже - проблема с поиском правильного пути решения этой проблемы и со временем ( не могу сутками пробовать разные варианты ,описываемые на форумах ) sad готов свои деньги поменять на ваш опыт работы с этими модулями )) в идеале хочу получить скетчи вида : сервер посылает команды на один из 4-х приемников с подтверждением от каждой посылки, а со стороны приемников - коды посылаемых команд . для заинтересовавшихся мне помочь - все вопросы и пожелания об ответной  материальной помощи за данный труд smile на мыло sermokik@gmail.com  или по телефону 0663940725 Спасибо всем откликнувшимся ))

#6 Re: Апаратні питання » arduino pro mini atmega128 5v 16 не видит передачу компа . » 2016-08-01 12:13:45

Спасибо ! я так понял мне нужно купить SPI программатор и попробовать залить bootloader посредством ардуино ide !?!? . закажу сейчас .. пусть неспеша ко мне едет - полезная штука ,наверняка в жизни пригодится ! ))

#7 Апаратні питання » arduino pro mini atmega128 5v 16 не видит передачу компа . » 2016-07-29 14:30:14

ya_serega
відповідей: 3

Здравствуйте . Приехали мне с али четыре платки arduino pro mini atmega128 5v 16 . при подключении питания  светится светодиод power  и поргает с частотой примерно 1 Гц led 13 . это в общем то наверное нормально , но ... точно в такт с этим светодиодом меняются уровни на RX и TX. т.е. пока светодиод горит на них 1 , пока не горит на них 0 !!.в качестве связи для прошивки  использую arduino nano  в которой раньше сгорел проц, я его выпаял и с CH340 взял RX TX питание и DTR. все платы которые до этого у меня были без проблем через этот переходничек уровней связывались с компом . но вот эти которые приехали совсем никак не реагируют на подключение !!! просто как менялся уровень RX TX с частотой 1 гц так и меняется , на смотря на передачу запроса с компа,изменение DTR .. Если на ардуине нажать и удерживать RESET то светодиод led 13 гаснет , на rx tx появляются нули . я мог бы подумать что глючную платку мне китайцы прислали .. но все четыре ведут себя полностью одинаково !! наверняка есть что-то чего я не знаю ((   посоветуйте что мне слелать и что это за прошивка заводская там залита ?? как мне залить свой скетч ???   Спасибо !! буду признателен за любые комментарии !!

#8 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-19 12:00:19

NoName пише:

vvr, всем стоять, работает программист ) ya_serega, осваивает Си  после асма
ну и начал соответственно с jnc и иных goto ) пусть развлекается, вам жалко? он просто обязан пройти все велосипеды big_smile


угу , не пинайте меня слишком wink я же говорил что пока просто пробую различные варианты решения в данном случае конкретной задачи ( придуманной мной просто так - для ознакомления с языком ) . пока использую разные функции и операторы для решения одной и той же задачи , плавно переходя к построению алгоритмов программы . пока не сильно понимаю как можно организовывать циклы без условных и безусловных переходов (( наподобие

call метка
..
..
..

метка
..
..
цикл с условным переходом ( btfss бит
                                           return  )
..
..
  goto метка

  и чем while отличается от вышеописанной конструкции - ведь внутри можно написать кучу вариантов выхода из этого цикла а после узнать почему именно прошел break и дальше по if ... else организовать реакцию ? .. хотя наверное есть более простое решение ))))

#9 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 22:46:33

Nefreemen пише:
ya_serega пише:

Считает? А что считает? Перестает считать когда кнопка нажата?

эта програмка считает количество импульсов ( если точнее переходов с "0" в "1")
изначально на 12 выводе земля ( вывод обьявлен входом и соединен резистором 10 ком с землей что бы избежать Z состояния)
при каждом появлении "1"  сount инкриминируется и я ничего не делая ожидаю "0" при его появлении начинаю всё сначала .. и так до бесконечности .



Иначе как понимать Ваше:
{
pinMode(12, INPUT); //объявляем пин как вход - изначально он притянут резистором к земле и при нажатии на кнопку там появляется +5в
Serial.begin(9600);

}

а этот вопрос я не понял - что я не правильно сделал в рамках моей задачи ?  .. но я написал что всё уже заработало и указал в чем была моя ошибка )))

Ну что здесь не понятно? Вы написали что на входе сигналом должна быть лог. един. Вашем примере при отсутствии 1 программа влетает по LOW в первый while и плюсует count до те пор пока не появится 1 ( условие станет false). И что у Вас работает? Мало того что просто ОЧЕНЬ НЕ ПРАВИЛЬНО логически. Банальная лень ставить {} (или нет? А так задумано?) Что вообще не понятно где заканчивается первый while и что происходит дальше. Если "любитель" циклов дальше будет так писать то далеко не уйдет  smile  цикл он видите ли по сути "круг"  lol .

где же здесь плюсуется по кругу ???

while ( digitalRead(12) == LOW ) ; //в цикле ничего не делаем пока не изменится состояние порта  с "0" на "1"

здесь просто ожидаем 1


  while ( digitalRead(12) == HIGH ) ; // ожидаем появление опять "0"

здесь просто ожидаем 0

  count = count + 1; //инкриминируем счетчик

здесь один раз плюсанули
  counttime = millis(); // запустили таймер
  while ( digitalRead(12) == LOW ) {   // ожидаем одно из условий выхода из цикла

здесь опять ожидаем 1 ))

а следующий плюс будет только при следующем импульсе !!!!! после данных трех циклов в count  всего лиш 1 будет ...

#10 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 22:30:16

Nefreemen пише:
ya_serega пише:
Nefreemen пише:

В рамках поставленных условий один путь ПРЕРЫВАНИЕ. Цикл while в loop() НЕ ПРАВИЛЬНО! А дальше как хотите, не хотите слышать флаг в руки и кило гвоздей в карман дабы ветром не сдуло  lol (шутка). Удачи.

да не зацикливаюсь я на циклах  tongue .... а может и зацикливаюсь ..(( просто я пытаюсь с асм перейти на что-то попроще для моих задач.. а это попроще оказывается и не намного проще ..)) а в каких случаях тогда корректней можно  использовать while ? .

#11 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 22:23:19

NoName пише:

спасибо ))) действительно самое правильное решение )) учить мат.часть )))

#12 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 22:17:24

Nefreemen пише:

ya_serega. Ваш последний скетч говорит о том что Вы не понимаете одну очень важную вещь.

Процедура  setup(){
здесь инициализация (назначение переменных)  и всякой другой фигни, выполняется она ОДИН РАЗ перед стартом ОСНОВНОГО тела программы
}
loop(){
Основное тело программы выполняется постоянно. Это ЦИКЛ по СУТИ  тот же while.
}


извините за дотошность - но вы подняли еще один мой вопрос - он как раз касается процедуры setup и назначения всяких переменных ))
вот он : если я переменные обьявляю до setup то всё нормально компилится а если в этом цикле то компилятор на них матюкается . что здесь я делаю не так ?
//int count = 0; // выделение памяти для переменной счетчика нажатий
//unsigned long counttime;

void setup() //процедура setup
{
 
  int count = 0; // выделение памяти для переменной счетчика нажатий
unsigned long counttime;

 
  pinMode(12, INPUT); //объявляем пин как вход
  Serial.begin(9600);
}


вот кусок того что я ваяю .. две строчки 
int count = 0; // выделение памяти для переменной счетчика нажатий
//unsigned long counttime;
я заремил над setup и перенес внутрь . до этого всё хорошо работало ,а если они  внутри- компилятор не видит эти переменные в void loop() . почему ?

#13 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 22:07:47

Nefreemen пише:

ya_serega. Ваш последний скетч говорит о том что Вы не понимаете одну очень важную вещь.

Процедура  setup(){
здесь инициализация (назначение переменных)  и всякой другой фигни, выполняется она ОДИН РАЗ перед стартом ОСНОВНОГО тела программы
}
loop(){
Основное тело программы выполняется постоянно. Это ЦИКЛ по СУТИ  тот же while.
}

Вашем примере получается:

loop(){
// здесь будут какие то
действия
Например Serial.print
прицепим еще один цикл
И войдем в него по условию
while( true){
ждем пока станет false при этом код который выше не выполняется, так и тот который ниже!
}
// здесь тоже команды

}


Поэтому даже если Вы не хотите использовать прерывание то правильно будет проверять условие

loop(){
if (digitalRead(12) == HIGH){
count++
}
Serial.print(count);
}
Обращаю еще раз Ваше внимание что при использовании цикла while() высока вероятность "повесить" программу. При использовании этого цикла желательно использовать сторожевой таймер. Так как событие которое ожидает этот цикл может и вовсе не произойти.


да. я прекрасно это понимаю , спасибо еще раз )) wile не самый надежный оператор . но ваш пример мне немного не подходит - там пока на порту 1 count  будет постоянно инкриминироваться пока не прийдет 0 . а мне нужно только 1 инкримент . наверное умнее в данном случае завести еще переменную в которой хранить предыдущее состояние пина и при его изменении с 0 в 1 делать один раз ++ ... но я же только учусь )) поэтому решил  попробовать как работают все операторы и начал  с самого простого )))) .. и еще в данной задаче если не будет на этом входе импульсов то и делать то больше программе нечего будет )))

#15 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 21:52:59

и я  по вашему совету попробовал сделать то же самое только через прерывание- получилось  )) спасибо )) но мне нечем больше занять процессор ,
да и не знаю куда потом я это буду использовать .. может на более важные вещи мне прерывания понадобятся ..) я
теперь пытаюсь понять как из этой програмки сделать отдельную циклическую функцию ..? если я ее описываю как int  val () то она проходит один раз и всё -  ((   void она крутится и работает ... а если я ее описываю как void val() то компилятор начинает матюкаться на скобки внутри этой функции ((( .. и как потом вызывать  эту функцию  void  () ?

вот до чего я доработал эту програмку и теперь не могу сделать из нее функцию что бы вызывать когда потребуется .
int count = 0; // выделение памяти для переменной счетчика нажатий
unsigned long counttime;

void setup() //процедура setup
{
  pinMode(12, INPUT); //объявляем пин как вход
  Serial.begin(9600);
}
void loop() //процедура loop
{ //начало
  while ( digitalRead(12) == LOW ) ; //в цикле ничего не делаем пока не изменится состояние порта  с "0" на "1"
  while ( digitalRead(12) == HIGH ) ; // ожидаем появление опять "0"
  count = count + 1; //инкриминируем счетчик
  counttime = millis(); // запустили таймер
  while ( digitalRead(12) == LOW ) {   // ожидаем одно из условий выхода из цикла
    if (millis() - counttime > 120)break; // либо появление "1" либо прошло времени больше чем 120 мс
  }
  if (millis() - counttime > 120) //если пауза было больше 120 то выводим счетчик в порт и обнуляем его
  { // Скобка начала условия if
    Serial.println( count);
    count = 0;
  }// если время не прошло то просто переходим в начало
} //конец loop

#16 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 21:29:30

Считает? А что считает? Перестает считать когда кнопка нажата?

эта програмка считает количество импульсов ( если точнее переходов с "0" в "1")
изначально на 12 выводе земля ( вывод обьявлен входом и соединен резистором 10 ком с землей что бы избежать Z состояния)
при каждом появлении "1"  сount инкриминируется и я ничего не делая ожидаю "0" при его появлении начинаю всё сначала .. и так до бесконечности .



Иначе как понимать Ваше:
{
pinMode(12, INPUT); //объявляем пин как вход - изначально он притянут резистором к земле и при нажатии на кнопку там появляется +5в
Serial.begin(9600);

}

а этот вопрос я не понял - что я не правильно сделал в рамках моей задачи ?  .. но я написал что всё уже заработало и указал в чем была моя ошибка )))

#17 Re: Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 15:50:04

Спасибо большое )) я просто до прерываний еще не добрался - буду учить ))
а мой код я понял почему не работает : я опрашиваю кнопку только один раз перед циклом while и всё . А в цикле не опрашиваю - поэтому с чего же ему прерываться ? вот он навсегда и крутится .
вот так я сделал ))

int count=0; // выделение памяти для переменной счетчика нажатий
int val=0;// выделение памяти для переменной состояния порта
void setup() //процедура setup
{
pinMode(12, INPUT); //объявляем пин как вход
Serial.begin(9600);

}
void loop() //процедура loop
{
while ( digitalRead(12)==LOW ) ; //в цикле ничего не делаем пока не изменится состояние порта  с "0" на "1"
count=count+1 ; //когда изменилось состояние инкриминируем счетчик
Serial.print( count); //выводим в порт
while ( digitalRead(12)==HIGH ) ; // ожидаем появление опять "0"

}

#18 Програмування Arduino » помогите новичку - счет количества нажатий кнопки » 2016-04-17 10:28:12

ya_serega
відповідей: 59

Здравствуйте .
Помогите пожалуйста понять основы. вторые сутки не получается считать количество нажатий кнопки .
или я не правильно понимаю операторы или не правильно работаю с переменными . или совсем ничего не понимаю wink




//#define p 12 // обьявляю константу для обращения к 12 пину - заремил

int count=0; // выделение памяти для переменной счетчика нажатий
int val=0;// выделение памяти для переменной состояния порта

void setup() //процедура setup

{

pinMode(12, INPUT); //объявляем пин как вход - изначально он притянут резистором к земле и при нажатии на кнопку там появляется +5в
Serial.begin(9600);


}

void loop() //процедура loop

{

val = digitalRead(12); //читаем данные с порта
while ( val==LOW ) count=count; //в цикле ничего не делаем пока не изменится состояние порта  с "0" на "1"
count=count++ ; //когда изменилось состояние инкриминируем счетчик нажатий кнопки
Serial.print( count); //выводим в порт
while ( val==HIGH ) count=count; // ожидаем появление опять "0"

}

буду благодарен за любую помощь в разьяснении ))))))спасибо !

Підвал форуму