for testing

Dependencies:   C12832 FXOS8700Q LM75B eCompass_FPU_Lib mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
co838_ad543
Date:
Wed Feb 24 21:04:12 2016 +0000
Commit message:
for testing

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
FXOS8700Q.lib Show annotated file Show diff for this revision Revisions of this file
LM75B.lib Show annotated file Show diff for this revision Revisions of this file
eCompass_FPU_Lib.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
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