1 Reply Latest reply on Nov 2, 2015 1:30 PM by DiegoV_Intel

    facing problem in hardware interrupt


      Hi ,

      I am using a flow sensor in my project.When I am using the following code in Arduino Uno it is working perfectly. But when I try to upload it in Intel Edison its showing error.

      Please help ...


      Code :


      // 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



        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 / 73); //(Pulse frequency x 60) / 73Q, = 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


      Error :


      sketch_nov02d.ino:23:7: error: 'sei' was not declared in this scope

      sketch_nov02d.ino:25:7: error: 'cli' was not declared in this scope

      'sei' was not declared in this scope

        • 1. Re: facing problem in hardware interrupt

          Hello deba168,


          The methods sei() and cli() are for interrupt management of the AVR architecture. They are not supported in Edison because the architecture is different. You can try to simply remove those lines in the code and check if it works as it should. Anyhow, you have to change the code to make it compatible with Edison, otherwise it won't work due to architecture differences between the Arduino and Edison boards. Additional information about the sei() and cli() methods can be checked in the following site: Arduino Playground - AVR