Go Down

Topic: error: 'NOT_AN_INTERRUPT' was not declared in this scope (Read 8006 times) previous topic - next topic

teplous

Hello,
I am new to this forum, If i did something wrong please let me know, I am doing my best to adhere to the rules.

My goal with this code is to monitor 3 separate pumps flows using interrupts. I am trying to use attachInterrupt() and detachInterrupt() to to sample each pin for one second so that the interrupts don't get mix with each other. I am using an Arduino Mega 2560.

EDIT: I set up an array to directly call the interrupt pins rather than use digitalPinToInterrupt(), it seems to not call anymore errors. If anyone has a more elegant solution it would be much appreciated.

This is the code I modified/wrote:

Code: [Select]
// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com

volatile int NbTopsFan; //measuring the rising edges of the signal
int i;
int pump_flow[3] = {1, 2, 3};
int pin[3] = {2, 3, 18};    //The pin location of the sensor
 
void rpm ()     //This is the function that the interupt calls
{
  NbTopsFan++;  //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() //
{
  for(i=0; i<3; i++)
  {
    pinMode(pin[i], INPUT); //initializes digital pin 2 as an input
  }
  Serial.begin(9600); //This is the setup function where the serial port is initialised
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()   
{
  for(i=0; i<3; i++)
  {
    attachInterrupt(digitalPinToInterrupt(pin[i]), rpm, RISING); //and the interrupt is attached   
    NbTopsFan = 0;   //Set NbTops to 0 ready for calculations
    sei();      //Enables interrupts
    delay (1000);   //Wait 1 second
    cli();      //Disable interrupts
    detachInterrupt(digitalPinToInterrupt(pin[i]));
    pump_flow[i] = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 5.5Q, = flow rate in L/min
    Serial.print ("Pump ");
    Serial.print (i, DEC);
    Serial.print (": ");
    Serial.print (pump_flow[i], DEC); //Prints the number calculated above
    Serial.print (" L/min\r\n"); //Prints "L/hour" and returns a  new line
  }



And this is the code I based it off of:
Code: [Select]
// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com

volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;                               
int hallsensor = 2;    //The pin location of the sensor

void rpm ()     //This is the function that the interupt calls
{
  NbTopsFan++;  //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(hallsensor, INPUT); //initializes digital pin 2 as an input
  Serial.begin(9600); //This is the setup function where the serial port is zinitialised,
  attachInterrupt(0, rpm, RISING); //and the interrupt is attached
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()   
{
  NbTopsFan = 0;   //Set NbTops to 0 ready for calculations
  sei();      //Enables interrupts
  delay (1000);   //Wait 1 second
  cli();      //Disable interrupts
  Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
  Serial.print (Calc, DEC); //Prints the number calculated above
  Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a  new line
}


And this is my Error message:
Code: [Select]
Arduino: 1.0.6 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK"
flowmeter.ino: In function 'void loop()':
flowmeter:29: error: 'NOT_AN_INTERRUPT' was not declared in this scope


Any help would be much appreciated, thank you.

el_supremo

Your code compiles with no errors for me once I've added the right-brace that you omitted.
It appears that NOT_AN_INTERRUPT is defined in Arduino.h. This is a long shot, and shouldn't make a difference, but try adding this at the top of your code:
Code: [Select]
#include <Arduino.h>

Hmmm. I see that you're using version 1.0.6 of the IDE. You're a bit behind the times.

Pete
Don't send me technical questions via Private Message.

teplous

I wish I could update my IDE on this computer. However, this is a project for work on a work computer and IT just got really strict :( .

I will try using arduino.h . Thank you

Edit: just tried implementing arduino.h, but no luck.

el_supremo

NOT_AN_INTERRUPT is not even defined in version 1.0.6 but it is used by the MEGA version of digitalPinToInterrupt without defining it.

I don't know if this will do it, but put this at the top of your file:
Code: [Select]
#define NOT_AN_INTERRUPT -1

If that doesn't work, we'll have to get into your pins_arduino.h file and fix it (if your IT dept. will allow it!).

Pete
Don't send me technical questions via Private Message.

teplous



Go Up