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的控制文件的详细代码
头文件代码:
#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
注意:以上代码仅供参考,具体实现根据实际情况进行修改
原文地址: https://www.cveoy.top/t/topic/c98T 著作权归作者所有。请勿转载和采集!