在 Arduino 上使用中断记录实时数据收集
Recording real time data collection with interrupt on Arduino
我一直致力于使用 Arduino 中断收集流量,我想使用实时时钟为数据添加时间戳。
我使用 Arduino 示例将两个草图单独工作,但是当我将它们组合在一起时,它只写入串行端口一次,我不确定为什么。
一旦我有了脉冲计数,就会将其保存到 SD 卡中以进行数据处理。
#include "RTClib.h"
RTC_DS1307 rtc;
int Pulses =2; //Digital Pin 2 on Uno
volatile int pulsecount; //Volatile integer to store pulse count in
void setup() {
Serial.begin(9600);
rtc.begin(); //start rtc
pinMode(Pulses, INPUT); //Make Pin2 Input
attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses ,FALLING); //Use interrupt on "Pulses" Pin, count on the falling edge, store in CountPulses
}
//create a function that adds up the pulsecount
void CountPulses() {
pulsecount++;
}
void loop() {
DateTime time = rtc.now(); //Get the time from RTC
Serial.print(String("DateTime::TIMESTAMP_TIME:\t") + time.timestamp(DateTime::TIMESTAMP_TIME)); //Print the time to serial monitor
pulsecount = 0; // set initial count to zero
interrupts(); // start interrupt
delay(5000); // count pulses for 5 seconds
noInterrupts(); // stop interrupt
Serial.print(",");
Serial.println(pulsecount); //Feed pulse count to serial
Serial.flush(); //flush the serial port to avoid errors in counting
}
函数noInterrupts()
停止所有中断,而不仅仅是您设置的中断。执行此操作时,任何在后台使用中断的 Arduino 库代码都可能停止工作。
您应该仅启用和禁用您自己设置的中断。
尝试将 interrupts();
替换为 attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses, FALLING);
并将 noInterrupts();
替换为 detachInterrupt(digitalPinToInterrupt(Pulses));
您还可以从 setup()
中删除 attachInterrupt()
;不再需要它了。
我一直致力于使用 Arduino 中断收集流量,我想使用实时时钟为数据添加时间戳。
我使用 Arduino 示例将两个草图单独工作,但是当我将它们组合在一起时,它只写入串行端口一次,我不确定为什么。
一旦我有了脉冲计数,就会将其保存到 SD 卡中以进行数据处理。
#include "RTClib.h"
RTC_DS1307 rtc;
int Pulses =2; //Digital Pin 2 on Uno
volatile int pulsecount; //Volatile integer to store pulse count in
void setup() {
Serial.begin(9600);
rtc.begin(); //start rtc
pinMode(Pulses, INPUT); //Make Pin2 Input
attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses ,FALLING); //Use interrupt on "Pulses" Pin, count on the falling edge, store in CountPulses
}
//create a function that adds up the pulsecount
void CountPulses() {
pulsecount++;
}
void loop() {
DateTime time = rtc.now(); //Get the time from RTC
Serial.print(String("DateTime::TIMESTAMP_TIME:\t") + time.timestamp(DateTime::TIMESTAMP_TIME)); //Print the time to serial monitor
pulsecount = 0; // set initial count to zero
interrupts(); // start interrupt
delay(5000); // count pulses for 5 seconds
noInterrupts(); // stop interrupt
Serial.print(",");
Serial.println(pulsecount); //Feed pulse count to serial
Serial.flush(); //flush the serial port to avoid errors in counting
}
函数noInterrupts()
停止所有中断,而不仅仅是您设置的中断。执行此操作时,任何在后台使用中断的 Arduino 库代码都可能停止工作。
您应该仅启用和禁用您自己设置的中断。
尝试将 interrupts();
替换为 attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses, FALLING);
并将 noInterrupts();
替换为 detachInterrupt(digitalPinToInterrupt(Pulses));
您还可以从 setup()
中删除 attachInterrupt()
;不再需要它了。