Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Arduino 番外編13 スリープモード編
- // https://omoroya.com
- // https://omoroya.com/arduino-extra-edition-13/
- #include <avr/sleep.h>
- int wakePin = 2; // 割り込み用のピン番号
- void setup() {
- pinMode(LED_BUILTIN, OUTPUT);
- pinMode(wakePin, INPUT_PULLUP); // 割込み用のピンを入力のプルアップあり指定
- Serial.begin(115200); // シリアルポートの指定
- Serial.println("-- Sleep Test Start --");
- digitalWrite(LED_BUILTIN, HIGH);
- }
- void loop() {
- if (Serial.available()) { // シリアルモニターからの入力の受け取り
- int val = Serial.read(); // val変数に格納
- if (val == 'i') { // "i" が入力された場合 SLEEP_MODE_IDLE
- Serial.println(" MODE <- IDLE"); // モニタに表示
- standBy(); // スタンバイ突入調整関数読み出し
- set_sleep_mode(SLEEP_MODE_IDLE); // スリープモードの設定
- interrupt(); // 割込み関数の呼び出し
- }
- if (val == 'a') { // "a" が入力された場合 SLEEP_MODE_ADC
- Serial.println(" MODE <- ADC"); // モニタに表示
- standBy(); // スタンバイ突入調整関数読み出し
- set_sleep_mode(SLEEP_MODE_ADC); // スリープモードの設定
- interrupt(); // 割込み関数の呼び出し
- }
- if (val == 'd') { // "d" が入力された場合 SLEEP_MODE_PWR_DOWN
- Serial.println(" MODE <- DOWN"); // モニタに表示
- standBy(); // スタンバイ突入調整関数読み出し
- set_sleep_mode(SLEEP_MODE_PWR_DOWN); // スリープモードの設定
- interrupt(); // 割込み関数の呼び出し
- }
- if (val == 's') { // "s" が入力された場合 SLEEP_MODE_PWR_SAVE
- Serial.println(" MODE <- SAVE"); // モニタに表示
- standBy(); // スタンバイ突入調整関数読み出し
- set_sleep_mode(SLEEP_MODE_PWR_SAVE); // スリープモードの設定
- interrupt(); // 割込み関数の呼び出し
- }
- if (val == 'b') { // "b" が入力された場合 SLEEP_MODE_STANDBY
- Serial.println(" MODE <- STANDBY"); // モニタに表示
- standBy(); // スタンバイ突入調整関数読み出し
- set_sleep_mode(SLEEP_MODE_STANDBY); // スリープモードの設定
- interrupt(); // 割込み関数の呼び出し
- }
- }
- Serial.println("In operation."); // モニタに動作中を表示
- // digitalWrite(LED_BUILTIN, HIGH);
- delay(500);
- // 何か動作させたい場合はここにコードを追加
- // 例えばLEDを点灯させるなど。
- // setup関数での設定もお忘れなく!
- }
- // スタンバイ突入調整関数
- void standBy() {
- Serial.println("Arduino is standby."); // モニタ表示
- // digitalWrite(LED_BUILTIN, LOW);
- delay(100); // 時間調整
- }
- // 割込み関数
- void interrupt() {
- attachInterrupt(0, wakeUp, LOW); // 割り込み処理の設定、2番ピンがLowで復帰
- PRR = PRR | 0b00100000; // 8bitタイマーdisable
- sleep_mode(); // スリープモードを有効にする
- detachInterrupt(0); // 割り込み処理を解除する
- }
- void wakeUp() {
- Serial.println("Wake up from standby."); // 復帰時にシリアルモニターに表示
- digitalWrite(LED_BUILTIN, HIGH);
- PRR = PRR & 0b00000000; // 8bitタイマーenable
- delay(30000); // 時間調整
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement