Experimenting w/FreeRTOS

Dependencies:   FreeRTOS mbed MMA7660 LM75B

Committer:
tkatolrnmcu
Date:
Sun Oct 01 03:36:45 2017 +0000
Revision:
3:9ec3ee7cf0bc
Parent:
2:4e4fa763799a
Accidentally deleted return code variables in last commit, fixed now

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tkatolrnmcu 0:ef389421b079 1 #include "mbed.h"
tkatolrnmcu 0:ef389421b079 2 #include "FreeRTOS.h"
tkatolrnmcu 0:ef389421b079 3 #include "task.h"
tkatolrnmcu 1:1990d6e600c2 4 #include "LM75B.h"
tkatolrnmcu 2:4e4fa763799a 5 #include "MMA7660.h"
tkatolrnmcu 0:ef389421b079 6
tkatolrnmcu 1:1990d6e600c2 7 DigitalOut led1(LED1);
tkatolrnmcu 1:1990d6e600c2 8 DigitalOut led2(LED2);
tkatolrnmcu 1:1990d6e600c2 9 DigitalOut led3(LED3);
tkatolrnmcu 1:1990d6e600c2 10 DigitalOut led4(LED4);
tkatolrnmcu 1:1990d6e600c2 11 LM75B sensor(p28,p27);
tkatolrnmcu 2:4e4fa763799a 12 MMA7660 mma(p28,p27);
tkatolrnmcu 0:ef389421b079 13
tkatolrnmcu 2:4e4fa763799a 14 void vtemperature(void *pvParameters);
tkatolrnmcu 2:4e4fa763799a 15 void vshock(void *pvParameters);
tkatolrnmcu 0:ef389421b079 16
tkatolrnmcu 0:ef389421b079 17 int main() {
tkatolrnmcu 1:1990d6e600c2 18
tkatolrnmcu 3:9ec3ee7cf0bc 19 portBASE_TYPE task1rc;
tkatolrnmcu 3:9ec3ee7cf0bc 20 portBASE_TYPE task2rc;
tkatolrnmcu 3:9ec3ee7cf0bc 21
tkatolrnmcu 2:4e4fa763799a 22 // Sensor connection check
tkatolrnmcu 1:1990d6e600c2 23 if (sensor.open()){
tkatolrnmcu 2:4e4fa763799a 24 printf("LM75B temperature sensor detected.\n");
tkatolrnmcu 1:1990d6e600c2 25 }
tkatolrnmcu 1:1990d6e600c2 26 else {
tkatolrnmcu 1:1990d6e600c2 27 printf("LM75B sensor not detected!\n");
tkatolrnmcu 2:4e4fa763799a 28 return 1;
tkatolrnmcu 1:1990d6e600c2 29 }
tkatolrnmcu 1:1990d6e600c2 30
tkatolrnmcu 2:4e4fa763799a 31 if (mma.testConnection()){
tkatolrnmcu 2:4e4fa763799a 32 printf("MMA7660 accelerometer sensor detected.\n");
tkatolrnmcu 2:4e4fa763799a 33 }
tkatolrnmcu 2:4e4fa763799a 34 else {
tkatolrnmcu 2:4e4fa763799a 35 printf("MMA7660 sensor not detected!\n");
tkatolrnmcu 2:4e4fa763799a 36 return 1;
tkatolrnmcu 2:4e4fa763799a 37 }
tkatolrnmcu 2:4e4fa763799a 38 printf("All sensors acounted for. Proceeding with program.\n");
tkatolrnmcu 1:1990d6e600c2 39
tkatolrnmcu 2:4e4fa763799a 40 // Task 1 will read and print temperature data
tkatolrnmcu 2:4e4fa763799a 41 task1rc = xTaskCreate(vtemperature, "HELLO", 255, (void*)"TASK1", configMAX_PRIORITIES-2, NULL);
tkatolrnmcu 2:4e4fa763799a 42
tkatolrnmcu 2:4e4fa763799a 43 // Task 2 will read accelerometer data
tkatolrnmcu 2:4e4fa763799a 44 task2rc = xTaskCreate(vshock, "BYE", 255, (void*)"TASK2", configMAX_PRIORITIES-1, NULL);
tkatolrnmcu 1:1990d6e600c2 45
tkatolrnmcu 1:1990d6e600c2 46 vTaskStartScheduler();
tkatolrnmcu 0:ef389421b079 47
tkatolrnmcu 1:1990d6e600c2 48 for (;;){
tkatolrnmcu 2:4e4fa763799a 49 /*If the tasks fail to initialize/run properly, led3 and led4 will
tkatolrnmcu 2:4e4fa763799a 50 toggle on/off to indicate the failure. */
tkatolrnmcu 1:1990d6e600c2 51 led3 = 1;
tkatolrnmcu 1:1990d6e600c2 52 led4 = 1;
tkatolrnmcu 1:1990d6e600c2 53 wait(0.5);
tkatolrnmcu 1:1990d6e600c2 54 led3 = 0;
tkatolrnmcu 1:1990d6e600c2 55 led4 = 0;
tkatolrnmcu 1:1990d6e600c2 56 wait(0.5);
tkatolrnmcu 1:1990d6e600c2 57 };
tkatolrnmcu 2:4e4fa763799a 58
tkatolrnmcu 0:ef389421b079 59 }
tkatolrnmcu 0:ef389421b079 60
tkatolrnmcu 2:4e4fa763799a 61 void vtemperature(void *pvParameters)
tkatolrnmcu 0:ef389421b079 62 {
tkatolrnmcu 1:1990d6e600c2 63 char *ptr = 0;
tkatolrnmcu 2:4e4fa763799a 64 float tdata = 0.0;
tkatolrnmcu 1:1990d6e600c2 65 ptr = (char *)pvParameters;
tkatolrnmcu 2:4e4fa763799a 66 int time = 0;
tkatolrnmcu 0:ef389421b079 67
tkatolrnmcu 0:ef389421b079 68 for(;;)
tkatolrnmcu 0:ef389421b079 69 {
tkatolrnmcu 2:4e4fa763799a 70 tdata = (float)sensor.temp();
tkatolrnmcu 2:4e4fa763799a 71 printf("sample %i: %.3f c\n", time, tdata);
tkatolrnmcu 1:1990d6e600c2 72 led1 = !led1;
tkatolrnmcu 2:4e4fa763799a 73 time++;
tkatolrnmcu 1:1990d6e600c2 74 vTaskDelay(300);
tkatolrnmcu 0:ef389421b079 75 }
tkatolrnmcu 0:ef389421b079 76 }
tkatolrnmcu 0:ef389421b079 77
tkatolrnmcu 2:4e4fa763799a 78 void vshock(void *pvParameters)
tkatolrnmcu 0:ef389421b079 79 {
tkatolrnmcu 1:1990d6e600c2 80 char *ptr = 0;
tkatolrnmcu 2:4e4fa763799a 81 float accel_z = 0.0;
tkatolrnmcu 1:1990d6e600c2 82 ptr = (char *)pvParameters;
tkatolrnmcu 2:4e4fa763799a 83 int time = 0;
tkatolrnmcu 0:ef389421b079 84
tkatolrnmcu 0:ef389421b079 85 for(;;)
tkatolrnmcu 0:ef389421b079 86 {
tkatolrnmcu 2:4e4fa763799a 87 accel_z = mma.z();
tkatolrnmcu 2:4e4fa763799a 88 printf("sample %i: %.3f g\n", time, accel_z);
tkatolrnmcu 1:1990d6e600c2 89 led2 = !led2;
tkatolrnmcu 2:4e4fa763799a 90 time++;
tkatolrnmcu 1:1990d6e600c2 91 vTaskDelay(300);
tkatolrnmcu 0:ef389421b079 92 }
tkatolrnmcu 0:ef389421b079 93 }