Чтение состояния порта в переменную

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Мне интересна и постоянно ее просматриваю. Но помочь ничем не могу ((( 

Я думал дед или ещё кто из гуру подтянется в тему и подскажут, но, наверное, и они не могут...

Экспериментируй, это не останется зря. Даже отсутствия результата (или плохой результат) - это тоже результат. 

Думал «намедне» об твоём вопросе (ничего что на ты?), у меня такие мысли пришли в голову - а нет ли в используемых тобой библиотеках такой же переменной (flagTX) и не пересекаются ли они? Установил подобные библиотеки (я не знаю откуда у тебя они - я ставил из ide), прошёлся поиском. В моих есть подобные переменные, но именования другие у них. 

С другой стороны - странно, что только с этим флагом и работает (или и без него тоже? То есть если if-ы эти закомментировать - работает?) Может упустил я что. 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Я разные названия переменных пробовала, безрезультатно.

BOOM пишет:

С другой стороны - странно, что только с этим флагом и работает (или и без него тоже? То есть если if-ы эти закомментировать - работает?) Может упустил я что. 

Можно вообще убрать паузы и условия, все работает, отправка - прием

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Irinka пишет:

Вот неужели кроме меня тема никому не интересна?  XDDD

ну почему же неинтересна, очень даже

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
#include "Packet.h"
#define SIG_POWER RF24_PA_LOW
#define SIG_SPEED RF24_250KBPS
#define CH_NUM 0x60
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "Packet.h"
unsigned long TimeOtpr;
bool FlagOtpr=true;

RF24 radio(9, 10);
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};

void radioTX() {
  radio.begin();
  radio.setAutoAck(1);
  radio.setRetries(0, 15);
  radio.enableAckPayload(); 
  radio.setPayloadSize(32);
  radio.openWritingPipe(address[0]);
  radio.setChannel(CH_NUM);
  radio.setPALevel(SIG_POWER);
  radio.setDataRate(SIG_SPEED); 
  radio.powerUp();
  radio.stopListening();
}








void setup() {
  Serial.begin(9600);
radioTX();
}

void loop() {
 
if (FlagOtpr){
radio.powerUp();
delay(20);
FlagOtpr=false;  
AllThePorts ports;
ports.text = B11100111;
ports.adr = B11111101;
ports.setCRC();
bool ok=(radio.write((char *)&ports, sizeof(ports)));
TimeOtpr=millis();
Serial.println("Send");  
Serial.println(ok);  
}


if(!FlagOtpr && millis()-TimeOtpr >= 100) {
FlagOtpr=true;
}



}

Добаввив 44 и 45 строку, работает стабильнее, отправка происходит.

Почему то при отпрвке bool ok возвращает 0, а не 1

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А не может это быть багом программиста? Типа некоторые по олдскульному вместо 0 возвращают -1.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Ножку CSN с 9 пина подключила к +3,3 Вольт, передача работает.

Стабильно работает на скорости RF24_1MBPS

На скорости RF24_250KBPS с перебоями приема или отправки

radio.setAutoAck(1) должна быть установлена 1

Если radio.setAutoAck(0), то radio.write возвращает 1 (прием раз через раз)

Если radio.setAutoAck(1), то radio.write возвращает 0 (прием стабильный)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А с булевой переменной в условии поборола проблему?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

А с булевой переменной в условии поборола проблему?

не мешай девушке мужу ужин готовить )))

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

BOOM пишет:

А с булевой переменной в условии поборола проблему?

Пробовала)

 

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

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так ты не человек. Так бы сразу и сказала... Не бывает таких идеальных женщин. Хотя... Может проблемы в ардуино и не дают проблем в семье! Удачи тебе и мужу такому, стойкому, к женским железячкам (не резиновым, заметь!).... :-)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Irinka пишет:

BOOM пишет:

А с булевой переменной в условии поборола проблему?

Пробовала)

 

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

 

По гороскопу Водолей что ли?

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

ua6em пишет:

Irinka пишет:

BOOM пишет:

А с булевой переменной в условии поборола проблему?

Пробовала)

 

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

 

По гороскопу Водолей что ли?

 

Не так прочитала...ссори...

Поборола.

Козерог.

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Итоги:

