M5 ATOM Matrix 主控 ADS1256 采集卡 SPI 连接代码示例
#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 } }
#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/nCzt 著作权归作者所有。请勿转载和采集!