Ардуино вернулось перевернутым? в последовательном использовании Serial.println () - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время я пытаюсь построить автоматическое устройство подачи c fi sh; в основном он просто включает сервопривод для выпуска еды каждые 24 часа. Я использую следующие компоненты:

  • Arduino Uno
  • MicroServo 9g
  • 9 В Аккумулятор (для питания)

Я бы Я хотел бы уточнить, что я новичок в Arduino, и я только что понял, что Arduino Uno не будет работать в течение дня с батареей 9v. Поэтому я посмотрел онлайн и обнаружил, что могу перевести его в спящий режим с помощью WatchDog. Однако, я в настоящее время отлаживаю это, поскольку это продолжает печатать перевернутое? и / или случайные символы в последовательном мониторе. Я хотел бы знать, работает ли мой код и / или как я могу решить эту проблему. Большое спасибо за ваш вклад! Вот мой код:

#include <Servo.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/sleep.h>
#include <avr/io.h>

//innitialize all variables
Servo myservo;

unsigned long timenow = 0;
unsigned long timebefore = 0;
unsigned long timebetween = 0;
const int buttonPin = 2;

const int servoDelay = 1500;
const int feedDelay = 3000;
const unsigned long dayTime = 86400000;
const unsigned long feedTime = 17000 -(2*servoDelay) - feedDelay; 
const unsigned long feedCycle = (feedTime/8000)+1;
bool feedstart = false;

int buttonState = 0;
unsigned long nbr_remaining = 0 ;

ISR(WDT_vect){
  wdt_reset();
}

void setup() {
  // attaching servo to digital input/output 9
  myservo.attach(9);
  myservo.write(0);
  Serial.begin(9600);
  //button setup 
  pinMode(buttonPin, INPUT);
  digitalWrite(buttonPin, HIGH);
  configure_wdt();
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if(buttonState == LOW){
    feedstart = true;
  }
  if(feedstart){
    dispenseFood();
    Serial.println("Print here!");
    sleepControl(feedCycle);
  }
}

void configure_wdt(){
  cli();
  MCUSR = 0;
  WDTCSR |= 0b00011000;
  WDTCSR = 0b01000000 | 0b100001;
  sei();
}

void sleepControl(unsigned long ncycles){
  nbr_remaining = ncycles;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  power_adc_disable();
  while (nbr_remaining > 0){
    sleep_mode();
    sleep_disable();
    nbr_remaining = nbr_remaining - 1;
  }
  power_all_enable();
}

void dispenseFood(){
  myservo.write(90);
  delay(servoDelay);
  delay(feedDelay);
  myservo.write(0);
  delay(servoDelay);
}

Кроме того, если у вас есть какие-либо советы о том, как уменьшить энергопотребление, пожалуйста, сообщите мне тоже! Большое спасибо за вашу помощь!

...