Помощь с кодом!

Тема в разделе "Arduino & Shields", создана пользователем avgaz, 17 авг 2015.

  1. avgaz

    avgaz Нерд

    Добрый вечер, не как не могу понять как сделать. Имеется RF433 в общем то все передается нормально, но вот на приемном устройстве в переменную забить не пойму как данные передаются типа 22.44 то есть float
    и так код приемника
    Код (Text):
     if (vw_get_message(message, &messageLength)) // Non-blocking
    {
    Serial.print("Received: ");
    for (int i = 0; i < messageLength; i++)
    {
      Serial.write(message[i]);
    }
    Serial.println();
    }
    В сиреал идут нормально данные вида
    Received: 0.56
    вот как мне эти цифры вынести в переменную, для дальнейшей обработке?
     
  2. geher

    geher Гуру

    Для преобразования строки, содержащей число с десятичной точкой в float есть функция atof(str), означенный float возвращающая.
    Например:
    float f=atof("11.12345678");

    Если в приведенном выше коде message является массивом char или byte и содержит только строковое представление числа, то получается примерно так:
    Код (Text):

    message[messageLength]=0; // добавляем признак конца строки, предполагается, что место под него зарезервировано.
    float  f=atof(message);
     
    Кроме того, никто не мешает пересылать число как есть, в его внутреннем представлении.
    Не видя функции передатчика сложно сказать, как оно должно быть там, но на стороне приемника все просто:
    Код (Text):

    vw_get_message(message, &messageLength)
    float f=0;
    if (messagelength==sizeof(float)) {
        f=*((float*)message);
    } else {
       println("Error, not float, size not correct");
    }
     
     
    Последнее редактирование: 17 авг 2015
  3. avgaz

    avgaz Нерд

    Код (Text):
               
    if (vw_get_message(message, &messageLength)) // Non-blocking
    {
    float f=0;
    if (messageLength==sizeof(float)) {
        f=*((float*)message);
        Serial.println(f);
    } else {
      Serial.println("Error, not float, size not correct");
    }
    }
    Так получается что просто идет 0.00 ((
    Код передатчика такой
    Код (Text):
    float data = 0;  
    data = counter2*0.3125/1000*360;
      String strMsg = "";
      strMsg += data;
      char msg[255];
      strMsg.toCharArray(msg, 255);
      vw_send((uint8_t *)msg, strlen(msg));
      vw_wait_tx();
     
  4. Unixon

    Unixon Оракул Модератор

    Передаете строку, а принимаете бинарные данные. Ничего не перепутали? :)
     
  5. avgaz

    avgaz Нерд

    Я фигзнает, нашёл пример кода и подогнал под себя, через Serial.write(message); ведь показывает ))
     
  6. geher

    geher Гуру

    Чтобы работало, нужно, чтобы обе стороны работали в одном формате.
    Т.е. передатчик тоже должен передавать бинарные даные
    Примерно так:
    vw_send((uint8_t *)&data, sizeof(data));

    И все с точностью до опечаток.
     
    avgaz нравится это.
  7. avgaz

    avgaz Нерд

    Благодарю