Go Down

Topic: auxilio código rtc ds 3231 (Read 1 time) previous topic - next topic

giova014

Por enquanto deixe o seu código de lado e use uma das bibliotecas mencionadas na resposta #7.

Carregue um dos exemplos para verificar o funcionamento do seu módulo DS3231.

Caso os exemplo não funcionem, vai ser necessário comprar outro módulo
Arduino!!

renatokappa30

entendi.
farei se possivel amanha noite hoje não tenho tempo
mas obrigado por enquanto.

renatokappa30

então baixei alguns daquelas bibliotecas.
e usei esta como exemplo
mas não sei o que é para acontecer pode me ajudar?

Code: [Select]
/*
DS3231_set.pde
Eric Ayars
4/11

Test of set-time routines for a DS3231 RTC

*/

#include <DS3231.h>
#include <Wire.h>

DS3231 Clock;

byte Year;
byte Month;
byte Date;
byte DoW;
byte Hour;
byte Minute;
byte Second;

void GetDateStuff(byte& Year, byte& Month, byte& Day, byte& DoW,
byte& Hour, byte& Minute, byte& Second) {
// Call this if you notice something coming in on
// the serial port. The stuff coming in should be in
// the order YYMMDDwHHMMSS, with an 'x' at the end.
boolean GotString = false;
char InChar;
byte Temp1, Temp2;
char InString[20];

byte j=0;
while (!GotString) {
if (Serial.available()) {
InChar = Serial.read();
InString[j] = InChar;
j += 1;
if (InChar == 'x') {
GotString = true;
}
}
}
Serial.println(InString);
// Read Year first
Temp1 = (byte)InString[0] -48;
Temp2 = (byte)InString[1] -48;
Year = Temp1*10 + Temp2;
// now month
Temp1 = (byte)InString[2] -48;
Temp2 = (byte)InString[3] -48;
Month = Temp1*10 + Temp2;
// now date
Temp1 = (byte)InString[4] -48;
Temp2 = (byte)InString[5] -48;
Day = Temp1*10 + Temp2;
// now Day of Week
DoW = (byte)InString[6] - 48;
// now Hour
Temp1 = (byte)InString[7] -48;
Temp2 = (byte)InString[8] -48;
Hour = Temp1*10 + Temp2;
// now Minute
Temp1 = (byte)InString[9] -48;
Temp2 = (byte)InString[10] -48;
Minute = Temp1*10 + Temp2;
// now Second
Temp1 = (byte)InString[11] -48;
Temp2 = (byte)InString[12] -48;
Second = Temp1*10 + Temp2;
}

void setup() {
// Start the serial port
Serial.begin(57600);

// Start the I2C interface
Wire.begin();
}

void loop() {

// If something is coming in on the serial line, it's
// a time correction so set the clock accordingly.
if (Serial.available()) {
GetDateStuff(Year, Month, Date, DoW, Hour, Minute, Second);

Clock.setClockMode(false); // set to 24h
//setClockMode(true); // set to 12h

Clock.setYear(Year);
Clock.setMonth(Month);
Clock.setDate(Date);
Clock.setDoW(DoW);
Clock.setHour(Hour);
Clock.setMinute(Minute);
Clock.setSecond(Second);

// Test of alarm functions
// set A1 to one minute past the time we just set the clock
// on current day of week.
Clock.setA1Time(DoW, Hour, Minute+1, Second, 0x0, true,
false, false);
// set A2 to two minutes past, on current day of month.
Clock.setA2Time(Date, Hour, Minute+2, 0x0, false, false,
false);
// Turn on both alarms, with external interrupt
Clock.turnOnAlarm(1);
Clock.turnOnAlarm(2);

}
delay(1000);
}


tem que aparecer algo no monitor serial?
pois não aparece nada


giova014

#18
Dec 19, 2018, 11:28 am Last Edit: Dec 19, 2018, 11:28 am by giova014
Quote
mas não sei o que é para acontecer pode me ajudar?
Tinha vários exemplos, porque usou esse DS3231_set.pde?

Quote
tem que aparecer algo no monitor serial?
Você leu o código para saber o que faz?

Como ele tem "set" no nome e de acordo com o código, presume-se que você tem que entrar com valores no Serial para definir a data/hora.

Essa biblioteca do Eric Ayars é muito antiga (5 anos) e não tem uma boa documentação.

