

上图是实际输出数据,晚上室内暖色台灯光线效果,看上去还算比较干净,但实际使用还需要做滤波计算速度和补偿等。主要是光线问题,需要多尝试。
不说废话,上代码。这里我使用的是第二个SPI1设备,可根据自己的实际情况修改为SPI0的。
树莓派3如何同时使用多个SPI外设,可以参考网上资料。管脚引用参考如下URL:
SPI at Raspberry Pi GPIO Pinout
#include <bcm2835.h>
#include <stdio.h>
#define __packed __attribute__((packed))
/**
* 突发模式结构体。通过外部中断触发后使用该结构体读取完整数据。
* 因为Raspberry Pi 3B(+)的外部中断是伪轮询方式,所以这里没用。
*/
typedef struct MotionBurst
{
__packed union
{
uint8_t motion;
__packed struct
{
uint8_t frameFrom0 : 1;
uint8_t runMode : 2;
uint8_t reserved1 : 1;
uint8_t rawFrom0 : 1;
uint8_t reserved2 : 2;
uint8_t motionOccured : 1;
};
};
uint8_t observation;
int16_t deltaX;
int16_t deltaY;
uint8_t squal;
uint8_t rawDataSum;
uint8_t maxRawData;
uint8_t minRawData;
uint16_t shutter;
} MotionBurst;
MotionBurst motionBurst;
int16_t x = 0;
int16_t y = 0;
/**
* SPI设备,写从设备,bit 7必须位0
*/
void registerWrite(uint8_t reg, uint8_t val)
{
uint8_t buff[2] = {reg | 0x80, val};
bcm2835_aux_spi_transfern((char *)b

本文提供了一段C语言代码,展示了如何在树莓派3上使用SPI接口与PMW3901光学传感器进行通信,包括初始化传感器、读取和处理传感器数据。代码中包含了对特定寄存器的读写操作,以及数据滤波的相关讨论。
1万+

被折叠的 条评论
为什么被折叠?



