0

我正在使用 Teensy 3.5 运行 LidarLite v3 模块并收到以下错误:

teensy no known conversion for argument 2 from 'int16_t* {aka short int*}' to 'int*'

对于许多不同的功能,此错误重复出现。如何让编译器使用 16 位 int 而不是 32 位 int?

更新1:

代码运行如下:

#include <Arduino.h>
#include <Wire.h>
#include <I2CFunctions.h> 
#include <LidarObject.h>
#include <LidarController.h>

#define WIRE400K true
// Trigger pin, can be unplugged
#define Z1_LASER_TRIG 11
// Enable pin, IMPORTANT
#define Z1_LASER_EN 12
// Mode pin, can be unplugged
#define Z1_LASER_PIN 13
//Define address of lasers
//Thoses are written during initialisation
// default address : 0x62
#define Z1_LASER_AD 0x6E

#define NUMBER_OF_LASERS 1

// Create lasers
static LidarController Controller;
static LidarObject LZ1;

void setup()
{
  Serial.begin(115200);
  // Configure lasers
  LZ1.begin(Z1_LASER_EN, Z1_LASER_PIN, Z1_LASER_TRIG, Z1_LASER_AD, 2, DISTANCE, 'A');
  LZ1.setCallbackDistance(&distance_callback);
  // Add the laser to the Controller
  Controller.add(&LZ1, 0);

  delay(100);
  Controller.begin(WIRE400K);
  delay(100);
}

void distance_callback(LidarObject* self){
   Serial.println(self->distance);
}

void loop()
{
  Controller.spinOnce();
  // Rest of your non blocking application. 
}

有问题的图书馆位于:https ://github.com/AlexisTM/LIDAREnhanced

4

1 回答 1

0

正如该站点上的其他答案所说,teensy 板是 32 位板,这意味着 int 是 32 位。LIDAREnhanced 库和 WIRE 库都假设 in 是 16 位。

为了修复 LIDAREnhanced 库,您需要进入LidarController.h并将每个引用更改intint16_t. 这将强制编译器将文件中的整数视为相同类型。

此外,对于 Teensy 3.x,我还将每个更改#include <Wire.h>#include <i2c_t3.h>. i2c_t3 库旨在处理 teensy 3.x 板的 i2c 通信。

于 2018-08-24T03:43:32.150 回答