我使用以下代码读取传感器的流量。当我将传感器插入端口2时,一切正常。但是,当我将其更改为第7位(在硬件和软件中)时,它没有给我任何结果,但仍然继续测量第2位。有谁知道为什么? 这是代码
#include <SD.h>
volatile int Signal_1; //measuring the rising edges of the signal
int MeasuredFlow_1; // the converted output signal
int flowmeter_1 = 7; // Assigning pin 7 to input of flow meter 1 (input)
void rpm () //This is the function that the interupt calls
{
Signal_1++; //This function measures the rising and falling edge of the hall effect sensors signal
}
// The setup() method runs once, when the sketch starts
void setup() //
{
pinMode(flowmeter_1, INPUT); //initializes digital pin 7 as an input
Serial.begin(9600); //This is the setup function where the serial port is initialised,
attachInterrupt(0, rpm, RISING); //attaching the interrupt
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()
{
Signal_1 = 0; //Set NbTops to 0 ready for calculations
sei(); //Enables interrupts
delay (1000); //Wait 1 second
cli(); //Disable interrupts
MeasuredFlow_1 = (Signal_1 * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
Serial.print (MeasuredFlow_1, DEC); //Prints the number calculated above
Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line
}
答案 0 :(得分:0)
在arduino UNO上,attachInterrupt仅适用于引脚ID 0(引脚数字2)和ID 1(引脚数字3),您不能将其用于任何其他引脚。
直接使用寄存器可以在任何引脚上使用CHANGE中断,但是这可能会因为中断超过组8的引脚而适得其反,所以如果你正在用数字引脚0和1(用于串行)监听组,你将会有很多可能导致麻烦的中断。
请参阅https://github.com/lestofante/arduinoSketch/blob/master/QuadricotteroCompleto/RX/InputPin.cpp,了解我如何使用此方法只读取某些特定的引脚