Датчик расхода с ардуино
Я использую следующий код, чтобы прочитать поток через датчик. Когда я подключил свой датчик к порту 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
}
1 ответ
В arduino UNO метод attachInterrupt работает только для идентификатора контакта 0 (контакт цифрового 2) и идентификатора 1 (контакт цифрового 3), его нельзя использовать для любого другого контакта.
Используя регистр напрямую, вы можете использовать прерывание CHANGE на любом выводе, но это может иметь неприятные последствия, так как прерывание идет через группу og 8, так что если вы прослушиваете группу с цифровыми выводами 0 и 1 (используется для последовательного порта), у вас будет много прерывания, которые могут вызвать проблемы.
см. https://github.com/lestofante/arduinoSketch/blob/master/QuadricotteroCompleto/RX/InputPin.cpp для примера того, как я использую этот метод, чтобы прочитать только некоторые конкретные выводы