Как использовать IRsend со строкой или преобразовать символ из serial в uint32_t?

Я пытаюсь управлять своим arduino с помощью raspberry pi с помощью python вместо C ++ (чего я не знаю). Я нашел код, чтобы взять строку из serial и распечатать ее, но вместо этого я хотел бы использовать IRsend для использования кода. К сожалению, я получаю сообщение об ошибке недопустимого преобразования из 'char *' в 'uint32_t {он же long unsigned int}' [-fpermissive]. Я знаю, что это, должно быть, невероятно глупый вопрос, но есть ли функция int() для uint32_t для arduino C ++? что я мог бы установить blah=uint32_t(buf), а затем использовать мой irsend.sendNEC(buf, 32)? Если это не слишком очевидно, я не знаю C ++, и мой python не очень хорош.

#include <IRremote.h>

char buf[80];

int readline(int readch, char *buffer, int len) {
  static int pos = 0;
  int rpos;

  if (readch > 0) {
    switch (readch) {
      case '\r': // Игнорировать CR
        break;
      case '\n': // Возврат в новую строку
        rpos = pos;
        pos = 0; // Сбросить указатель положения, готовый к следующему разу
        return rpos;
      default:
        if (pos < len-1) {
          buffer[pos++] = readch;
          buffer[pos] = 0;
        }
    }
  }
  return 0;
}


void setup() {
  Serial.begin(115200);
}

IRsend irsend;

void loop() {
  if (readline(Serial.read(), buf, 80) > 0) {
    Serial.print("You entered: >");
    Serial.print(buf);
    Serial.println("<");
    irsend.sendNEC(buf, 32);
    
  }
}

Ошибка:

/home/pi/Desktop/sendIRfromserial2addingir/sendIRfromserial2addingir.ino: 39:27: warning: invalid conversion from 'char*' to 'uint32_t {aka long unsigned int}' [-fpermissive]
             irsend.sendNEC(buf, 32);
                     
    
                  ^

В файле, включенном из

/home/pi/Desktop/sendIRfromserial2addingir/sendIRfromserial2addingir.ino:1:0:
/home/pi/Arduino/libraries/IRremote/src/IRremote.h:444:10: note:   initializing argument 1 of 'void IRsend::sendNEC(uint32_t, uint8_t, bool)'
     void sendNEC(uint32_t data, uint8_t nbits, bool repeat = false);
          ^~~~~~~`

, 👍0


1 ответ


Лучший ответ:

0

Вместо того , чтобы

irsend.sendNEC(buf, 32);

приведите его к типу int32 без знака:

irsend.sendNEC((uint32_t) buf, 32);
,

Это работает! Большое вам спасибо! Печально, сколько времени я потратил на поиски ответа. Я думаю, что это слишком простой вопрос, чтобы его задавали раньше., @Johnny Derpp

Может быть, но это нормально... Добро пожаловать в любом случае, в следующий раз также используйте ctrl-k для выравнивания вашего кода, и я советую прочитать книгу о C / C ++, это очень поможет вам в использовании Arduino. Удачи вам в вашем проекте., @Michel Keijzers