主要思路是继承iic类,然后初始化,读取数据,实测有用。刚学不久,如有错误,欢迎指正
主程序:
#include <termios.h>
#include <drivers/drv_hrt.h>
#include <systemlib/mavlink_log.h>
#include <px4_posix.h>
//#include
//#include
#include “drivers/drv_pwm_output.h”
#include <uORB/topics/offboard_control_mode.h>
#include <uORB/topics/position_setpoint_triplet.h>
#include <unistd.h>
#include <stdio.h>
#include <uORB/topics/home_position.h>
#include <string.h>
#include <stdlib.h>
#include <px4_config.h>
#include <px4_tasks.h>
#include <px4_getopt.h>
#include <px4_defines.h>
#include <px4_log.h>
#include <uORB/topics/vehicle_status.h>
#include <uORB/topics/manual_control_setpoint.h>
#include <uORB/topics/vehicle_command.h>
#include <uORB/topics/vehicle_global_position.h>
#include <uORB/topics/vehicle_local_position.h>
#include <uORB/topics/vehicle_command_ack.h>
//#include <geo/geo.h>
#include <poll.h>
#include <uORB/topics/rc_channels.h>
//#include <uORB/topics/output_pwm.h>
//#include <nuttx/fs/ioctl.h>
#include “drivers/drv_pwm_output.h”
#include “systemlib/err.h”
#include <sys/ioctl.h>
//#include “systemlib/systemlib.h”
//#include “systemlib/param/param.h”
#include <sys/stat.h>
#include <fcntl.h>
#include <arch/board/board.h>
//#include <drivers/drv_gpio.h>
#include <sys/types.h>
#include <sched.h>
#include <errno.h>
#include <assert.h>
#include <drivers/drv_input_capture.h>
#include <px4_config.h>
#include <px4_tasks.h>
#include <px4_posix.h>
#include <unistd.h>
#include <stdio.h>
#include <poll.h>
#include <string.h>
#include <math.h>
// system libraries
#include <parameters/param.h>
#include <systemlib/err.h>
#include <perf/perf_counter.h>
// internal libraries
#include <lib/mathlib/mathlib.h>
#include <matrix/math.hpp>
#include <lib/ecl/geo/geo.h>
// Include uORB and the required topics for this app
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h> // this topics hold the acceleration data
#include <uORB/topics/actuator_controls.h> // this topic gives the actuators control input
#include <uORB/topics/vehicle_attitude.h> // this topic holds the orientation of the hippocampus
#include <uORB/topics/safety.h>
#include <uORB/topics/a02.h>
#include <uORB/topics/a03pid_out.h>
#include “commander/commander_helper.h”
#include <drivers/drv_hrt.h>
#include <drivers/drv_tone_alarm.h>
#include <drivers/drv_pwm_output.h>
#include<lib/pid/pid.h>
#include <drivers/device/i2c.h>
#include"04workqueue.h"
#include <uORB/topics/distance_sensor.h>
#include <px4_config.h>
#include <px4_getopt.h>
#include <px4_workqueue.h>
#include <containers/Array.hpp>
#include <drivers/device/i2c.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include <semaphore.h>
#include <string.h>
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#include <perf/perf_counter.h>
#include <drivers/drv_hrt.h>
#include <drivers/drv_range_finder.h>
#include <drivers/device/ringbuffer.h>
#include <uORB/uORB.h>
#include <uORB/topics/distance_sensor.h>
#include <board_config.h>
#define SENSOR_BASEADDR 0x70 /* 7-bit address. 8-bit address is 0xE0 */
#define PX4FMU_DEVICE_PATH “/dev/px4fmu”
#define MYIIC_PATH “/dev/xxxxxx”
extern “C” __EXPORT int d_main(int argc, char *argv[]);//主函数
workqueuetest ::workqueuetest(int bus = PX4_I2C_BUS_EXPANSION2, int address = SENSOR_BASEADDR) :
I2C(“xxxxxx”, MYIIC_PATH, bus, address, 100000)
{}
int workqueuetest::start()
{
int ret = PX4_ERROR;
/* do I2C init (and probe) first */
if (I2C::init() != OK) {
return ret;
}
uint8_t val[2] = {0, 0};
ret = transfer(nullptr, 0, &val[0], 2);
if (ret < 0) {
PX4_DEBUG(“error reading from sensor: %d”, ret);
PX4_INFO(“read err”);
return ret;
}
uint16_t distance_cm = val[0] << 8 | val[1];
float distance_m = float(distance_cm) * 1e-2f;
PX4_INFO("%1.5f",(double)distance_m);
return 0;
}
int d_main(int argc, char *argv[])
{
workqueuetest a0;
a0.start();
return 0;
}
头文件
#include <drivers/device/i2c.h>
class workqueuetest :public device::I2C
{
public:
workqueuetest(int bus, int address);
int start();
};
cmakelist
px4_add_module(
MODULE modules__04workqueue
MAIN d
STACK_MAIN 2000
SRCS
04workqueue.cpp
DEPENDS
)
固件是px4 1.9.0