Hello, Iknow little about arduino coding. i want to make an arduino multiple timer, found here https://www.instructables.com/id/Arduino-multiple-timer-Day-based-and-alarm-based/
This is rtc ds1307 based code, but i want to use rtc ds3234. Please help me to modify this code , so that it works with ds3234.
Here is the code
#include "Wire.h"
#include "LiquidCrystal.h"
#include "math.h"
#include "EEPROM.h"
#define DS1307_I2C_ADDRESS 0x68
#define PIN_STG 8
#define PIN_MENU 2
#define PIN_DR 10
#define PIN_COMMAND_A A1 //releu A
#define PIN_COMMAND_B A2 //releu B
#define PIN_COMMAND_C A3 //releu C
#define PIN_COMMAND_D A0 //releu D
#define PIN_COMMAND_E 7 //releu E
#define PIN_COMMAND_F 9 //releu F
#define PIN_COMMAND_G 13 //releu G
#define DESCHIS LOW
#define INCHIS HIGH
#define NR_ALARME 6
#define MAX_MENU_POS NR_ALARME*4+3 //trebuie sa fie NR_ALARME*4+3
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
byte menuPos=0;
byte subMenuPos = 0;
byte cursorPos = -1;
char linia1[17];
char linia2[17];
char linia[17];
boolean dataDirthy = false;
boolean oraDirthy = false;
long lastMillis=0;
boolean bAlarma = false;
typedef struct alarm{
byte hour;
byte minute;
byte days;
byte duration;
byte relee;
byte unitAlarma;
};
typedef struct ds1307_time{
byte second;
byte minute;
byte hour;
byte dayOfWeek;
byte dayOfMonth;
byte month;
byte year;
};
struct ds1307_time time;
alarm* alarme = (alarm*) malloc(sizeof(alarm) * NR_ALARME);
byte relee[]={PIN_COMMAND_G, PIN_COMMAND_F,PIN_COMMAND_E,PIN_COMMAND_D,PIN_COMMAND_C,PIN_COMMAND_B,PIN_COMMAND_A};
byte decToBcd(byte val){
return ((val/10*16)+(val%10));
}
byte bcdToDec(byte val){
return ((val/16*10)+(val%16));
}
void setDateDs1307(struct ds1307_time time)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(time.second));
Wire.write(decToBcd(time.minute));
Wire.write(decToBcd(time.hour));
Wire.write(decToBcd(time.dayOfWeek));
Wire.write(decToBcd(time.dayOfMonth));
Wire.write(decToBcd(time.month));
Wire.write(decToBcd(time.year));
Wire.endTransmission();
}
void getDateDs1307(struct ds1307_time *time)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS,7);
(*time).second = bcdToDec(Wire.read() & 0x7f);
(*time).minute = bcdToDec(Wire.read());
(*time).hour = bcdToDec(Wire.read() & 0x3f);
(*time).dayOfWeek = bcdToDec(Wire.read());
(*time).dayOfMonth = bcdToDec(Wire.read());
(*time).month = bcdToDec(Wire.read());
(*time).year = bcdToDec(Wire.read());
}
void showMenu(){
char *zile[7];
zile[0]="L\0";
zile[1]="M\0";
zile[2]="M\0";
zile[3]="J\0";
zile[4]="V\0";
zile[5]="S\0";
zile[6]="D\0";
if(menuPos==1){
strcpy(linia1,"Data\0");
strcpy(linia2,getDate(time));
strcat(linia2," ");
strcat(linia2,getZiuaSaptamaniiShort(time.dayOfWeek));
}else if(menuPos==2){
strcpy(linia1,"Ora\0");
strcpy(linia2,getTime(time));
}else if((menuPos+1)%4==0){ //incepand cu 3, din 4 in 4 avem ora alarmei
strcpy(linia1,"Alarma ");
linia1[7] = 48+(byte)((menuPos+1)/4)/10;
linia1[8] = 48+(byte)(((menuPos+1)/4)-((menuPos+1)/4)/10*10);
linia1[9]='\0';
strcat(linia1," ora\0");
strcpy(linia2,getFmt2Char((alarme[(menuPos+1)/4-1]).hour));
strcat(linia2,":");
strcat(linia2,getFmt2Char((alarme[(menuPos+1)/4-1]).minute));
strcat(linia2," ");
}else if((menuPos)%4==0){ //incepand cu 4, din 4 in 4 avem zielele alarmei
strcpy(linia1,"Alarma ");
linia1[7] = 48+(byte)((menuPos)/4)/10;
linia1[8] = 48+(byte)((menuPos)/4-(menuPos)/4/10*10);
linia1[9]='\0';
strcat(linia1," zile\0");
strcpy(linia2,"L");
for(int i=6;i>=0;i--){
if((alarme[(menuPos)/4-1]).days & (byte)ceil(pow(2,i))){
strcat(linia2,"X");
}else{
strcat(linia2," ");
}
if(i>0)strcat(linia2,zile[7-i]);
}
}else if((menuPos-1)%4==0){ //incepand cu 5, din 4 in 4 avem durata alarmei
strcpy(linia1,"Alarma ");
linia1[7] = 48+(byte)((menuPos-1)/4)/10;
linia1[8] = 48+(byte)((menuPos-1)/4-(menuPos-1)/4/10*10);
linia1[9]='\0';
strcat(linia1," durata\0");
itoa(alarme[(menuPos-1)/4-1].duration,linia2,10);
if(alarme[(menuPos-1)/4-1].unitAlarma){
strcat(linia2," min");
}else{
strcat(linia2," sec");
}
}else if((menuPos-2)%4==0){ //incepand cu 6 din 4 in 4 avem releele activate de alarma
strcpy(linia1,"Relee alarma ");
linia1[13]= 48+(byte)((menuPos-2)/4)/10;
linia1[14]= 48+(byte)((menuPos-2)/4-(menuPos-2)/4/10*10);
linia1[15]='\0';
strcpy(linia2,"");
for(int i=6;i>=0;i--){
char chBuff[2];
chBuff[0]=6-i+65;
chBuff[1]='\0';
strcat(linia2,chBuff);
if((alarme[(menuPos-2)/4-1]).relee & (byte)ceil(pow(2,i))){
strcat(linia2,"X");
}else{
strcat(linia2," ");
}
//if(i>0)strcat(linia2,zile[7-i]);
}
}
}
//punem cursorul in functie de locatia noastra in sumbeniu
void showSubMenu(){
if(menuPos==1 || menuPos==2){ //data sau ora
switch(subMenuPos){
case 1://zile
cursorPos = 1;
break;
case 2://luni
cursorPos = 4;
break;
case 3://ani
cursorPos = 7;
break;
case 4://ziua saptamanii
if(menuPos==1){//doar in cazul datei avem si ziua saptamanii
cursorPos=12;
break;
}
default:
subMenuPos = 0;
cursorPos = -1;
break;
}
}else if((menuPos+1)%4==0){ //ora alarmelor
switch(subMenuPos){
case 1: //ora
cursorPos = 1;
break;
case 2: //minutul
cursorPos = 4;
break;
default:
subMenuPos = 0;
cursorPos = -1;
break;
}
}else if((menuPos)%4==0){ //zilele alarmelor
if(subMenuPos>0 && subMenuPos<8){
cursorPos = subMenuPos*2-1;
}else{
subMenuPos = 0;
cursorPos = -1;
}
}else if((menuPos-1)%4==0){ //durata alarmelor
if(subMenuPos==1){
cursorPos = 0;
}else if(subMenuPos==2){
cursorPos=4;
}else{
subMenuPos=0;
cursorPos = -1;
}
}else if((menuPos-2)%4==0){ //releele alarmelor
if(subMenuPos>0 && subMenuPos<8){
cursorPos = subMenuPos*2-1;
}else{
subMenuPos = 0;
cursorPos = -1;
}
}
}
As this is long code, i can’t post it in one message. If you need further i will post it in my next post. Or can be found on the link above.
Thanks in advance