Как исправить ошибку "invalid operands of types 'const char [17]' and 'float' to binary 'operator+'"?
#include <Wire.h>
long aX,aY,aZ,gX,gY,gZ;
float rtX,rtY,rtZ,gfX,gfY,gfZ;
void setup()
{
Serial.begin(9600);
Wire.begin();
setupMPU ();
}
void loop()
{
recordAccelregisters();
recordGyroregisters();
printData();
delay(100);
}
void setupMPU()
{
Wire.beginTransmission(0b1101000);
Wire.write(0x6B);
Wire.write(0b00000000);
Wire.endTransmission();
Wire.beginTransmission(0b1101000);
Wire.write(0x1B);
Wire.write(0b00000000);
Wire.endTransmission();
Wire.beginTransmission(0b1101000);
Wire.write(0x1C);
Wire.write(0b00000000);
Wire.endTransmission();
}
void recordAccelregisters()
{
Wire.beginTransmission(0b1101000);
Wire.write(0x3B);
Wire.endTransmission();
Wire.requestFrom(0b1101000,6);
while(Wire.available()<6)
{
aX = Wire.read()<<8|Wire.read();
aY= Wire.read()<<8|Wire.read();
aZ = Wire.read()<<8|Wire.read();
processAData();
}
}
void processAData()
{
gfX= aX/16384.0;
gfY = aY/16384.0;
gfZ = aZ/16384.0;
}
void recordGyroregisters()
{
Wire.beginTransmission(0b1101000);
Wire.write(0x43);
Wire.endTransmission();
Wire.requestFrom(0b110100,6);
while(Wire.available()>6)
{
gX = Wire.read()<<8|Wire.read();
gY = Wire.read()<<8|Wire.read();
gZ = Wire.read()<<8|Wire.read();
processGdata();
}
}
void processGdata()
{
rtX= gX/131.0;
rtY = gY/131.0;
rtZ= gZ /131.0;
}
void printData()
{
Serial.print("Gyro degree(x)= "+ rtX + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
Serial.print("Gyro degree(y)= "+ rtY + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
Serial.print("Gyro degree(z)= "+ rtZ + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
Serial.print("Accel Gforce(x)= "+ gfX + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
Serial.print("Accel Gforce(y)= "+ gfY + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
Serial.print("Accel Gforce(z)= "+ gfZ + " ");// эта строка показывает ошибку, упомянутую выше в вопросе
}
это код mpu6050. Почему я получаю эту ошибку и как ее устранить?
@Geekaholic YR, 👍0
Обсуждение1 ответ
Эти строки дают вам ошибки, потому что вы не можете просто добавлять массивы символов (также известные как c-строки) и числа с плавающей запятой вместе с оператором +
. C/C++ очень строг в отношении типов переменных. Компилятор не знает, как он должен складывать эти типы вместе.
В других языках высокого уровня строковые литералы (символы, заключенные в "
в исходном коде) являются более сложными типами, чем c-строки. Они в основном имеют различные методы, а также реализацию Оператор +
для добавления числа с плавающей запятой в удобочитаемой форме. Этот сложный тип в мире Arduino — тип String
. Вы можете преобразовать переменную с плавающей запятой в String
, а затем сложите их вместе. Но это не тот способ, которым вы должны это делать. Строки на Arduino на базе AVR (например, Uno, Nano, ...) могут быть очень злыми из-за ограниченного ОЗУ. См. Блог Маженко. запись о Зла строк Arduino для получения дополнительной информации.
Вместо этого вы должны просто использовать несколько операторов печати. Поскольку последовательные данные отправляются последовательно (один байт за другим), не имеет значения, поместите ли вы все данные для отправки в один оператор печати или несколько раз. Таким образом, каждую ошибочную строку можно преобразовать во что-то вроде этого:
Serial.print("Gyro degree(x)= ");
Serial.print(rtX);
Serial.print(" ");
Он делает именно то, что делает ваш код. Но это не приведет к ошибке, так как метод Serial.print()
также реализован для использования аргументов типа float.
- Использование MPU6050 с ESP32 Cam - MPU Не обнаружено
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как подключить вывод INT MPU 6050?
- Как очистить буфер FIFO на MPU6050?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- MPU6050 не работает
- Ошибка A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode. [upload] Error 2
- Понимание того, почему следует избегать «String» и альтернативных решений
Примечание: вы не должны писать
Wire.read()<<8|Wire.read()
, потому что [порядок оценки вызововWire.read()
не указан](https://en. cppreference.com/w/cpp/language/eval_order). См. также [эту тему на форуме Arduino](https://forum.arduino.cc/index.php?topic=659333.msg4443224#msg4443224). Вместо этого используйтеgX=Wire.read()<<8;gX|=Wire.read();
., @Edgar Bonet