Как использовать AttachInterrupt() внутри класса в Arduino? ⇐ C++
-
Anonymous
Как использовать AttachInterrupt() внутри класса в Arduino?
Я работаю над проектом ESP32+ADS1256 в Arduino IDE. Для максимальной производительности передача данных SPI должна сопровождаться прерываниями по сигналу DRDY от ADS1256. Я застрял при добавлении прерывания в библиотеку:
ошибка: недопустимое использование нестатической функции-члена AttachInterrupt(ADS_RDY_PIN, DRDY_Interuppt, FALLING); Код .ino:
#include "ADS1256LIB.h" #include #define ADS1256_DRATE_30000SPS 0xF0 #define ADS1256_GAIN_1 0x00 #define ADS_RST_PIN 4 //Вывод сброса ADS1256 #define ADS_RDY_PIN 2 //Данные ADS1256 готовы #define ADS_CS_PIN 5 //выбор чипа ADS1256 #define SPI_SPEED 2500000 поплавок vref = 2,5; летучий int DRDY_state = ВЫСОКИЙ; ADS1256 ADC (ADS_RST_PIN, ADS_CS_PIN, SPI_SPEED, vref, true); недействительная настройка() { ADC.begin(ADS1256_DRATE_15SPS,ADS1256_GAIN_1,false,ADS_RDY_PIN); } недействительный цикл() { // поместите сюда свой основной код для многократного запуска: } cpp:
#include "ADS1256LIB.h" #include "Arduino.h" #include "SPI.h" летучий int DRDY_state = ВЫСОКИЙ; ADS1256::ADS1256(int RESET_pin, int CS_pin, long SPI_SPEED, float vref, bool useResetPin) { // Устанавливаем DRDY в качестве входных данных _SPI_SPEED=SPI_SPEED; _RESET_pin=RESET_pin; _CS_pin=CS_pin; // Устанавливаем CS как выход pinMode (_CS_pin, ВЫХОД); digitalWrite (_CS_pin, LOW); если (useResetPin) { // устанавливаем RESETPIN в качестве вывода pinMode (_RESET_pin, ВЫХОД); digitalWrite (_RESET_pin, ВЫСОКИЙ); } // Опорное напряжение _VREF = vref; // Запускаем SPI на четверти тактовой частоты АЦП SPI.begin(); SPI.beginTransaction(SPISettings(_SPI_SPEED, MSBFIRST, SPI_MODE1)); } void ADS1256::begin(drate беззнаковых символов, усиление беззнаковых символов, bool buffenable, int ADS_RDY_PIN) { pinMode (ADS_RDY_PIN, INPUT); AttachInterrupt(ADS_RDY_PIN, DRDY_Interuppt, FALLING); _pga = 1
Я работаю над проектом ESP32+ADS1256 в Arduino IDE. Для максимальной производительности передача данных SPI должна сопровождаться прерываниями по сигналу DRDY от ADS1256. Я застрял при добавлении прерывания в библиотеку:
ошибка: недопустимое использование нестатической функции-члена AttachInterrupt(ADS_RDY_PIN, DRDY_Interuppt, FALLING); Код .ino:
#include "ADS1256LIB.h" #include #define ADS1256_DRATE_30000SPS 0xF0 #define ADS1256_GAIN_1 0x00 #define ADS_RST_PIN 4 //Вывод сброса ADS1256 #define ADS_RDY_PIN 2 //Данные ADS1256 готовы #define ADS_CS_PIN 5 //выбор чипа ADS1256 #define SPI_SPEED 2500000 поплавок vref = 2,5; летучий int DRDY_state = ВЫСОКИЙ; ADS1256 ADC (ADS_RST_PIN, ADS_CS_PIN, SPI_SPEED, vref, true); недействительная настройка() { ADC.begin(ADS1256_DRATE_15SPS,ADS1256_GAIN_1,false,ADS_RDY_PIN); } недействительный цикл() { // поместите сюда свой основной код для многократного запуска: } cpp:
#include "ADS1256LIB.h" #include "Arduino.h" #include "SPI.h" летучий int DRDY_state = ВЫСОКИЙ; ADS1256::ADS1256(int RESET_pin, int CS_pin, long SPI_SPEED, float vref, bool useResetPin) { // Устанавливаем DRDY в качестве входных данных _SPI_SPEED=SPI_SPEED; _RESET_pin=RESET_pin; _CS_pin=CS_pin; // Устанавливаем CS как выход pinMode (_CS_pin, ВЫХОД); digitalWrite (_CS_pin, LOW); если (useResetPin) { // устанавливаем RESETPIN в качестве вывода pinMode (_RESET_pin, ВЫХОД); digitalWrite (_RESET_pin, ВЫСОКИЙ); } // Опорное напряжение _VREF = vref; // Запускаем SPI на четверти тактовой частоты АЦП SPI.begin(); SPI.beginTransaction(SPISettings(_SPI_SPEED, MSBFIRST, SPI_MODE1)); } void ADS1256::begin(drate беззнаковых символов, усиление беззнаковых символов, bool buffenable, int ADS_RDY_PIN) { pinMode (ADS_RDY_PIN, INPUT); AttachInterrupt(ADS_RDY_PIN, DRDY_Interuppt, FALLING); _pga = 1
Мобильная версия