這個與網上多數搜到的arduino uno 那種 看門狗定時的代碼不一樣 。感覺更簡單(如果我認識的沒錯的話。。。)
首先要加載LGT8F328P的庫,建議用這個第三方。連不上的話,自己想辦法上網聯。。。。
https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
這個需要多謝如下鏈接和官方的努力,而且這個是可以調整CPU頻率的 1-32MHZ!
https://github.com/dbuezas/lgt8fx
現在最高版本是1.0.5
"name": "LGT8fx Boards",
"architecture": "avr",
"version": "1.0.5",
"category": "lgt8fx",
"url": "https://github.com/dbuezas/lgt8fx/releases/download/v1.0.5/lgt8f-1.0.5.zip",
"archiveFileName": "lgt8f-1.0.5.zip",
"checksum": "SHA-256:6bde3060b7a9102eed89c32a163bd99db4129231ed7847a6245b2fa44433fff5",
"size": "598269",
他官網的功耗說明:
Power consumption @ 5v
Clock | Pro mini style w/o power LED | Pro mini style | Nano style |
---|---|---|---|
32MHz | 12.7mA | 15.0mA | 32.6mA |
16MHz | 9.2mA | 11.5mA | 27.8mA |
8MHz | 7.1mA | 9.4mA | 25.4mA |
4MHz | 5.9mA | 8.2mA | 23.3mA |
2MHz | 5.3mA | 7.6mA | 23.4mA |
1MHz | 5.0mA | 7.3mA | 22.8mA |
裝好後 下面說正事
本來我也以爲這個睡眠起牀是兼容arduino庫的,使用看門狗WDT喚醒,但是怎麼拭都不行,最終我看到了這個
https://www.geek-workshop.com/thread-33249-1-1.html
原來是需要PMU庫,那個纔是LGT的低功耗庫
上兩個OCROBOT的例程
pmu_autowakeup
#include <PMU.h>
volatile uint8_t g_LastState;
volatile uint8_t g_IntFlag;
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
digitalWrite(2, HIGH);
attachInterrupt(0, donothing, FALLING);
g_LastState = digitalRead(2);
g_IntFlag = 0;
}
void loop()
{
Serial.write("hello, I am working!\n");
// power/down mode
if(g_LastState == HIGH)
{
Serial.println("Change to falling");
attachInterrupt(0, donothing, FALLING);
}
else
{
Serial.println("Change to rising");
attachInterrupt(0, donothing, RISING);
}
Serial.flush();
PMU.sleep(PM_POFFS0, SLEEP_4S);
g_LastState = digitalRead(2);
}
void donothing()
{
//g_IntFlag = 1;
}
pmu_poweroff
#include <PMU.h>
uint8_t sleepPin = 7;
uint8_t vTmp = 0;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, donothing, LOW); // enable EXINT0 for wakeup
pinMode(2, INPUT);
digitalWrite(2, HIGH); // internall pullup
pinMode(sleepPin, INPUT);
digitalWrite(sleepPin, HIGH); // internal pullup
}
void loop()
{
Serial.write("hello, I am working!\n");
delay(10);
// enable power/off
if(digitalRead(sleepPin) == 0)
PMU.sleep(PM_POFFS0);
}
void donothing()
{
// dummy function
}
附上一個我的垃圾程序
#include <PMU.h>
uint8_t sleepPin = 7;
uint8_t vTmp = 0;
volatile long g_IntFlag = 0;
volatile boolean LED_state = 1;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.write("hello, I am working!\n");
delay(100);
Serial.println(LED_state);
delay(100);
Serial.println(g_IntFlag);
delay(100);
g_IntFlag++;
if (g_IntFlag % 2 == 0) {
digitalWrite(LED_BUILTIN, LED_state);
LED_state = !LED_state;
}
;
PMU.sleep(PM_POFFS0, SLEEP_1S);
}
LGT8F328P 還是不錯的,如果大家要實驗,推薦試試OCROBOT的開發板。
如果拿來用,還有更簡版,價格比arduino mini 可合適多了 ,而且自帶12位ADC 也是相當實用的DD