Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Bob DS1825 LDC1614 LDC1101 SDFileSystem mbed
Fork of Inductive_Sensor by
Diff: main.cpp
- Revision:
- 17:a4700b1c3c37
- Parent:
- 16:b53721840a38
- Child:
- 19:c0707d20bada
--- a/main.cpp Wed Aug 24 10:31:32 2016 +0000
+++ b/main.cpp Wed Sep 07 09:59:16 2016 +0000
@@ -24,8 +24,13 @@
#include <string>
using namespace std;
+
+
+bool DEBUG = true;
+
+
+
// SETTINGS
-bool DEBUG = false;
float C = 120E-12; // Capacitor in F
int sensors = 2; // number of attached sensors
uint16_t INTERVAL_FIRST = 3600; // First sampling time in seconds. 60:00 minutes = 3600 sec
@@ -45,7 +50,6 @@
PinName _LDC_SD = PTC6; // Shutdown
// SD File system
-PinName _SD_ENABLE = PTC3;
PinName _SD_PRESENT = PTE0; // card detect // old = new: PTE0
PinName _SD_MOSI = PTD6; // mosi // old = new: PTD6
PinName _SD_MISO = PTD7; // miso // old = new: PTD7
@@ -53,14 +57,14 @@
PinName _SD_CS = PTD4; // cs // old = new: PTD4
// Other components
-PinName _OSCILLATOR = PTC3;
+PinName _ENABLE = PTC3; // enables SD card and Crystal
PinName _BATTERY = PTC2; // voltage // old = new: PTC2
PinName _BUTTON = PTA4;
// load libraries
-Bob bob( _LED_PROCESS, _LED_ERROR, _BUTTON, _SD_PRESENT, _BATTERY );
-Serial pc(USBTX, USBRX);
+Bob bob( _LED_PROCESS, _LED_ERROR, _BUTTON, _ENABLE, _SD_PRESENT, _BATTERY );
+Serial pc( USBTX, USBRX );
// timer variables
uint32_t now = 0, next = 0, prev = 0;
@@ -101,7 +105,7 @@
// construct data
/*
- bob.ledon();
+ bob.processing();
// fp = fopen( fn, "a" ); // open file (append)
char buffer[16]; memset(buffer, 0, sizeof(buffer));
char towrite[64]; memset(towrite, 0, sizeof(towrite));
@@ -143,11 +147,11 @@
//pc.printf( "%s", towrite);
}
//fclose( fp ); // close file
- bob.ledoff();
+ bob.no_processing();
*/
// write data to SD card
- bob.ledon();
+ bob.processing();
fp = fopen( fn, "a" ); // open file (append)
for( int i = 0; i < counter; i++ )
fprintf( fp, "%.2f;%d;%.2f;%.4f\r\n", (float) collected.t[i]/100.0, collected.L[i], bob.battery(), T ); // write to file
@@ -156,7 +160,7 @@
// write to screen
//pc.printf( "%.2f;%d;%.2f;%.4f\r\n", (float) collected.t[counter-1]/100.0, collected.L[counter-1], bob.battery(), T ); // write to screen
- bob.ledoff();
+ bob.no_processing();
// Reset data
memset(collected.t, 0, counter);
@@ -167,33 +171,44 @@
int main(void)
{
if( DEBUG )
- {
- Serial pc( USBTX, USBRX );
-
- LDC1614 ldc( _LDC_SDA, _LDC_SCL, _LDC_SD, _OSCILLATOR, 16E6, sensors, C );
+ {
+ bob.wakeup_periphery( );
+ wait(1);
+ // LDC1614 ldc( _LDC_SDA, _LDC_SCL, _LDC_SD, 16E6, sensors, C ); // error: pinmap not found for peripheral
+ // LDC1614 ldc( PTC5, PTC4, PTC6, 16E6, sensors, C ); // error: pinmap not found for peripheral
+ // I2C _i2c( PTC5, PTC4 ); // error: pinmap not found for peripheral
+ // I2CX _i2c( I2C_0, PTC5, PTC4 ); // error: library doesn't work
- uint8_t status;
-
+ // KL25Z has standard allocated I2C pins that are not present in our package (32-pins)
+ // Dynamic allocation of pinnames...
+
while( 1 ) {
+
+ pc.printf( "works!\r\n" );
+
+ wait(1);
+
+ /*
// check the sensor
- status = ldc.get_status();
+ status = ldc.get_status();
// if there is an error turn on the red led
if( ldc.is_error( status ) )
{
// error
- // bob.error();
+ bob.error();
}else{
if( ldc.is_ready( status ) )
{
- //bob.no_error();
+ bob.no_error();
pc.printf( "sensor 1: %d | sensor 2: %d\r\n", ldc.get_Data( 0 ), ldc.get_Data( 1 ) );
}
}
+ */
+
}
- }
-
-
+ }
+
// TODO:
// - implement this data conversion in writing to SD!!
@@ -210,7 +225,11 @@
// Didn't get a response from the disk
// Set 512-byte block timed out"
// TODO: buy 'better' SD cards from IAPC / the Stores (Kingston ...)
- bob.wakeup();
+
+ // This turns enable on, i.e. it powers the SD card system, the crystal and the LDC
+ bob.wakeup_periphery();
+
+ // load SD File System
SDFileSystem *sd = new SDFileSystem( _SD_MOSI, _SD_MISO, _SD_SCLK, _SD_CS, "sd" );
// Create a new data file (data00.txt)
@@ -229,7 +248,7 @@
fclose( fp );
break;
} else {
- bob.ledon(); // error: unable to create new file
+ bob.error(); // error: unable to create new file
}
} else { // file already exists
fclose( fp );
@@ -237,39 +256,37 @@
}
if( fp == NULL )
{
- bob.ledon(); // error: file 00 - 99 already exists
+ bob.error(); // error: file 00 - 99 already exists
// pc.printf( "/sd/data00.txt t/m /sd/data99.txt already exist!\n" );
}
// Unload SD File system
delete sd;
sd = NULL;
+
while(1)
{
- // Wakeup: SD + LDC1101 on
- bob.wakeup();
-
// what time is it now?
prev = now; // 0 -> 429 496 --> (4 294,96 s) (71 min)
now = (uint32_t) clock(); // 0 -> 429 496 --> (4 294,96 s) (71 min)
if( now < prev )
t_high++; // 0 -> 255 --> (255*4 294,96 s) (12 days)
t = now + 429496.7296*t_high + t_lost + 429496.7296*lost_high; // 0 -> 219 901 952 --> (2 199 019,52 s) (25 days)
+
+ // How long should we takes samples?
+ next = t + ( (next == 0) ? INTERVAL_FIRST : INTERVAL_ON )*100; // 0 -> 219 904 952 --> (2 199 049,52 s) (25 days)
+
+
+ // Wakeup the periphery (SD, crystal and LDC1614 on)
+ bob.wakeup_periphery();
// load libraries to take control over the communication
- LDC1614 *ldc = new LDC1614(_LDC_SDA, _LDC_SCL, _LDC_SD, _OSCILLATOR, 16E6, sensors, C);
+ LDC1614 *ldc = new LDC1614(_LDC_SDA, _LDC_SCL, _LDC_SD, 16E6, sensors, C); // load LDC1614 libray
DS1825 *thermometer = new DS1825( _Tpin ); // load thermometer (DS1825) library
- SDFileSystem *sd = new SDFileSystem(_SD_MOSI, _SD_MISO, _SD_SCLK, _SD_CS, "sd"); // load SD system
+ SDFileSystem *sd = new SDFileSystem(_SD_MOSI, _SD_MISO, _SD_SCLK, _SD_CS, "sd"); // load SD File System library
mkdir("/sd", 0777); // select folder
- // How long should we takes samples?
- if( next == 0 )
- {
- next = t + INTERVAL_FIRST*100;
- } else {
- next = t + INTERVAL_ON*100; // 0 -> 219 904 952 --> (2 199 049,52 s) (25 days)
- }
// Take samples for INTERVAL_ON seconds
while( t < next )
@@ -287,10 +304,10 @@
if( ldc->is_error(status) )
{
// red led on
- // bob.error();
+ bob.error();
}else{
// red led off
- // bob.no_error();
+ bob.no_error();
if( ldc->is_ready(status) ) // data from all sensors is ready
{
@@ -312,17 +329,17 @@
if( counter > 0 )
storeit( thermometer->getTemperature() );
- // prepare for sleep, power down the SD and the LDC1101
+ // prepare for sleep: delete and power down the periphery (SD, crystal and LDC1614)
delete sd; sd = NULL; // unload library to be able to power down completely
delete ldc; ldc = NULL; // unload library to be able to power down completely
delete thermometer; thermometer = NULL; // unload library to be able to power down completely
- bob.beforesleep();
+ bob.shutdown_periphery();
// if the battery is almost empty (Vbatt < 3.10 V), the thermometer stops
// working well and L can not be corrected. So just shut down...
if( bob.battery() < 3.10f )
{
- bob.ledon(); // error: battery empty
+ bob.error(); // error: battery empty
// pc.printf( "Battery empty (%.1f V), shutting down.\n", bob.battery() );
exit(0);
}
