Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //MIERUNDES Arduino版 attachInterrupt(INT0)使用 PCINT0不使用 デフォルトの64分周でLEDちらつき有り
- //LED抜きパワーオン時2.43mA
- //200mAh/(320+2.43)mA=37.2173805min.
- #include <avr/sleep.h> //スリープ(パワーオフ休止状態)機能を使うためのライブラリを読み込む
- //ソフトウェアリセットのためのマクロ
- //http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_softreset.html
- #include <avr/wdt.h>
- void soft_reset() {
- do {
- wdt_enable(WDTO_15MS);
- for (;;) {
- }
- } while (0);
- }
- int brightness = 0; //輝度を格納するための変数(LED側でショートしたときに出力0%でリセットされ回路が保護される)
- void setup() {
- pinMode(0, INPUT_PULLUP); //DOWNボタン、プルアップ
- pinMode(1, OUTPUT); //LED駆動用PWM用ピン
- pinMode(2, INPUT_PULLUP); //UPボタン、プルアップ、(INT0ピンでもある)
- set_sleep_mode(SLEEP_MODE_PWR_DOWN); //スリープ時のモードを「パワーダウン休止状態」に設定(省電力)
- }
- void loop() {
- unsigned long lastmillis = millis(); //1同時押しの時間をカウントするためmillis()を記録
- while (digitalRead(2) == LOW && digitalRead(0) == LOW) {
- if ((millis() - lastmillis) > 1000) soft_reset(); //SW_UPとSW_DWの同時押しが1秒続いたらリセット
- }
- if (digitalRead(2) == LOW) { //SW_UP(PB2)がLOWに落ちている間
- if (brightness < 255) brightness++; //輝度を増やす(最高255まで)
- }
- if (digitalRead(0) == LOW) { //SW_DW(PB1)がLOWに落ちている間
- if (brightness > 0) brightness--; //輝度を減らす(最低0まで)
- }
- analogWrite(1, brightness); //輝度の変更を実行
- //TCCR0B = ((TCCR0B & 0xF8) | 0x01); //周波数を64周分 → 1周分に設定変更してLEDのちらつきをなくす
- //bitDuinoの場合は必要ないが、Trinket互換の場合、delay等micros()を使う関数は
- //64倍してやらないと正しいディレイにならない
- if (brightness == 0) { //輝度0の時はパワーオフする
- attachInterrupt(0, wakeup, LOW); //割り込みを設定。スリープ中でもINT0(pinModeで言う2ピン、UPボタン)がLOWになると割り込み発生でwakeupに飛ぶ
- sleep_mode(); //スリープ開始。ボタン押下でdimmer()に飛んだ後ここから再開
- detachInterrupt(0); //割り込みを解除。これをしないとスリープ時以外の時も割り込みが発生してしまう
- pinMode(2, INPUT_PULLUP); //UPボタン、プルアップ
- }
- delay(4); //brightness変化速度調整のためのウェイト
- //delay(4*64); //brightness変化速度調整のためのウェイト
- //TCCR0Bを操作しているので64倍してある
- }
- void wakeup() {
- //attachInterruptで指定したこのwakeup()関数に飛ぶが
- //この関数内ではなにもしない
- //ただ、sleep_mode();直後の行から復帰する
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement