1

プロジェクトに Arduino mini 5V と RTC - Real Time Clock Module DS1307 を使用しています。特定の時間にボードを起動して機能を実行したいと考えています。(ブザーはD3に接続)

TimeAlarm を単独で使用して時間を手動で設定すると、すべて正常に動作します。

#include "Time.h"
#include "TimeAlarms.h"

void setup(){
  setTime(22,29,55,12,31,14); // set time to Saturday 8:29:00am Jan 1 2011

  Alarm.alarmRepeat(10,30,0,buzz);  // 10:30am every day
  Alarm.alarmRepeat(16,30,0,buzz);  // 4:30pm every day 
  Alarm.alarmRepeat(22,30,0,buzz);  // 10:30pm every day 

  Serial.begin(9600);
}

void loop(){
  digitalClockDisplay();
  Alarm.delay(1000);
}

void buzz(){
   tone(3, 220, 1000);
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); 
}

void printDigits(int digits){
  Serial.print(":");
  if(digits < 10)
  Serial.print('0');
  Serial.print(digits);
}

ただし、RTC を使用するとブザー機能が呼び出されず、時刻は表示されます

#include <Wire.h>
#include "RTClib.h"
#include "Time.h"
#include "TimeAlarms.h"

RTC_Millis rtc;

void setup(){
  rtc.begin(DateTime(F(__DATE__), F(__TIME__)));

  Alarm.alarmRepeat(10,30,0,buzz);  // 10:30am every day
  Alarm.alarmRepeat(16,30,0,buzz);  // 4:30pm every day 
  Alarm.alarmRepeat(22,30,0,buzz);  // 10:30pm every day -- modify this to your current time when running the example

  Serial.begin(9600);
}

void loop(){
  //printing the current time
  DateTime now = rtc.now();

  Serial.print(now.year());
  Serial.print('/');
  Serial.print(now.month());
  Serial.print('/');
  Serial.print(now.day());
  Serial.print(' ');
  Serial.print(now.hour());
  Serial.print(':');
  Serial.print(now.minute());
  Serial.print(':');
  Serial.print(now.second());
  Serial.println();
  Alarm.delay(1000); // wait one second between clock display
}

void buzz(){
  tone(3, 220, 1000);
}
4

2 に答える 2

2

わかりましたので、答えを見つけました:

最初の問題は、RTC_Millis の代わりに RTC_DS1307 を使用することでした。

RTC ds1307 は、Arduino mini では A3 および VCC より上にあるピン 12C を参照しています。はんだ付けが必要です。それが完了したら、M/F ワイヤを使用して SDA と SCL に接続する必要があります。

SDA -> to the pin above A3
SCL -> to the pin above VCC

次に、コードを次のように変更しました。

#include <Wire.h>
#include "RTClib.h"
#include "Time.h"
#include "TimeAlarms.h"

RTC_DS1307 rtc;
const int output = 3;

uint32_t syncProvider()//function which sets up the RTC as the source of external time{
  return rtc.now().unixtime();
}


void setup(){
  Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(__DATE__, __TIME__));//comment this out when the RTC has been set
  setSyncProvider(syncProvider);   // the function to get the time from the RTC


  Alarm.alarmRepeat(10,30,0,buzzer);  // 10:30am every day
  Alarm.alarmRepeat(16,30,0,buzzer);  // 4:30pm every day 
  Alarm.alarmRepeat(22,30,00,buzzer);  // 10:30pm every day 

  pinMode(output , OUTPUT);//new line
  Serial.begin(9600);
}

void loop(){

  //printing the current time
  DateTime now = rtc.now();

  Serial.print(now.year());
  Serial.print('/');
  Serial.print(now.month());
  Serial.print('/');
  Serial.print(now.day());
  Serial.print(' ');
  Serial.print(now.hour());
  Serial.print(':');
  Serial.print(now.minute());
  Serial.print(':');
  Serial.print(now.second());
  Serial.println();
  Alarm.delay(1000); // wait one second between clock display
}

void buzzer(){
 //Do Stuff
}
于 2015-01-01T22:43:03.453 に答える
0

コピーペーストを使用してこのコードを試してエラーを取得した私のような初心者を助けるためだけに

名前付きの戻り値はサポートされなくなりました コンパイル エラー。

ネットを検索した後、{悪名高い中括弧はコメントの一部であるため、同じものを次のように変更してください

uint32_t syncProvider() { //function which sets up the RTC as the source of external time       
       return rtc . now() . unixtime(); 
   }
于 2017-03-05T01:47:46.770 に答える