UART da valores de basura después de levantarse del sueño (arduino)

0

He hecho un clon de arduino que tiene un sensor PIR, tengo la intención de ejecutarlo en 2AA, estoy usando el convertidor de refuerzo LT1302, porque el sensor PIR funciona a 5 V, si se detecta movimiento, el mensaje se enviará a mi sitio web utilizando el tablero de ruptura cc3000 de adafruit. Todo está funcionando, pero ahora estoy agregando el bloque de código de suspensión para ahorrar energía. Para propósitos de prueba, escribí el siguiente código.

#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/wdt.h>

//PIR sensor,led and disconnect button
#define PIR 2  //INT 0 PIN 4
#define DISCONNECT 19//A5 pulled up, not used for now
#define LED 16 //A2 high on

volatile int pirState = LOW;             // we start, assuming no motion detected
volatile char sleep;
int val = 0;                    // variable for reading the pin status

void static inline pwrDown(void);

void setup() {
  ADCSRA = 0; //Disable ADC
  // turn off various modules
  //PRR =0x81; //0b10000001; TWI and ADC off
  // 7  1     0
  //TWI uart  ADC 
  pinMode(LED, OUTPUT);      // declare LED as output
  pinMode(PIR, INPUT);     // declare sensor as input
  Serial.begin(9600);
  attachInterrupt(0, motion, RISING); 
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); 
  sleep = 1;
  //  cli();
  //  pwrDown(); 
}

void loop(){ 
  delay(500);
  Serial.println(pirState);
  digitalWrite(LED,pirState);
  cli();
  pwrDown(); 
}

//ISR for INT0
void motion() {
  pirState = !pirState; 

}
void static inline pwrDown(void)
{   
  //PRR =0xFF; //turn off all modules 
  MCUCR = MCUCR | bit(BODSE) | bit(BODS); //timed sequence
  MCUCR = MCUCR & ~bit(BODSE) | bit(BODS);//to turn off BOD in sleep
  sei(); //enable int
  sleep_mode(); //sleeping set SE got sleep and clear SE when waking up
  //sleep_enable(); //slee_mode() does all three.
  //sleep_cpu();
  //sleep_disable();
  // PRR =0x81; //0b10000011; turn off all except uart and spi
  //  sleep = 0;
} 

Al funcionar, el LED se enciende y se apaga como se supone que debe hacerlo, el bucle no se ejecuta de manera continua significa que el AVR está en modo de apagado, pero para Serial.println obtengo un valor de basura. por ejemplo, j para 1 y Lc para 0

    
pregunta Hemal Chevli

1 respuesta

1

Solo un disparo en la oscuridad, pero ¿necesitas probar y asegurarte de que todo el personaje se transmite antes de decirle al procesador que duerma?

    
respondido por el Jeff

Lea otras preguntas en las etiquetas