the program have one sensor acs712 and moduleds1302
Dependencies: FATFileSystem mbed
DS1302.cpp
- Committer:
- RUBENTEC
- Date:
- 2017-06-08
- Revision:
- 0:b82abca089ac
File content as of revision 0:b82abca089ac:
#include "DS1302.h" DS1302::DS1302(PinName SCLK, PinName IO, PinName CE) : _SCLK(SCLK), _IO(IO), _CE(CE) { _CE = 0; _SCLK = 0; _IO.input(); writeProtect = true; } void DS1302::set_time(time_t t) { struct tm *_t = localtime(&t); writeReg(Seconds, (_t->tm_sec % 10) + ((_t->tm_sec / 10) << 4)); writeReg(Minutes, (_t->tm_min % 10) + ((_t->tm_min / 10) << 4)); writeReg(Hours, (_t->tm_hour % 10) + ((_t->tm_hour / 10) << 4)); writeReg(Dates, (_t->tm_mday % 10) + ((_t->tm_mday / 10) << 4)); writeReg(Months, ((_t->tm_mon + 1) % 10) + (((_t->tm_mon + 1) / 10) << 4)); writeReg(Days, _t->tm_wday + 1); writeReg(Years, ((_t->tm_year - 100) % 10) + (((_t->tm_year - 100) / 10) << 4)); } time_t DS1302::time(time_t *t) { char regs[7]; _CE = 1; wait_us(4); writeByte(ClockBurst | 1); for (int i = 0; i<7; i++) regs[i] = readByte(); _CE = 0; struct tm _t; _t.tm_sec = (regs[0] & 0xF) + (regs[0] >> 4) * 10; _t.tm_min = (regs[1] & 0xF) + (regs[1] >> 4) * 10; _t.tm_hour = (regs[2] & 0xF) + (regs[2] >> 4) * 10; _t.tm_mday = (regs[3] & 0xF) + (regs[3] >> 4) * 10; _t.tm_mon = (regs[4] & 0xF) + (regs[4] >> 4) * 10 - 1; _t.tm_year = (regs[6] & 0xF) + (regs[6] >> 4) * 10 + 100; // convert to timestamp and display (1256729737) return mktime(&_t); } void DS1302::storeByte(char address, char data) { if (address > 30) return; char command = RAMBase + (address << 1); writeReg(command, data); } char DS1302::recallByte(char address) { if (address > 30) return 0; char command = RAMBase + (address << 1) + 1; return readReg(command); } char DS1302::readReg(char reg) { char retval; _CE = 1; wait_us(4); writeByte(reg); retval = readByte(); wait_us(4); _CE = 0; return retval; } void DS1302::writeReg(char reg, char val) { if (writeProtect) { writeProtect = false; writeReg(WriteProtect, 0); } _CE = 1; wait_us(4); writeByte(reg); writeByte(val); wait_us(4); _CE = 0; } /*********************PRIVATE***********************/ void DS1302::writeByte(char data) { _IO.output(); for (int i = 0; i<8; i++) { _IO = data & 0x01; wait_us(1); _SCLK = 1; wait_us(1); _SCLK = 0; data >>= 1; } _IO.input(); } char DS1302::readByte(void) { char retval = 0; _IO.input(); for (int i = 0; i<8; i++) { retval |= _IO << i; wait_us(1); _SCLK = 1; wait_us(1); _SCLK = 0; } return retval; }