Передатчик:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#define SIG_POWER RF24_PA_MAX
#define SIG_SPEED RF24_1MBPS
#define CH_NUM 0x60
#define ADRESS 0xAABBCCDD11LL
unsigned long TimeOtpr;
RF24 radio(9, 10);

uint32_t message=333;
uint32_t priem;
bool FlagSend=true;

void SettingTX(){
  radio.begin();
  delay(500);
  radio.setAutoAck(true);
  radio.setRetries(15, 15);
  radio.enableAckPayload();
  //radio.setPayloadSize(32);
  radio.enableDynamicPayloads();
 
  radio.openWritingPipe(ADRESS);
  radio.setChannel(CH_NUM);
  radio.setPALevel (SIG_POWER);
  radio.setDataRate (SIG_SPEED);
 
  radio.setCRCLength(RF24_CRC_16);
  //radio.setCRCLength(RF24_CRC_8);
  // radio.setCRCLength(RF24_CRC_DISABLED);

  //radio.powerUp();
  radio.stopListening();//Передатчик
  radio.powerUp();
}

void SEND(){
   radio.flush_tx();
  //radio.powerUp();
  //delay(20);
  bool ok=radio.write(&message, sizeof(message));
  if (ok){
    Serial.println("Send");
    }else{
    Serial.println("Error Send");
  }

  //if (!radio.available()) {
  if(radio.isAckPayloadAvailable()) {
    Serial.println("Ок");
  }

  TimeOtpr=millis();
}




void setup() {
  Serial.begin(9600);
  SettingTX();
}




void loop() {
 //if (!radio.available()) {

  if(radio.isAckPayloadAvailable()) {
  Serial.println("OkLoop");
  }

 
  if (FlagSend){
    FlagSend=false;
    SEND();
}

if(!FlagSend && millis()-TimeOtpr >= 1000) {
FlagSend=true;
}




}

 

Приёмник:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#define SIG_POWER RF24_PA_MAX
#define SIG_SPEED RF24_1MBPS
#define CH_NUM 0x60
#define ADRESS 0xAABBCCDD11LL

RF24 radio(9, 10);

uint32_t message;
uint32_t otvet=222;

void SettingRX(){
  radio.begin();
  delay(500);
  radio.setAutoAck(true);
  radio.setRetries(15, 15);
  radio.enableAckPayload();
// radio.setPayloadSize(32);
  radio.enableDynamicPayloads();
 
  radio.openReadingPipe(1,ADRESS);
  radio.setChannel(CH_NUM);
  radio.setPALevel (SIG_POWER);
  radio.setDataRate (SIG_SPEED);
 
  radio.setCRCLength(RF24_CRC_16);
  //radio.setCRCLength(RF24_CRC_8);
  // radio.setCRCLength(RF24_CRC_DISABLED);


  //radio.powerUp();
radio.startListening();
radio.powerUp();
}


void setup() {
Serial.begin(9600);
SettingRX();
}




void loop() {

if( radio.available()){
  radio.read(&message, sizeof(message) );
  Serial.print("Read:");
  Serial.print(message);
  Serial.println();
  radio.writeAckPayload(1,&otvet, sizeof(otvet));
  Serial.println("Otvet Ok");

}

}//loop

Приёмник сообщения получает, отправляет ответ, но передатчик ответ не получает.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Разобралась. Муж прогрел феном платы, всё заработало...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Вот это да! Точно говорят - «одна сатана» ))) 

Удачи в творчестве!)

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Один из модулей, который был приёмником, (после перемены местами с передачтком) отказывался отправлять данные.

Вот собственно так и узнала в чём вся суть проблемы.

kasun_69
Offline
Зарегистрирован: 21.02.2020

как пользоваться этой страницей?

вчера напечатал текст, скинул сюда, сегодня его нету

я впервые на форуме не знаю еще как с ней работать

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kasun_69 пишет:

как пользоваться этой страницей?

вчера напечатал текст, скинул сюда, сегодня его нету

я впервые на форуме не знаю еще как с ней работать

вы бы почитали о размещении программного кода, панель вверху, свыше 100 строк - сворачивать, отклонение от правил зачищается

Araris
Offline
Зарегистрирован: 09.11.2012

kasun_69, лучше создайте новую тему для Вашей проблемы.

Вам будет легче здесь освоиться, прочитав http://arduino.ru/forum/obshchii/pesochnitsa-dlya-vsekh-novichkov