This is an old revision of the document!
Table of Contents
Basic Interaction
Polling versus interrupts
There are two common techniques used to make a microcontroller (like the Arduino) respond to changes in its inputs. One is polling, the other is interrupts.
In a polling setup, the mircocontoller explicitly examines all its input sources during its main loop to see what state each input is in, and then it responds accordingly.
In an interrupt scheme, the microcontroller does essentially nothing in its main loop, but it is directed to do something specific when an input source jostles it into action.
Of the two, polling is probably easier to get started with. Following is a simple example of using polling.
Switch-controlled LED
This example uses polling to determine the state of a switch. If the switch is pressed, Arduino will turn an LED on. If it is not pressed, it will turn the LED off.
The following examples will need switches with external pullups or internal pullups turned on via:
digitalWrite(pushButtonPin, HIGH); // turn on pullup resistors
I suspect internal pullups is the better way to go but possibly harder to explain.
Alternately, use external pulldowns and keep the logic uninverted.
- LightSwitch.ino
/* LightSwitch Turn an LED on and off. */ int pushButtonPin = 2; // connect the push button to digital pin 2 int ledPin = 13; // connect the LED to pin 13 void setup() { pinMode(pushButtonPin, INPUT); // make the pushbutton's pin an input pinMode(ledPin, OUTPUT); // make LED's pin an output } void loop() { int buttonState = digitalRead(pushButtonPin); // read the input pin // set LED state accordingly if (buttonState == LOW) // if the button is pushed digitalWrite(ledPin, HIGH); // turn the LED on else // otherwise digitalWrite(ledPin, LOW); // turn the LED off //delay(1); // delay in between reads for stability (?) }
Notice the use of an if-else
statement. The if-else
statement is an example of flow control.
A more compact version of the above that eliminates the if-else statement:
- LightSwitch2.ino
/* LightSwitch2 Turn an LED on and off. */ int pushButtonPin = 2; // connect the push button to digital pin 2 int ledPin = 13; // connect the LED to pin 13 void setup() { pinMode(pushButtonPin, INPUT); // make the pushbutton's pin an input pinMode(ledPin, OUTPUT); // make LED's pin an output } void loop() { int buttonState = digitalRead(pushButtonPin); // read the input pin digitalWrite(ledPin, !buttonState); // turn the LED on or off //delay(1); // delay in between reads for stability (?) }
And an even more compact version:
- LightSwitch3.ino
/* LightSwitch3 Turn an LED on and off. */ int pushButtonPin = 2; // connect the push button to digital pin 2 int ledPin = 13; // connect the LED to pin 13 void setup() { pinMode(pushButtonPin, INPUT); // make the pushbutton's pin an input pinMode(ledPin, OUTPUT); // make LED's pin an output } void loop() { digitalWrite(ledPin, !digitalRead(pushButtonPin)); // read the input pin and turn the LED on or off //delay(1); // delay in between reads for stability (?) }