上个程序,各位高手看看什么问题?
#include <avr/sleep.h>
#include <avr/wdt.h>
volatile byte data=0;
#define Pot A2 //电位器引脚命名
int PotBuffer = 0; //AD读取数据缓存变量
void setup() {
pinMode(13,OUTPUT);
setup_watchdog(9);
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
ACSR |=_BV(ACD);//OFF ACD
ADCSRA=0;//OFF ADC
Sleep_avr();//Sleep_Mode
Serial.begin(9600); //初始化串口波特率为9600
}
void loop() {
if(data>=1){
data=0;
//-------------------------------
digitalWrite(13,HIGH);
delay(100); //此处是到达设置唤醒时间允许的程序
digitalWrite(13,LOW);
PotBuffer = analogRead(Pot); //读取AD值
Serial.print("Pot = "); //串口输出“Pot = ”
Serial.println(PotBuffer); //串口输出PotBuffer的值
delay(500); //延时500ms
//--------------------------------
Sleep_avr();
}
else {
Sleep_avr(); //Continue Sleep
}
}
//Sleep mode is activated
void setup_watchdog(int ii) {
byte bb;
if (ii > 9 ) ii=9;
bb=ii & 7;
if (ii > 7) bb|= (1<<5);
bb|= (1<<WDCE);
MCUSR &= ~(1<<WDRF);
// start timed sequence
WDTCSR |= (1<<WDCE) | (1<<WDE);
// set new watchdog timeout value
WDTCSR = bb;
WDTCSR |= _BV(WDIE);
}
//WDT interrupt
ISR(WDT_vect) {
++data;
// wdt_reset();
}
void Sleep_avr(){
set_sleep_mode(SLEEP_MODE_PWR_DOWN ); // sleep mode is set here
sleep_enable();
sleep_mode(); // System sleeps here
}
|