arduino:arduino_crash_course:basic_interaction
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
arduino:arduino_crash_course:basic_interaction [2012/11/03 01:54] – mithat | arduino:arduino_crash_course:basic_interaction [2017/12/06 01:05] (current) – mithat | ||
---|---|---|---|
Line 9: | Line 9: | ||
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. | 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. | + | Of the two, polling is probably easier to get started with. We won't learn how to work with interrupts in this section, but it's good to know that you can use both techniques in the same program. |
- | ===== Switch-controlled LED ===== | + | ===== Polling example: 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. | + | |
- | + | ||
- | <WRAP center round todo 60%> | + | |
- | The following examples will need switches with external pullups or internal pullups turned on via: | + | |
- | + | ||
- | <code c> | + | |
- | digitalWrite(pushButtonPin, | + | |
- | </ | + | |
- | + | ||
- | I suspect internal pullups is the better way to go but possibly harder to explain. | + | |
- | + | ||
- | Alternately, | + | |
- | </ | + | |
+ | The following examples use polling to determine the state of a switch. If the switch is pressed, the Arduino will turn an LED on. If it is not pressed, it will turn the LED off. | ||
+ | ==== With external pulldown resistors ==== | ||
+ | The following example requires **pulldown resistors** on the input switch. | ||
<file c LightSwitch.ino> | <file c LightSwitch.ino> | ||
Line 33: | Line 22: | ||
| | ||
Turn an LED on and off. | Turn an LED on and off. | ||
+ | | ||
*/ | */ | ||
int pushButtonPin = 2; // connect the push button to digital pin 2 | int pushButtonPin = 2; // connect the push button to digital pin 2 | ||
int ledPin = 13; // connect the LED to pin 13 | int ledPin = 13; // connect the LED to pin 13 | ||
+ | int buttonState; | ||
void setup() { | void setup() { | ||
Line 44: | Line 35: | ||
void loop() { | void loop() { | ||
- | | + | buttonState = digitalRead(pushButtonPin); |
// set LED state accordingly | // set LED state accordingly | ||
- | if (buttonState == LOW) // if the button is pushed | + | if (buttonState == HIGH) |
digitalWrite(ledPin, | digitalWrite(ledPin, | ||
else // otherwise | else // otherwise | ||
digitalWrite(ledPin, | digitalWrite(ledPin, | ||
- | | + | |
- | // | + | // |
} | } | ||
</ | </ | ||
- | Notice the use of an '' | + | Notice the use of an '' |
A more compact version of the above that eliminates the if-else statement: | A more compact version of the above that eliminates the if-else statement: | ||
Line 64: | Line 55: | ||
| | ||
Turn an LED on and off. | Turn an LED on and off. | ||
+ | | ||
*/ | */ | ||
int pushButtonPin = 2; // connect the push button to digital pin 2 | int pushButtonPin = 2; // connect the push button to digital pin 2 | ||
int ledPin = 13; // connect the LED to pin 13 | int ledPin = 13; // connect the LED to pin 13 | ||
+ | int buttonState; | ||
void setup() { | void setup() { | ||
Line 75: | Line 68: | ||
void loop() { | void loop() { | ||
- | | + | buttonState = digitalRead(pushButtonPin); |
- | digitalWrite(ledPin, | + | digitalWrite(ledPin, |
- | // | + | // |
} | } | ||
</ | </ | ||
Line 87: | Line 80: | ||
| | ||
Turn an LED on and off. | Turn an LED on and off. | ||
+ | | ||
*/ | */ | ||
int pushButtonPin = 2; // connect the push button to digital pin 2 | int pushButtonPin = 2; // connect the push button to digital pin 2 | ||
int ledPin = 13; // connect the LED to pin 13 | int ledPin = 13; // connect the LED to pin 13 | ||
+ | int buttonState; | ||
void setup() { | void setup() { | ||
Line 98: | Line 93: | ||
void loop() { | void loop() { | ||
- | digitalWrite(ledPin, | + | digitalWrite(ledPin, |
- | // | + | // |
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== With internal pullup resistors ==== | ||
+ | |||
+ | Using extenal resistors as part of switch state detection is so common that the microchip that is at the heart of the Arduino has built-in pullup resistors that can be turned on manually. Internal pullup resistors can be enabled with: | ||
+ | |||
+ | <code c> | ||
+ | digitalWrite(pushButtonPin, | ||
+ | </ | ||
+ | |||
+ | Here are the first two versions above but modified to use **internal pullup resistors**. | ||
+ | |||
+ | |||
+ | <file c LightSwitchPullup.ino> | ||
+ | /* | ||
+ | | ||
+ | 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 | ||
+ | int buttonState; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(pushButtonPin, | ||
+ | digitalWrite(pushButtonPin, | ||
+ | pinMode(ledPin, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | buttonState = digitalRead(pushButtonPin); | ||
+ | |||
+ | // set LED state accordingly | ||
+ | // becasue we are using pullup resistors, the logic is inverted; | ||
+ | // in other words, pressed produces LOW, un-pressed produces HIGH. | ||
+ | if (buttonState == LOW) // if the button is pushed | ||
+ | digitalWrite(ledPin, | ||
+ | else // otherwise | ||
+ | digitalWrite(ledPin, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <file c LightSwitchPullup2.ino> | ||
+ | /* | ||
+ | | ||
+ | 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 | ||
+ | int buttonState; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(pushButtonPin, | ||
+ | digitalWrite(pushButtonPin, | ||
+ | pinMode(ledPin, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | buttonState = digitalRead(pushButtonPin); | ||
+ | |||
+ | // set LED state accordingly | ||
+ | // becasue we are using pullup resistors, the logic is inverted; | ||
+ | // in other words, pressed produces LOW, un-pressed produces HIGH. | ||
+ | digitalWrite(ledPin, | ||
} | } | ||
</ | </ |
arduino/arduino_crash_course/basic_interaction.1351907644.txt.gz · Last modified: 2012/11/03 01:54 (external edit)