This is an old revision of the document!


Interrupts and sub-programs

Functions

Functions are the set of statements that are executed always when the function is called. Two functions that were mentioned before are already known - setup() and loop(). The programmer is usually trying to make several functions that contain all the statements and then to call them in the setup() or loop() functions.

The structure of the function is following:

type functionName(arguments) //a return type, name and arguments of the function
{
  //the body of a function - statements to execute
}

For the example, a function that periodically turns on and off the LED is created:

void exampleFunction() 
{
  digitalWrite(13, HIGH); //the LED is ON		
  delay(1000);			
  digitalWrite(13, LOW);  //the LED is OFF				
  delay(1000);	
}

In the example code can be seen that the return type of an exampleFunction function is void that means the function does not have the return type. This function also does not have any arguments, because the brackets are empty.

This function should be called inside the loop() function in the following way:

void loop()
{
  exampleFunction(); //the call of the defined function inside loop()
}

The whole code in the Arduino environment looks like this:

void loop()
{
  exampleFunction(); //the call of the defined function inside loop()
}
 
void exampleFunction() 
{
  digitalWrite(13, HIGH); //the LED is ON		
  delay(1000);			
  digitalWrite(13, LOW);  //the LED is OFF				
  delay(1000);	
}

It can be seen that the function is defined outside the loop() or setup() functions.

When some specific result must be returned as a result of a function, then the function return type should be indicated, for example:

int  sumOfTwoNumbers(int x, int y) //the return type is "int"; arguments are still optional
{
    return (x+y); //the value next to the "return" should have the "int" type; this is what will be returned as a result.
}

In the loop() this function would be called in a following way:

void loop()
{
  int result = sumOfTwoNumbers(2, 3); //the call of the defined function inside loop()
}

Interrupts

Interrupt is a signal that stops the normal execution of a program in the processor, to be able to handle tasks with higher priority. These tasks usually are called Interrupt service routine (IRS) or interrupt handler. Interrupt signals can be generated from external source, like change of value on the pin and from internal source, like timer. After interrupt signal is received processor stops code executing the code and starts the IRS. After completing IRS, the processor returns to normal code execution state.

IRS should be as short as possible and the return type of it is void. Some of normal Arduino functions does not work or behaves differently in the IRS, for example, delay() function does not work in the IRS. Variables, used in the IRS must be volatile variables.

Interrupts are used to detect important real time events, that occur during the normal code execution of the code, without continuously checking them, like pushing a button.

Different Arduino types has different external interrupt pin availability. In most Arduino boards pins 2 and 3 are usable for interrupts.

volatile bool button =0; //a variable to save button state
 
void setup() {
  pinMode(13,OUTPUT);       //define LED pin 
  pinMode(2,INPUT_PULLUP);  // define button pin
  attachInterrupt(digitalPinToInterrupt(2),ButtonIRS,FALLING); // attach interrupt to button pin
}
 
void ButtonIRS() {  // IRS function
  button =!button;
}
 
void loop() {
  digitalWrite (13,button);
}
en/iot-open/programming_fundamentals_rtu/interrupts_and_sub-programs.1517581287.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0