the program have one sensor acs712 and moduleds1302

Dependencies:   FATFileSystem mbed

Committer:
RUBENTEC
Date:
Thu Jun 08 20:17:34 2017 +0000
Revision:
0:b82abca089ac
ds1302-bluetooth-acs712

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RUBENTEC 0:b82abca089ac 1 #include "DS1302.h"
RUBENTEC 0:b82abca089ac 2
RUBENTEC 0:b82abca089ac 3 DS1302::DS1302(PinName SCLK, PinName IO, PinName CE) : _SCLK(SCLK), _IO(IO), _CE(CE)
RUBENTEC 0:b82abca089ac 4 {
RUBENTEC 0:b82abca089ac 5 _CE = 0;
RUBENTEC 0:b82abca089ac 6 _SCLK = 0;
RUBENTEC 0:b82abca089ac 7 _IO.input();
RUBENTEC 0:b82abca089ac 8 writeProtect = true;
RUBENTEC 0:b82abca089ac 9 }
RUBENTEC 0:b82abca089ac 10
RUBENTEC 0:b82abca089ac 11 void DS1302::set_time(time_t t)
RUBENTEC 0:b82abca089ac 12 {
RUBENTEC 0:b82abca089ac 13 struct tm *_t = localtime(&t);
RUBENTEC 0:b82abca089ac 14 writeReg(Seconds, (_t->tm_sec % 10) + ((_t->tm_sec / 10) << 4));
RUBENTEC 0:b82abca089ac 15 writeReg(Minutes, (_t->tm_min % 10) + ((_t->tm_min / 10) << 4));
RUBENTEC 0:b82abca089ac 16 writeReg(Hours, (_t->tm_hour % 10) + ((_t->tm_hour / 10) << 4));
RUBENTEC 0:b82abca089ac 17 writeReg(Dates, (_t->tm_mday % 10) + ((_t->tm_mday / 10) << 4));
RUBENTEC 0:b82abca089ac 18 writeReg(Months, ((_t->tm_mon + 1) % 10) + (((_t->tm_mon + 1) / 10) << 4));
RUBENTEC 0:b82abca089ac 19 writeReg(Days, _t->tm_wday + 1);
RUBENTEC 0:b82abca089ac 20 writeReg(Years, ((_t->tm_year - 100) % 10) + (((_t->tm_year - 100) / 10) << 4));
RUBENTEC 0:b82abca089ac 21 }
RUBENTEC 0:b82abca089ac 22
RUBENTEC 0:b82abca089ac 23 time_t DS1302::time(time_t *t)
RUBENTEC 0:b82abca089ac 24 {
RUBENTEC 0:b82abca089ac 25 char regs[7];
RUBENTEC 0:b82abca089ac 26 _CE = 1;
RUBENTEC 0:b82abca089ac 27 wait_us(4);
RUBENTEC 0:b82abca089ac 28 writeByte(ClockBurst | 1);
RUBENTEC 0:b82abca089ac 29 for (int i = 0; i<7; i++)
RUBENTEC 0:b82abca089ac 30 regs[i] = readByte();
RUBENTEC 0:b82abca089ac 31 _CE = 0;
RUBENTEC 0:b82abca089ac 32
RUBENTEC 0:b82abca089ac 33 struct tm _t;
RUBENTEC 0:b82abca089ac 34 _t.tm_sec = (regs[0] & 0xF) + (regs[0] >> 4) * 10;
RUBENTEC 0:b82abca089ac 35 _t.tm_min = (regs[1] & 0xF) + (regs[1] >> 4) * 10;
RUBENTEC 0:b82abca089ac 36 _t.tm_hour = (regs[2] & 0xF) + (regs[2] >> 4) * 10;
RUBENTEC 0:b82abca089ac 37 _t.tm_mday = (regs[3] & 0xF) + (regs[3] >> 4) * 10;
RUBENTEC 0:b82abca089ac 38 _t.tm_mon = (regs[4] & 0xF) + (regs[4] >> 4) * 10 - 1;
RUBENTEC 0:b82abca089ac 39 _t.tm_year = (regs[6] & 0xF) + (regs[6] >> 4) * 10 + 100;
RUBENTEC 0:b82abca089ac 40
RUBENTEC 0:b82abca089ac 41 // convert to timestamp and display (1256729737)
RUBENTEC 0:b82abca089ac 42 return mktime(&_t);
RUBENTEC 0:b82abca089ac 43 }
RUBENTEC 0:b82abca089ac 44
RUBENTEC 0:b82abca089ac 45 void DS1302::storeByte(char address, char data)
RUBENTEC 0:b82abca089ac 46 {
RUBENTEC 0:b82abca089ac 47 if (address > 30)
RUBENTEC 0:b82abca089ac 48 return;
RUBENTEC 0:b82abca089ac 49 char command = RAMBase + (address << 1);
RUBENTEC 0:b82abca089ac 50 writeReg(command, data);
RUBENTEC 0:b82abca089ac 51 }
RUBENTEC 0:b82abca089ac 52
RUBENTEC 0:b82abca089ac 53 char DS1302::recallByte(char address)
RUBENTEC 0:b82abca089ac 54 {
RUBENTEC 0:b82abca089ac 55 if (address > 30)
RUBENTEC 0:b82abca089ac 56 return 0;
RUBENTEC 0:b82abca089ac 57 char command = RAMBase + (address << 1) + 1;
RUBENTEC 0:b82abca089ac 58 return readReg(command);
RUBENTEC 0:b82abca089ac 59 }
RUBENTEC 0:b82abca089ac 60
RUBENTEC 0:b82abca089ac 61 char DS1302::readReg(char reg)
RUBENTEC 0:b82abca089ac 62 {
RUBENTEC 0:b82abca089ac 63 char retval;
RUBENTEC 0:b82abca089ac 64
RUBENTEC 0:b82abca089ac 65 _CE = 1;
RUBENTEC 0:b82abca089ac 66 wait_us(4);
RUBENTEC 0:b82abca089ac 67 writeByte(reg);
RUBENTEC 0:b82abca089ac 68 retval = readByte();
RUBENTEC 0:b82abca089ac 69 wait_us(4);
RUBENTEC 0:b82abca089ac 70 _CE = 0;
RUBENTEC 0:b82abca089ac 71 return retval;
RUBENTEC 0:b82abca089ac 72 }
RUBENTEC 0:b82abca089ac 73
RUBENTEC 0:b82abca089ac 74 void DS1302::writeReg(char reg, char val)
RUBENTEC 0:b82abca089ac 75 {
RUBENTEC 0:b82abca089ac 76 if (writeProtect) {
RUBENTEC 0:b82abca089ac 77 writeProtect = false;
RUBENTEC 0:b82abca089ac 78 writeReg(WriteProtect, 0);
RUBENTEC 0:b82abca089ac 79 }
RUBENTEC 0:b82abca089ac 80 _CE = 1;
RUBENTEC 0:b82abca089ac 81 wait_us(4);
RUBENTEC 0:b82abca089ac 82 writeByte(reg);
RUBENTEC 0:b82abca089ac 83 writeByte(val);
RUBENTEC 0:b82abca089ac 84 wait_us(4);
RUBENTEC 0:b82abca089ac 85 _CE = 0;
RUBENTEC 0:b82abca089ac 86 }
RUBENTEC 0:b82abca089ac 87
RUBENTEC 0:b82abca089ac 88
RUBENTEC 0:b82abca089ac 89 /*********************PRIVATE***********************/
RUBENTEC 0:b82abca089ac 90 void DS1302::writeByte(char data)
RUBENTEC 0:b82abca089ac 91 {
RUBENTEC 0:b82abca089ac 92 _IO.output();
RUBENTEC 0:b82abca089ac 93 for (int i = 0; i<8; i++) {
RUBENTEC 0:b82abca089ac 94 _IO = data & 0x01;
RUBENTEC 0:b82abca089ac 95 wait_us(1);
RUBENTEC 0:b82abca089ac 96 _SCLK = 1;
RUBENTEC 0:b82abca089ac 97 wait_us(1);
RUBENTEC 0:b82abca089ac 98 _SCLK = 0;
RUBENTEC 0:b82abca089ac 99 data >>= 1;
RUBENTEC 0:b82abca089ac 100 }
RUBENTEC 0:b82abca089ac 101 _IO.input();
RUBENTEC 0:b82abca089ac 102 }
RUBENTEC 0:b82abca089ac 103
RUBENTEC 0:b82abca089ac 104 char DS1302::readByte(void)
RUBENTEC 0:b82abca089ac 105 {
RUBENTEC 0:b82abca089ac 106 char retval = 0;
RUBENTEC 0:b82abca089ac 107
RUBENTEC 0:b82abca089ac 108 _IO.input();
RUBENTEC 0:b82abca089ac 109 for (int i = 0; i<8; i++) {
RUBENTEC 0:b82abca089ac 110 retval |= _IO << i;
RUBENTEC 0:b82abca089ac 111 wait_us(1);
RUBENTEC 0:b82abca089ac 112 _SCLK = 1;
RUBENTEC 0:b82abca089ac 113 wait_us(1);
RUBENTEC 0:b82abca089ac 114 _SCLK = 0;
RUBENTEC 0:b82abca089ac 115 }
RUBENTEC 0:b82abca089ac 116 return retval;
RUBENTEC 0:b82abca089ac 117 }