树莓派通过MCP3008芯片驱动控制摇杆

所需材料

  • 树莓派
  • MCP3008芯片
  • 移动摇杆

模块以及针脚介绍

MCP3008

MCP3008是一个10位8通道的ADC(模拟数字转换器),它使用SPI总线协议,价格便宜,也不需要使用额外的组件。它对应针脚如下

none

连接图

树莓派、MCP3008、移动摇杆连接图

none

SPI接口

启用SPI接口

控制原理:SPI是串行外设接口,移动摇杆通过此方式进行通信,传输X、Y轴变动数据。

编写代码

首先导入所需依赖pi4j-core:1.4pi4j-gpio-extension:1.3slf4j-simple:1.7.32,对应的测试代码如下,通过GpioPinListenerAnalog监听针脚数值变化

import com.pi4j.gpio.extension.mcp.MCP3008GpioProvider;
import com.pi4j.gpio.extension.mcp.MCP3008Pin;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinAnalogInput;
import com.pi4j.io.gpio.event.GpioPinAnalogValueChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerAnalog;
import com.pi4j.io.spi.SpiChannel;


/**
 * 〈MCP3008Test〉
 *
 * @author 丁乾文
 * @date 2022/5/25 15:05
 * @since 1.0.0
 */
public class MCP3008Test {

    public static void main(String[] args) throws Exception {
        final GpioController gpio = GpioFactory.getInstance();
        final MCP3008GpioProvider provider = new MCP3008GpioProvider(SpiChannel.CS0);
        final GpioPinAnalogInput[] inputs = {
                gpio.provisionAnalogInputPin(provider, MCP3008Pin.CH0, "CH0"),
                gpio.provisionAnalogInputPin(provider, MCP3008Pin.CH1, "CH1"),
        };
        // 以防止大量模拟输入更改事件传播并调度可能具有预期漂移范围的输入值。
        provider.setEventThreshold(100, inputs);
        // 设置监视器间隔 milliseconds
        provider.setMonitorInterval(250);

        GpioPinListenerAnalog listener = new GpioPinListenerAnalog() {
            @Override
            public void handleGpioPinAnalogValueChangeEvent(GpioPinAnalogValueChangeEvent event) {
                System.out.println(" [" + event.getPin().getName() + "] : RAW VALUE = " + event.getValue());
            }
        };
        gpio.addListener(listener, inputs);

        Thread.sleep(10000);
        gpio.shutdown();
        System.out.println("Exit");
    }

}

当摇动操作杆时输出:

[CH0] : RAW VALUE = 1023.0
[CH0] : RAW VALUE = 514.0
[CH0] : RAW VALUE = 54.0
[CH0] : RAW VALUE = 515.0
[CH1] : RAW VALUE = 226.0
[CH1] : RAW VALUE = 114.0
[CH0] : RAW VALUE = 726.0
[CH1] : RAW VALUE = 0.0
[CH0] : RAW VALUE = 515.0
更新日期:
作者: qwding