Question

I am using the following code to read the flow through the sensor. When I plugged in my sensor to port 2, everything worked fine. But when I changed this to bit 7 (in both hardware and software), it did not give me any results but still went on measuring bit 2. Does anyone knows why? Here is the code

#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
}
Was it helpful?

Solution

on arduino UNO, attachInterrupt works only for pin ID 0 (pin digital 2) and ID 1 (pin digital 3), you can't use it for any other pin.

Using register directly you can use CHANGE interrupt on any pin, but this can backfire as the interrupt is over a group og 8 pin, so if you are listening the group with digital pin 0 and 1 (used for serial) you will have a lot of interrupt that can cause trouble.

see https://github.com/lestofante/arduinoSketch/blob/master/QuadricotteroCompleto/RX/InputPin.cpp for an example of how i use this method to read only some specific pin

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top