Kevin Braun / Mbed 2 deprecated KL25Z-rtc_i2c-100a

Dependencies:   MMA8451Q TSI mbed

Fork of KL25Z-rtc_i2c-100 by Kevin Braun

Committer:
loopsva
Date:
Mon Mar 03 20:04:13 2014 +0000
Revision:
2:2d1f4fbbcbb6
Parent:
1:c9bed9dbeed5
Save code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:20719c1a48f7 1 #include "mbed.h"
loopsva 0:20719c1a48f7 2 #include "TSISensor.h" //touch sensor
loopsva 0:20719c1a48f7 3 #include "MMA8451Q.h" //accelerometer
loopsva 0:20719c1a48f7 4
loopsva 0:20719c1a48f7 5 int revision = 100;
loopsva 0:20719c1a48f7 6
loopsva 0:20719c1a48f7 7 Serial pc(USBTX, USBRX); //tx, rx
loopsva 0:20719c1a48f7 8
loopsva 0:20719c1a48f7 9 MMA8451Q acc(PTE25, PTE24, 0x3a); //accelerometer
loopsva 0:20719c1a48f7 10 I2C i2c0(PTE0, PTE1); //i2c bus 0
loopsva 0:20719c1a48f7 11 I2C i2c1(PTE25, PTE24); //i2c bus 1
loopsva 0:20719c1a48f7 12
loopsva 0:20719c1a48f7 13 #define LED_ON 0
loopsva 0:20719c1a48f7 14 #define LED_OFF 1
loopsva 0:20719c1a48f7 15 DigitalOut rled(LED_RED); //KL25Z red led
loopsva 0:20719c1a48f7 16 DigitalOut gled(LED_GREEN); //KL25Z green led
loopsva 0:20719c1a48f7 17 // DO NOT Use LED_BLUE - pin PTD1 already in use by WiFi chip
loopsva 0:20719c1a48f7 18
loopsva 0:20719c1a48f7 19 int gDebug = 1; //global debug print flag
loopsva 0:20719c1a48f7 20
loopsva 0:20719c1a48f7 21 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 22 //RTC specific variables and constants
loopsva 0:20719c1a48f7 23
loopsva 0:20719c1a48f7 24 #define TBUFLEN 10 //size of smaller ascii time buffers
loopsva 0:20719c1a48f7 25 time_t ctTime; //time structure
loopsva 0:20719c1a48f7 26 int DST = 0; //Daylight Saving Time (or as defined in .ini file)
loopsva 0:20719c1a48f7 27 int TZone = -8; //Time Zone from UTC (or as defined in .ini file)
loopsva 0:20719c1a48f7 28 char timebuf_hm[TBUFLEN]; //local time format buffer - 21:16
loopsva 0:20719c1a48f7 29 char timebuf_hms[TBUFLEN]; //local time format buffer - 21:16:43
loopsva 0:20719c1a48f7 30 char timebuf_mdy[TBUFLEN]; //local time format buffer - 04/01/14
loopsva 0:20719c1a48f7 31 char timebuf_dMyy[TBUFLEN + 4]; //local time format buffer - 01-Apr-2014
loopsva 0:20719c1a48f7 32
loopsva 0:20719c1a48f7 33 int BootTime = 0; //RTC at boot up
loopsva 0:20719c1a48f7 34 int StartTime = 0; //time we powered up
loopsva 0:20719c1a48f7 35 int SysUpTime = 0; //time we've been alive
loopsva 0:20719c1a48f7 36 int EventTime = 0; //for 143 debug, next time to save data in EVENTS.CSV
loopsva 0:20719c1a48f7 37 int RTCupdate = 0; //time until next NTP update timer
loopsva 0:20719c1a48f7 38
loopsva 0:20719c1a48f7 39 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 40 // Print build date / time Note: display is UTC, not local time
loopsva 0:20719c1a48f7 41 // Adafruit CC3000 WiFi Shield with uFL Connector for Ext Antenna
loopsva 0:20719c1a48f7 42 // http://www.adafruit.com/products/1534
loopsva 0:20719c1a48f7 43
loopsva 0:20719c1a48f7 44 void printBuildDate() {
loopsva 0:20719c1a48f7 45 pc.printf("KL25Z / WWVB Tests v%d build: " __DATE__ " " __TIME__ "(UTC) K Braun\n", revision);
loopsva 0:20719c1a48f7 46 }
loopsva 0:20719c1a48f7 47
loopsva 0:20719c1a48f7 48 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 49 // initial splash display
loopsva 0:20719c1a48f7 50
loopsva 0:20719c1a48f7 51 void initSplash() {
loopsva 0:20719c1a48f7 52 pc.printf("\n\n");
loopsva 0:20719c1a48f7 53 pc.printf("-------------------------------------------------------------------\n");
loopsva 0:20719c1a48f7 54 printBuildDate();
loopsva 0:20719c1a48f7 55 }
loopsva 0:20719c1a48f7 56
loopsva 0:20719c1a48f7 57 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 58 //Detect I2C device chain
loopsva 0:20719c1a48f7 59
loopsva 0:20719c1a48f7 60 extern I2C i2c0;
loopsva 0:20719c1a48f7 61 extern I2C i2c1;
loopsva 0:20719c1a48f7 62
loopsva 0:20719c1a48f7 63 int dispI2C(int i2cchain) {
loopsva 0:20719c1a48f7 64 int count = 0;
loopsva 0:20719c1a48f7 65 for (int address = 2; address < 256; address +=2) {
loopsva 0:20719c1a48f7 66 if(((i2cchain == 0) && (!i2c0.write(address, NULL, 0))) || ((i2cchain == 1) && (!i2c1.write(address, NULL, 0)))) {
loopsva 0:20719c1a48f7 67 wait_us(50);
loopsva 0:20719c1a48f7 68 pc.printf(" - i2c chain %d: device found at address 0x%02X \n", i2cchain, address);
loopsva 0:20719c1a48f7 69 count++;
loopsva 0:20719c1a48f7 70 }
loopsva 0:20719c1a48f7 71 }
loopsva 0:20719c1a48f7 72 return(count);
loopsva 0:20719c1a48f7 73 }
loopsva 0:20719c1a48f7 74 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 75 //Detect I2C device chain
loopsva 0:20719c1a48f7 76
loopsva 0:20719c1a48f7 77 void find_i2c(int i2cbus) {
loopsva 0:20719c1a48f7 78 pc.printf("Searching for devices on i2c bus %d ...\n", i2cbus);
loopsva 0:20719c1a48f7 79 int count = dispI2C(i2cbus);
loopsva 0:20719c1a48f7 80 pc.printf(" - %2d devices found on i2c bus %d\n", count, i2cbus);
loopsva 0:20719c1a48f7 81 }
loopsva 0:20719c1a48f7 82
loopsva 0:20719c1a48f7 83 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 84 // Update time
loopsva 0:20719c1a48f7 85
loopsva 0:20719c1a48f7 86 void UpdateTime() {
loopsva 0:20719c1a48f7 87 ctTime = time(NULL) + ((TZone + DST) * 3600); //timezone and dst offsets
loopsva 0:20719c1a48f7 88 SysUpTime = ctTime - StartTime;
loopsva 0:20719c1a48f7 89 strftime(timebuf_mdy, TBUFLEN, "%m/%d/%y", localtime(&ctTime));
loopsva 0:20719c1a48f7 90 strftime(timebuf_dMyy, TBUFLEN * 2, "%d-%b-%Y", localtime(&ctTime));
loopsva 0:20719c1a48f7 91 strftime(timebuf_hm, TBUFLEN, "%H:%M", localtime(&ctTime));
loopsva 0:20719c1a48f7 92 strftime(timebuf_hms, TBUFLEN, "%H:%M:%S", localtime(&ctTime));
loopsva 0:20719c1a48f7 93 }
loopsva 0:20719c1a48f7 94
loopsva 0:20719c1a48f7 95
loopsva 0:20719c1a48f7 96 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 97 //general housekeeping items whilw waiting in loops
loopsva 0:20719c1a48f7 98
loopsva 0:20719c1a48f7 99 void HouseKeeping() {
loopsva 0:20719c1a48f7 100 UpdateTime();
loopsva 0:20719c1a48f7 101 }
loopsva 0:20719c1a48f7 102
loopsva 0:20719c1a48f7 103 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 104 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:20719c1a48f7 105 // * \brief HTTP client demo
loopsva 0:20719c1a48f7 106 // * \param none
loopsva 0:20719c1a48f7 107 // * \return int
loopsva 0:20719c1a48f7 108
loopsva 0:20719c1a48f7 109 int main() {
loopsva 0:20719c1a48f7 110 rled = LED_OFF;
loopsva 0:20719c1a48f7 111 gled = LED_OFF;
loopsva 0:20719c1a48f7 112 ctTime = time(NULL);
loopsva 0:20719c1a48f7 113 StartTime = ctTime; //get time we started up
loopsva 0:20719c1a48f7 114 BootTime = ctTime; //save boot time for later (RTC debug)
loopsva 0:20719c1a48f7 115
loopsva 1:c9bed9dbeed5 116 pc.baud(115200);
loopsva 0:20719c1a48f7 117 initSplash();
loopsva 0:20719c1a48f7 118
loopsva 1:c9bed9dbeed5 119 //look for devices on i2c buses
loopsva 0:20719c1a48f7 120 find_i2c(0);
loopsva 0:20719c1a48f7 121 find_i2c(1);
loopsva 0:20719c1a48f7 122
loopsva 0:20719c1a48f7 123 //check to see if the RTC is operational.
loopsva 0:20719c1a48f7 124 //NOTE: bootloader must be MBED, not FRDMKL25Z. Otherwise pin PTC1 (J10-12) will not have a clock signal for the RTC
loopsva 0:20719c1a48f7 125 if(gDebug) pc.printf("Checking the RTC... ");
loopsva 0:20719c1a48f7 126 wait_ms(1500);
loopsva 0:20719c1a48f7 127 ctTime = time(NULL);
loopsva 0:20719c1a48f7 128 if(gDebug) pc.printf("ctTime: %d StartTime: %d\r\n", ctTime, StartTime);
loopsva 0:20719c1a48f7 129 if((StartTime == ctTime) || (ctTime <= 1000000)) {
loopsva 0:20719c1a48f7 130 pc.printf("*** Local RTC stopped, initializing the RTC. !!CHECK BATTERY!!\r\n");
loopsva 0:20719c1a48f7 131 pc.printf("*** Note: Time is incorrect, needs to be updated!!!\r\n");
loopsva 0:20719c1a48f7 132 set_time(1357000000); //set time to something close, Jan01 2013 00:26:40, but still way off
loopsva 0:20719c1a48f7 133 } else {
loopsva 0:20719c1a48f7 134 if(gDebug) pc.printf("Local RTC is running\r\n");
loopsva 0:20719c1a48f7 135 }
loopsva 0:20719c1a48f7 136 UpdateTime();
loopsva 0:20719c1a48f7 137 StartTime = ctTime;
loopsva 0:20719c1a48f7 138 if(gDebug) pc.printf("Date: %s ", timebuf_dMyy);
loopsva 0:20719c1a48f7 139 if(gDebug) pc.printf("Time: %s \n", timebuf_hms);
loopsva 0:20719c1a48f7 140
loopsva 0:20719c1a48f7 141 //set up the cc3000 paramaters
loopsva 0:20719c1a48f7 142 TSISensor touchSensor;
loopsva 0:20719c1a48f7 143
loopsva 0:20719c1a48f7 144 float accels[3];
loopsva 0:20719c1a48f7 145 float resting,reading;
loopsva 0:20719c1a48f7 146 float THRESHOLD = 0.15;
loopsva 0:20719c1a48f7 147 float position;
loopsva 0:20719c1a48f7 148
loopsva 0:20719c1a48f7 149 wait_ms(500);
loopsva 0:20719c1a48f7 150 acc.getAccAllAxis( accels );
loopsva 0:20719c1a48f7 151 resting = abs(accels[0]) + abs(accels[1]) + abs(accels[2]);
loopsva 0:20719c1a48f7 152 pc.printf("Set up resting accelerometer - %.2f\r\n", resting);
loopsva 0:20719c1a48f7 153 wait_ms(100);
loopsva 0:20719c1a48f7 154 rled = LED_OFF;
loopsva 0:20719c1a48f7 155 gled = LED_OFF;
loopsva 0:20719c1a48f7 156 pc.printf("Ready\r\n");
loopsva 0:20719c1a48f7 157 int bumps = 0;
loopsva 0:20719c1a48f7 158 while(1) {
loopsva 0:20719c1a48f7 159 HouseKeeping();
loopsva 0:20719c1a48f7 160 acc.getAccAllAxis( accels );
loopsva 0:20719c1a48f7 161 reading = abs(accels[0]) + abs(accels[1]) + abs(accels[2]);
loopsva 0:20719c1a48f7 162 if (abs(resting - reading) > THRESHOLD ){
loopsva 0:20719c1a48f7 163 rled = LED_ON;
loopsva 0:20719c1a48f7 164 gled = LED_ON;
loopsva 0:20719c1a48f7 165 wait_ms(100);
loopsva 0:20719c1a48f7 166 bumps++;
loopsva 0:20719c1a48f7 167 position = touchSensor.readPercentage();
loopsva 0:20719c1a48f7 168 //pc.printf( "BUMPED %d times, resting %.2f read %.2f position %.2f \r\n", bumps, resting, reading, position );
loopsva 0:20719c1a48f7 169 //pc.printf("Date: %s ", timebuf_dMyy);
loopsva 0:20719c1a48f7 170 //pc.printf("Time: %s \n", timebuf_hms);
loopsva 0:20719c1a48f7 171 rled = LED_OFF;
loopsva 1:c9bed9dbeed5 172 wait_ms(100);
loopsva 0:20719c1a48f7 173 gled = LED_OFF;
loopsva 1:c9bed9dbeed5 174 rled = LED_ON;
loopsva 1:c9bed9dbeed5 175 wait_ms(100);
loopsva 1:c9bed9dbeed5 176 rled = LED_OFF;
loopsva 1:c9bed9dbeed5 177 wait_ms(100);
loopsva 0:20719c1a48f7 178 }
loopsva 0:20719c1a48f7 179
loopsva 0:20719c1a48f7 180 }
loopsva 0:20719c1a48f7 181
loopsva 0:20719c1a48f7 182 }
loopsva 0:20719c1a48f7 183