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: C12832 FXOS8700Q LM75B eCompass_FPU_Lib mbed-rtos mbed
Revision 0:091b62984a92, committed 2016-02-24
- Comitter:
- co838_ad543
- Date:
- Wed Feb 24 21:04:12 2016 +0000
- Commit message:
- for testing
Changed in this revision
diff -r 000000000000 -r 091b62984a92 C12832.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C12832.lib Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/askksa12543/code/C12832/#990d5eec2ef6
diff -r 000000000000 -r 091b62984a92 FXOS8700Q.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FXOS8700Q.lib Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/co838_ad543/code/FXOS8700Q/#13c858964b46
diff -r 000000000000 -r 091b62984a92 LM75B.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LM75B.lib Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/chris/code/LM75B/#6a70c9303bbe
diff -r 000000000000 -r 091b62984a92 eCompass_FPU_Lib.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eCompass_FPU_Lib.lib Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/JimCarver/code/eCompass_FPU_Lib/#37bc03c3b1f9
diff -r 000000000000 -r 091b62984a92 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Feb 24 21:04:12 2016 +0000
@@ -0,0 +1,294 @@
+/*
+* Author - Aruna Duraisingam - ad543
+* Date - 20 Feb 2016
+* The below program is developed beased on IOT assessment 3 requirements.
+* The below program reads temperature for ever 5 sesonds
+* and when the temperature goes higher than 26 degree celcius the progam shuts down the
+* processor for 5 seconds and comes back again. The processor can also be make active when a
+* switch is pressed.
+*/
+
+#include "mbed.h" /* stock MBED API */
+#include "LM75B.h" /* Lib for the temperature sensor */
+#include "C12832.h" /* Lib for LCD Display */
+#include "FXOS8700Q.h" /* Lib for on-board Accelerometer/Magnetometer */
+#include "eCompass_Lib.h"
+#include "rtos.h"
+#include "math.h"
+
+/**************** Declaration *********************/
+
+Serial host (USBTX, USBRX); /* to-host UART via OpenSDAv2 */
+
+
+LM75B sens_temp (D14, D15); /* temperature sensor */
+PwmOut speaker(D6); /* speaker */
+
+DigitalOut led_red(LED_RED);
+DigitalOut led_green(LED_GREEN);
+C12832 lcd_display (D11, D13, D12, D7, D10); /* LCD on the shield (128x32) */
+Ticker blinker;
+AnalogIn pot1 (A0); // Potentiometer
+
+eCompass compass;
+
+
+// JoyStick
+DigitalIn up(A2);
+DigitalIn down(A3);
+DigitalIn left(A4);
+DigitalIn right(A5);
+
+//Accelerometer/magnetometer
+
+I2C i2c(PTE25, PTE24);
+//FXOS8700Q fxos(i2c, FXOS8700CQ_SLAVE_ADDR1);
+FXOS8700QAccelerometer acc(i2c, FXOS8700CQ_SLAVE_ADDR1); // Configured for the FRDM-K64F with onboard sensors
+FXOS8700QMagnetometer mag(i2c, FXOS8700CQ_SLAVE_ADDR1);
+
+extern axis6_t axis6;
+
+MotionSensorDataCounts mag_raw;
+MotionSensorDataCounts acc_raw;
+
+InterruptIn wakeup_switch (PTC6); /* interrupts for the two on-board switches */
+InterruptIn temp_conversion_switch (PTA4);
+
+/* option trigger/flag (integer value) . possible values 1,2,3 - what to display in LCD
+option 1 - read temperature and display in LCD in celcius/fareinheit
+option 2 - Simple ball game using accelerometer reading
+option 3 - Magentometer showing direction.
+*/
+static volatile int joystick_option_flag;
+
+
+static volatile int temp_conversion_switch_trig; /* 0- gives reading in celcius and 1 in farenheit.*/
+
+static volatile float threshold_temperature = 29.0; /* given in degree celcius*/
+static volatile bool isActive = true;
+static volatile bool activate_blink = false;
+
+// login
+static char username[10] ;
+static char password[10] ;
+static char * tempstring ;
+static bool validateUser = false;
+
+/*****************************Methods***************************/
+
+void hal_map( MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw)
+{
+int16_t t;
+// swap and negate X & Y axis
+t = acc_raw->x;
+acc_raw->x = acc_raw->y * -1;
+acc_raw->y = t * -1;
+// swap mag X & Y axis
+t = mag_raw->x;
+mag_raw->x = mag_raw->y;
+mag_raw->y = t;
+// negate mag Z axis
+mag_raw->z *= -1;
+}
+
+//Toggles the temperature conversion switch trigger
+void conversion_switch_interrupt (void)
+{
+ temp_conversion_switch_trig = !temp_conversion_switch_trig;
+}
+
+// reactivate the processor and starts execution
+void wakeup_switch_interrupt (void)
+{
+ led_green=1;
+ activate_blink = false;
+ isActive = true;
+ lcd_display.cls();
+}
+
+// When the temperature is above threshold limit, it sets an alaram for 3 seconds and sleep
+void setAlarm (void)
+{
+ led_red = 0;
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5; //50% duty cycle - max volume
+ wait(1.5f);
+ speaker=0.0; // turn off audio
+ led_red = !led_red; // toggle a led
+}
+
+void makeProcessorSleep(void){
+ isActive = false;
+ activate_blink = true;
+ sleep();
+}
+
+void blink() {
+ if(activate_blink)
+ led_green=!led_green;
+}
+
+void initialize() {
+
+ temp_conversion_switch_trig =1;
+ joystick_option_flag = 1; // intially
+ led_red = 1;
+ led_green = 1;
+}
+
+void displayTemperature(float temp)
+{
+ if (temp_conversion_switch_trig) {
+ lcd_display.printf ("Temperature %.2f C", temp);
+ }
+ else{
+ float f = (temp*9/5)+32;
+ lcd_display.printf ("Temperature %.2f F", f);
+ }
+}
+
+void displayGame(void)
+{
+
+}
+
+void displayDirection(void)
+{
+ lcd_display.cls();
+ acc.getAxis( acc_raw);
+ mag.getAxis( mag_raw);
+ compass.run( acc_raw, mag_raw); // calculate the eCompass
+ int yaw =axis6.yaw;
+
+ if((yaw >=338 && yaw <360) || (yaw>=0 && yaw < 23)) lcd_display.printf("%d degree North\r\n", yaw);
+ else if((yaw >=24 && yaw <67)) lcd_display.printf("%d degree Nort East", yaw);
+ else if((yaw >=68 && yaw <112)) lcd_display.printf("%d degree East", yaw);
+ else if(yaw >=113 && yaw <158) lcd_display.printf("%d degree South East", yaw);
+ else if(yaw >=159 && yaw <203) lcd_display.printf("%d degree South", yaw);
+ else if(yaw >=204 && yaw <247) lcd_display.printf("%d degree South West", yaw);
+ else if(yaw >=248 && yaw <292) lcd_display.printf("%d degree West", yaw);
+ else lcd_display.printf("%d degree North West\r\n", yaw);
+}
+
+
+char* readString(void){
+ tempstring = (char*) malloc(10 * sizeof(char));
+ int i =0;
+ bool status = true;
+ while(status) {
+ char ch = host.getc();
+ if(ch != '\r')
+ {
+ lcd_display.printf("%c", ch);
+ tempstring[i]= ch;
+ i++;
+ }
+ else
+ {
+ //lcd_display.printf("Entered enter!");
+ printf("\n");
+ status =false;
+ }
+
+
+ }
+
+ tempstring[i] = '\0';
+ return tempstring;
+ }
+
+ void getUserNameText(void){
+ host.printf("Please enter username (Max 10 characters): \r\n");
+ strcpy(username , readString());
+}
+
+ void login(void){
+
+ host.printf("Please enter username (Max 10 characters): \r\n");
+ strcpy(username , readString());
+
+
+ host.printf("Please enter password (Max 10 Characters):\r\n");
+ strcpy(password , readString());
+
+ host.printf("Username :%s , Password : %s \r\n", username, password);
+ }
+
+/************** Start - Main Method **************************/
+int main (void)
+ {
+ host.baud (38400);
+ login();
+
+ if(strcmp (username,"default") == 0 && strcmp (password,"default") == 0)
+ {
+ validateUser = true;
+ free(username);
+ free(password);
+ }
+ else{
+ host.printf("Invalid login\r\n");
+ login();
+ }
+
+ initialize();
+
+ wakeup_switch.mode (PullUp);
+ wakeup_switch.fall (&wakeup_switch_interrupt);
+
+ temp_conversion_switch.mode (PullUp);
+ temp_conversion_switch.fall (&conversion_switch_interrupt);
+
+ up.mode(PullUp);
+ left.mode(PullUp);
+ right.mode(PullUp);
+ down.mode(PullUp);
+
+ blinker.attach(&blink, 1);
+
+ acc.enable();
+ mag.enable();
+
+ acc.getAxis( acc_raw);
+ mag.getAxis( mag_raw);
+
+ while(isActive){
+ host.printf ("validateUser %d", validateUser);
+ if(!validateUser) sleep();
+ else{
+ lcd_display.locate (1, 10);
+ lcd_display.cls();
+
+ float curr_temp = sens_temp.read ();
+
+ if(up) joystick_option_flag = 1;
+ else if(left)joystick_option_flag = 2;
+ else if(right)joystick_option_flag = 3;
+
+ host.printf ("option joystick: %d \r\n", joystick_option_flag);
+
+ switch (joystick_option_flag) {
+ case 1:
+ displayTemperature(curr_temp);
+ break;
+ case 2:
+ displayGame();
+ break;
+ case 3:
+ displayDirection();
+ break;
+ default:
+ displayTemperature(curr_temp);
+ }
+
+ if(curr_temp > threshold_temperature)
+ {
+ setAlarm();
+ lcd_display.printf ("In Sleep Mode. Temperature: %.2f C\r\n", curr_temp);
+ makeProcessorSleep();
+ }
+
+ wait (1.0f);
+ }
+ }
+ }
\ No newline at end of file
diff -r 000000000000 -r 091b62984a92 mbed-rtos.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#07314541bd12
diff -r 000000000000 -r 091b62984a92 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Feb 24 21:04:12 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3 \ No newline at end of file