Не приходит значение от передатчика на приемник

Nubas_
Offline
Зарегистрирован: 19.07.2021

В чем суть этих скетчей. На приемнике есть кнопка. Вот если нажать на кнопку, то отправляется 1 на передатчик, а на передатчике если отправлено 1(т.е. нажата кнопка), то обратно на приемник отправляется 1.

Однако, от приемника приходит 1 на передатчик, но обратно на приемник приходит 0.00, хотя transmit_data[8] меняю на 1.

Вот что выводится в порт, когда приходит 1 от приемника на передатчик:

pered otpravkoy transmit_data[8] = 1.00
telemetry[0] =  1
transmit_data[8] = 1.00
 
transmit_data[8] нигде в другом месте не меняется
-----------------------
На приемнике в порт выводится так(когда нажата кнопка):
0.00
1
====
 
Остальные данные приходят
Код настройки nrf вырезал, чтобы тут лишнее в глаза не бросалось

Передатчик:

float transmit_data[9];          // массив пересылаемых данных
int telemetry[1];              // массив принятых от приёмника данных телеметрии

void loop()
{
transmit_data[0] = 0;
transmit_data[1] = 1;
transmit_data[2] = 2;
transmit_data[3] = 3;
transmit_data[4] = 4;
transmit_data[5] = 5;
transmit_data[6] = 6;
transmit_data[7] = 7;

if (radio.write(&transmit_data, sizeof(transmit_data))) {    // отправка пакета transmit_data
    trnsmtd_pack++;
    if (!radio.available()) { // если получаем пустой ответ
    } else {
      while (radio.available() ) {  // если в ответе что-то есть
        radio.read(&telemetry, sizeof(telemetry));    // читаем
        // получили забитый данными массив telemetry ответа от приёмника
        Serial.println("telemetry[0] = ");Serial.print(telemetry[0]);

        if(telemetry[0] == 1) transmit_data[8] = 1;//отправляем то, что сигнал принят
        else if(telemetry[0] == 0) transmit_data[8] = 0;
        
        Serial.println("transmit_data[8] = ");Serial.print(transmit_data[8]);
      }
    }
  } else {
    failed_pack++;
  }
}

Приемник: 


float recieved_data[9];         // массив принятых данных
int telemetry[1];             // массив данных телеметрии (то что шлём на передатчик)
//--------------------- ПЕРЕМЕННЫЕ ----------------------
unsigned long outTime = 0;
const int PIN_BUTTON = 2;//пин кнопки

int buttonState = 0;

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

  //настраиваем кнопку
  pinMode(PIN_BUTTON, INPUT_PULLUP);
  digitalWrite(PIN_BUTTON, HIGH);
}

void loop() {
while (radio.available(&pipeNo)) { // слушаем эфир 
    radio.read( &recieved_data, sizeof(recieved_data)); // чиатем входящий сигнал
    Serial.println(recieved_data[8]);
    if(millis() - outTime > 100)
    {
      buttonState = !digitalRead(PIN_BUTTON);//меняем на противоположное, т.к. при ненажатой кнопке значение 1
      Serial.println(buttonState);
      
      if(buttonState == true) telemetry[0] = 1;
      else telemetry[0] = 0;
      
      outTime = millis();
    }
    Serial.println("========");
}


 

Nubas_
Offline
Зарегистрирован: 19.07.2021

Может у кого-то есть какие-то предположения? Никак не могу исправить.

Перед отправкой transmit_data[8] = 1, но на приемник приходит 0.00, хотя остальные данные приходят нормально

b707
Offline
Зарегистрирован: 26.05.2017

Nubas_ пишет:

Может у кого-то есть какие-то предположения? Никак не могу исправить.

Перед отправкой transmit_data[8] = 1, но на приемник приходит 0.00, хотя остальные данные приходят нормально

Зачем Вы показываете куски скетчей? Где остальное?

это NRF24 ? - покажите секцию инициализации НРФ. А лучше сделайте тестовый код приемника и передатчика , который будет компилироваться но где не будет ничего лишнего

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

так он флоат в буфер пихает, естественно не пролезет, если не изменяет память в библиотеке буфер 32 байта 8х4 = 32, а он 9-й элемент массива впихует

Nubas_
Offline
Зарегистрирован: 19.07.2021

ua6em пишет:

так он флоат в буфер пихает, естественно не пролезет, если не изменяет память в библиотеке буфер 32 байта 8х4 = 32, а он 9-й элемент массива впихует

Спасибо большое

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

Nubas_ пишет:

ua6em пишет:

так он флоат в буфер пихает, естественно не пролезет, если не изменяет память в библиотеке буфер 32 байта 8х4 = 32, а он 9-й элемент массива впихует

Спасибо большое

да не за что, там жеж в голове примера библиотеки это было написано, ту, что я видел