头文件代码:

#ifndef _ADS1256_H_
#define _ADS1256_H_

#include <Arduino.h>
#include <SPI.h>

#define ADS1256_DEFAULT_TIMEOUT 1000

class ADS1256 {
public:
    ADS1256(uint8_t cs_pin);
    bool begin();
    bool reset();
    uint8_t getStatus();
    uint8_t getDRDY();
    uint8_t getByte();
    uint32_t readData();
    int32_t readSignedData();
    bool setDataRate(float rate);
    bool setClockOut(uint8_t clock_out);
    bool setPGA(uint8_t pga);
    bool setBuffer(bool enable);
    bool setInputMode(uint8_t mode);
    bool setChannel(uint8_t channel);
    bool startContinuousConversion();
    bool stopContinuousConversion();
    bool waitForDataReady(uint16_t timeout = ADS1256_DEFAULT_TIMEOUT);
    bool isDataReady();
private:
    uint8_t _cs_pin;
    uint8_t _status;
    uint8_t _data_ready;
    uint8_t _pga;
    uint8_t _input_mode;
    SPISettings _spi_settings;
    void sendCommand(uint8_t command);
    void writeRegister(uint8_t reg, uint8_t value);
    uint8_t readRegister(uint8_t reg);
    void updatePGA();
    void updateInputMode();
};

#endif

主文件代码:

#include <M5Atom.h>
#include "ADS1256.h"

#define CS_PIN 32   // ADS1256的片选引脚为32
#define LED_PIN 27  // M5 Atom的LED引脚为27

ADS1256 adc(CS_PIN);

void setup() {
    M5.begin(true, false, true);    // 初始化M5 Atom
    pinMode(LED_PIN, OUTPUT);       // 设置LED引脚为输出模式
    digitalWrite(LED_PIN, HIGH);    // 关闭LED
    Serial.begin(115200);           // 初始化串口
    while (!Serial);                // 等待串口连接
    if (!adc.begin()) {             // 初始化ADS1256
        Serial.println("ADS1256 not found!");
        while (1);
    }
    adc.setPGA(ADS1256_PGA_1);
    adc.setInputMode(ADS1256_INPUT_SINGLE);
    adc.setBuffer(false);
    adc.setClockOut(ADS1256_CLOCK_OUT_OFF);
    adc.setDataRate(50.0);
    adc.setChannel(0);
    if (!adc.startContinuousConversion()) { // 开始连续采样
        Serial.println("Failed to start continuous conversion!");
        while (1);
    }
}

void loop() {
    if (adc.isDataReady()) {    // 如果数据准备好
        digitalWrite(LED_PIN, LOW); // 打开LED
        int32_t value = adc.readSignedData();  // 读取数据
        Serial.println(value);  // 输出数据
        digitalWrite(LED_PIN, HIGH);    // 关闭LED
    }
}

M5 Atom的控制文件代码:

#ifndef _M5Atom_H_
#define _M5Atom_H_

#include <Arduino.h>
#include <Wire.h>

#define M5ATOM_I2C_ADDR 0x15

class M5Atom {
public:
    M5Atom();
    bool begin(bool power=false, bool i2c=false, bool buttons=false);
    void setWireClock(uint32_t clock);
    uint8_t getBatteryLevel();
    void setBrightness(uint8_t brightness);
    void setLedColor(uint8_t r, uint8_t g, uint8_t b);
    void setLed(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
    void setLed(uint8_t r, uint8_t g, uint8_t b);
    void clearLed();
    void show();
    void show(uint8_t r, uint8_t g, uint8_t b);
};

#endif

注意:以上代码仅供参考,具体实现根据实际情况进行修改

M5 ATOM Matrix作为主控ADS1256作为采集卡通过SPI进行连接连接方式如下:M5 ATOM Matrix的33脚MISO、23脚CLK、19脚MOSI、22脚分别连接到ADS1256的DOUT、SCLK、DIN、DRDY传感器连接到ADS1256的AIN0和AIN1使用Efficient Input Cycling模式采集数据请给出头文件、主文件和M5 atom的控制文件的详细代码

原文地址: https://www.cveoy.top/t/topic/c98T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录