Use esta do Rinky-Dink:
DS3231 - Rinky-Dink
E leia o manual da biblioteca:
DS3231 - Manual

Teste com algum exemplo e verifique se o módulo está funcionando corretamente.
Arduino!!

renatokappa30

ok amigo obrigado pela paciência em estar dando este suporte.
vou ler manual e baixar programa e testar hoje noite.

renatokappa30

boa noite
amigo giova 014


deu certo
 com este código rtc funcionando perfeito mostrando no serial monitor,  dia da semana hora minuto segundo certinho.


agora vou estudar mais sobre os dois codigos,
e tentar trazer o que eu tinha anteriormente para dentro deste.
 muito obrigado até o momento.







Code: [Select]
// DS3231_Serial_Easy
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS3231-library to
// quickly send time and date information over a serial link
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// DS3231:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//          SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the
// hardware I2C interfaces.
//
// You can connect the DS3231 to any available pin but if you use any
// other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

void setup()
{
  // Setup Serial connection
  Serial.begin(115200);
  // Uncomment the next line if you are using an Arduino Leonardo
  //while (!Serial) {}
 
  // Initialize the rtc object
  rtc.begin();
 
  // The following lines can be uncommented to set the date and time
  rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
 
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
 
  // Wait one second before repeating :)
  delay (1000);
}








renatokappa30

Giova014 como apenas você tem me ajudado me dirijo diretamente a você.
tentei de algumas maneiras resolver o caso de acionamento dos reles com a biblioteca do rtc indicada.
segue abaixo cogigo que tentei mesclando dois codigos,

pode me ajudar?


está dando mensagem de erro do "if"

não sei mais o que fazer

Code: [Select]

// DS3231_Serial_Easy
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS3231-library to
// quickly send time and date information over a serial link
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// DS3231:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//          SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the
// hardware I2C interfaces.
//
// You can connect the DS3231 to any available pin but if you use any
// other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <DS3231.h>
int segundos;
int minutos;
int horas;
int diadasemana;
int diadomes;
int mes;
int ano;
byte zero = 0x00;
int rele1 = 7;
int rele2 = 8;
int rele3 = 9;
int rele4 = 10;

bool ligarele1;
bool ligarele2;
bool ligarele3;
bool ligarele4;


// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

void setup()
{
pinMode(rele1, OUTPUT);
digitalWrite(rele1, HIGH);
pinMode(rele2, OUTPUT);
digitalWrite(rele2, HIGH);
pinMode(rele3, OUTPUT);
digitalWrite(rele3, HIGH);
pinMode(rele4, OUTPUT);
digitalWrite(rele4, HIGH);
ligarele1 = false;
ligarele2 = false;
ligarele3 = false;
ligarele4 = false;
 



  // Setup Serial connection
  Serial.begin(115200);
  // Uncomment the next line if you are using an Arduino Leonardo
  //while (!Serial) {}
  }
byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
return ( (val/10*16) + (val%10) );
}
byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
return ( (val/16*10) + (val%16) );
}
void Mostrarelogio()
{
  // Initialize the rtc object
  rtc.begin();
 
  // The following lines can be uncommented to set the date and time
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
}
if ((horas >= 8) and (minutos <= 00) and (!ligarele1)) {
ligarele1 = true;
digitalWrite(rele1, LOW);}
if ((horas >= 8) and (minutos <= 30) and (!ligarele2)) {
ligarele2 = true;
digitalWrite(rele2, LOW);}
if ((horas >= 9) and (minutos <= 00) and (!ligarele3)) {
ligarele3 = true;
digitalWrite(rele3, LOW);}
if ((horas >= 9) and (minutos <= 30) and (!ligarele4)) {
ligarele4 = true;
digitalWrite(rele4, LOW);}

if ((horas >= 20) and (minutos <= 00) and (ligarele1)) {
ligarele1 = false;
digitalWrite(rele1, HIGH);}
if ((horas >= 20) and (minutos <= 30) and (ligarele2)) {
ligarele2 = false;
digitalWrite(rele2, HIGH);}
if ((horas >= 21) and (minutos <= 00) and (ligarele3)) {
ligarele3 = false;
digitalWrite(rele3, HIGH);}
if ((horas >= 21) and (minutos <= 30) and (ligarele4)) {
ligarele4 = false;
digitalWrite(rele4, HIGH);}
}
void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
 
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
 
  // Wait one second before repeating :)
  delay (1000);
}

Go Up