...

Dependencies:   mbed-rtos mbed

Committer:
trixrabbit
Date:
Tue Jan 28 18:59:41 2014 +0000
Revision:
2:e5e49d27768a
Parent:
1:92ebe0707661
Child:
3:cd25d0efe0e1
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trixrabbit 0:a68d724119d5 1 #include "mbed.h"
trixrabbit 0:a68d724119d5 2 #include "rtos.h"
trixrabbit 1:92ebe0707661 3
trixrabbit 1:92ebe0707661 4 #define NUM_DELAY 100
trixrabbit 1:92ebe0707661 5 #define ANN_DELAY 250
trixrabbit 1:92ebe0707661 6 #define ANN_THRESOLD 125
trixrabbit 1:92ebe0707661 7
trixrabbit 1:92ebe0707661 8 #define SWITCH_1 0
trixrabbit 1:92ebe0707661 9 #define SWITCH_2 1
trixrabbit 1:92ebe0707661 10 #define POT_1 2
trixrabbit 1:92ebe0707661 11 #define POT_2 3
trixrabbit 1:92ebe0707661 12
trixrabbit 1:92ebe0707661 13 const char* eventType[4] = {"Switch 1", "Switch 2", "Pot 1", "Pot 2 "};
trixrabbit 1:92ebe0707661 14
trixrabbit 1:92ebe0707661 15 Serial pc(USBTX, USBRX);
trixrabbit 0:a68d724119d5 16 DigitalIn evenNum1(p15);
trixrabbit 0:a68d724119d5 17 DigitalIn evenNum2(p16);
trixrabbit 1:92ebe0707661 18 AnalogIn evenAnn1(p19);
trixrabbit 1:92ebe0707661 19 AnalogIn evenAnn2(p20);
trixrabbit 0:a68d724119d5 20
trixrabbit 1:92ebe0707661 21 struct Event
trixrabbit 1:92ebe0707661 22 {
trixrabbit 1:92ebe0707661 23 short type;
trixrabbit 2:e5e49d27768a 24 time_t time;
trixrabbit 1:92ebe0707661 25 };
trixrabbit 1:92ebe0707661 26
trixrabbit 1:92ebe0707661 27 typedef Event Event_t;
trixrabbit 1:92ebe0707661 28
trixrabbit 1:92ebe0707661 29 Queue<Event_t, 16> eventQueue;
trixrabbit 1:92ebe0707661 30
trixrabbit 1:92ebe0707661 31 Mutex queue_mutex;
trixrabbit 1:92ebe0707661 32
trixrabbit 1:92ebe0707661 33 void RTC_Init()
trixrabbit 1:92ebe0707661 34 {
trixrabbit 1:92ebe0707661 35 set_time(1391097600); // Set RTC time to Thursday, 30 Jan 2014 16:00:00
trixrabbit 1:92ebe0707661 36 }
trixrabbit 1:92ebe0707661 37
trixrabbit 1:92ebe0707661 38 short Average(short values[5])
trixrabbit 1:92ebe0707661 39 {
trixrabbit 1:92ebe0707661 40 return ((values[0] + values[1] + values[2] + values[3] + values[4]) /5);
trixrabbit 1:92ebe0707661 41 }
trixrabbit 1:92ebe0707661 42
trixrabbit 1:92ebe0707661 43 void samplingNum(void const *n)
trixrabbit 0:a68d724119d5 44 {
trixrabbit 1:92ebe0707661 45 static bool stateChanged[2] = {false, false};
trixrabbit 1:92ebe0707661 46 static bool value[2] = {1, 1};
trixrabbit 1:92ebe0707661 47
trixrabbit 1:92ebe0707661 48 stateChanged[0] = (value[0] != evenNum1.read());
trixrabbit 1:92ebe0707661 49 stateChanged[1] = (value[1] != evenNum2.read());
trixrabbit 1:92ebe0707661 50
trixrabbit 1:92ebe0707661 51 if((stateChanged[0] == true) || (stateChanged[1] == true))
trixrabbit 0:a68d724119d5 52 {
trixrabbit 1:92ebe0707661 53 wait_ms(50);
trixrabbit 1:92ebe0707661 54 stateChanged[0] = (value[0] != evenNum1.read());
trixrabbit 1:92ebe0707661 55 stateChanged[1] = (value[1] != evenNum2.read());
trixrabbit 1:92ebe0707661 56
trixrabbit 1:92ebe0707661 57 if(stateChanged[0])
trixrabbit 1:92ebe0707661 58 {
trixrabbit 1:92ebe0707661 59 Event_t *event1 = new Event_t();
trixrabbit 1:92ebe0707661 60 event1->type = SWITCH_1;
trixrabbit 1:92ebe0707661 61 event1->time = time(NULL);
trixrabbit 1:92ebe0707661 62 queue_mutex.lock();
trixrabbit 1:92ebe0707661 63 eventQueue.put(event1);
trixrabbit 1:92ebe0707661 64 queue_mutex.unlock();
trixrabbit 1:92ebe0707661 65 value[0] = !value[0];
trixrabbit 1:92ebe0707661 66 }
trixrabbit 1:92ebe0707661 67 if(stateChanged[1])
trixrabbit 1:92ebe0707661 68 {
trixrabbit 1:92ebe0707661 69 Event_t *event2 = new Event_t();
trixrabbit 1:92ebe0707661 70 event2->type = SWITCH_2;
trixrabbit 1:92ebe0707661 71 event2->time = time(NULL);
trixrabbit 1:92ebe0707661 72 queue_mutex.lock();
trixrabbit 1:92ebe0707661 73 eventQueue.put(event2);
trixrabbit 1:92ebe0707661 74 queue_mutex.unlock();
trixrabbit 1:92ebe0707661 75 value[1] = !value[1];
trixrabbit 1:92ebe0707661 76 }
trixrabbit 0:a68d724119d5 77 }
trixrabbit 0:a68d724119d5 78 }
trixrabbit 0:a68d724119d5 79
trixrabbit 1:92ebe0707661 80 void samplingAnn(void const *n)
trixrabbit 0:a68d724119d5 81 {
trixrabbit 1:92ebe0707661 82 static short tabPot1[5] = {0, 0, 0, 0, 0};
trixrabbit 1:92ebe0707661 83 static short tabPot2[5] = {0, 0, 0, 0, 0};
trixrabbit 1:92ebe0707661 84 static short currentValue[2] = {0, 0};
trixrabbit 1:92ebe0707661 85 short avg[2]= {0, 0};
trixrabbit 1:92ebe0707661 86 static short tabPtr = 0;
trixrabbit 1:92ebe0707661 87 static bool ready = false;
trixrabbit 1:92ebe0707661 88
trixrabbit 1:92ebe0707661 89 currentValue[0] = evenAnn1.read() * 1000;
trixrabbit 1:92ebe0707661 90 avg[0] = Average(tabPot1);
trixrabbit 1:92ebe0707661 91
trixrabbit 1:92ebe0707661 92 currentValue[1] = evenAnn2.read() * 1000;
trixrabbit 1:92ebe0707661 93 avg[1] = Average(tabPot2);
trixrabbit 1:92ebe0707661 94
trixrabbit 1:92ebe0707661 95 if(ready)
trixrabbit 0:a68d724119d5 96 {
trixrabbit 1:92ebe0707661 97 if((currentValue[0] < (avg[0] - ANN_THRESOLD)) || (currentValue[0] > (avg[0] + ANN_THRESOLD)))
trixrabbit 1:92ebe0707661 98 {
trixrabbit 1:92ebe0707661 99 Event_t *event1 = new Event_t();
trixrabbit 1:92ebe0707661 100 event1->type = POT_1;
trixrabbit 1:92ebe0707661 101 event1->time = time(NULL);
trixrabbit 1:92ebe0707661 102 queue_mutex.lock();
trixrabbit 1:92ebe0707661 103 eventQueue.put(event1);
trixrabbit 1:92ebe0707661 104 queue_mutex.unlock();
trixrabbit 1:92ebe0707661 105 }
trixrabbit 1:92ebe0707661 106
trixrabbit 1:92ebe0707661 107 if((currentValue[1] < (avg[1] - ANN_THRESOLD)) || (currentValue[1] > (avg[1] + ANN_THRESOLD)))
trixrabbit 1:92ebe0707661 108 {
trixrabbit 1:92ebe0707661 109 Event_t *event2 = new Event_t();
trixrabbit 1:92ebe0707661 110 event2->type = POT_2;
trixrabbit 1:92ebe0707661 111 event2->time = time(NULL);
trixrabbit 1:92ebe0707661 112 queue_mutex.lock();
trixrabbit 1:92ebe0707661 113 eventQueue.put(event2);
trixrabbit 1:92ebe0707661 114 queue_mutex.unlock();
trixrabbit 1:92ebe0707661 115 }
trixrabbit 0:a68d724119d5 116 }
trixrabbit 1:92ebe0707661 117
trixrabbit 1:92ebe0707661 118 tabPot1[tabPtr] = currentValue[0];
trixrabbit 1:92ebe0707661 119 tabPot2[tabPtr] = currentValue[1];
trixrabbit 1:92ebe0707661 120
trixrabbit 1:92ebe0707661 121 tabPtr++;
trixrabbit 1:92ebe0707661 122 if(tabPtr == 5)
trixrabbit 0:a68d724119d5 123 {
trixrabbit 1:92ebe0707661 124 tabPtr = 0;
trixrabbit 1:92ebe0707661 125 ready = true;
trixrabbit 0:a68d724119d5 126 }
trixrabbit 0:a68d724119d5 127 }
trixrabbit 0:a68d724119d5 128
trixrabbit 0:a68d724119d5 129
trixrabbit 1:92ebe0707661 130 void NumEvent_thread(void const *args)
trixrabbit 1:92ebe0707661 131 {
trixrabbit 1:92ebe0707661 132 RtosTimer samplingTimer(samplingNum, osTimerPeriodic, (void *)0);
trixrabbit 1:92ebe0707661 133 samplingTimer.start(NUM_DELAY);
trixrabbit 1:92ebe0707661 134 while (true){}
trixrabbit 1:92ebe0707661 135 }
trixrabbit 0:a68d724119d5 136
trixrabbit 1:92ebe0707661 137 void AnnEvent_thread(void const *args)
trixrabbit 1:92ebe0707661 138 {
trixrabbit 1:92ebe0707661 139 RtosTimer samplingTimer(samplingAnn, osTimerPeriodic, (void *)0);
trixrabbit 1:92ebe0707661 140 samplingTimer.start(ANN_DELAY);
trixrabbit 1:92ebe0707661 141 while (true){}
trixrabbit 1:92ebe0707661 142 }
trixrabbit 1:92ebe0707661 143
trixrabbit 1:92ebe0707661 144 void Collector_thread(void const *args)
trixrabbit 1:92ebe0707661 145 {
trixrabbit 1:92ebe0707661 146 Event_t *event;
trixrabbit 1:92ebe0707661 147 osEvent evt;
trixrabbit 1:92ebe0707661 148
trixrabbit 1:92ebe0707661 149 while(true)
trixrabbit 1:92ebe0707661 150 {
trixrabbit 1:92ebe0707661 151 evt = eventQueue.get();
trixrabbit 1:92ebe0707661 152 if (evt.status == osEventMessage)
trixrabbit 1:92ebe0707661 153 {
trixrabbit 1:92ebe0707661 154 event = (Event_t*)evt.value.p;
trixrabbit 1:92ebe0707661 155 }
trixrabbit 2:e5e49d27768a 156 pc.printf("Event Type = %s Time = %s \n\r", eventType[event->type], ctime(&event->time));
trixrabbit 1:92ebe0707661 157
trixrabbit 1:92ebe0707661 158 delete event;
trixrabbit 1:92ebe0707661 159 }
trixrabbit 1:92ebe0707661 160 }
trixrabbit 1:92ebe0707661 161
trixrabbit 1:92ebe0707661 162 int main()
trixrabbit 1:92ebe0707661 163 {
trixrabbit 1:92ebe0707661 164 RTC_Init();
trixrabbit 1:92ebe0707661 165 Thread thread1(NumEvent_thread);
trixrabbit 1:92ebe0707661 166 Thread thread2(AnnEvent_thread);
trixrabbit 1:92ebe0707661 167 Thread thread3(Collector_thread);
trixrabbit 1:92ebe0707661 168
trixrabbit 1:92ebe0707661 169 /*
trixrabbit 1:92ebe0707661 170 thread1.set_priority(osPriorityRealtime);
trixrabbit 1:92ebe0707661 171 thread2.set_priority(osPriorityRealtime);
trixrabbit 1:92ebe0707661 172 thread3.set_priority(osPriorityNormal);
trixrabbit 1:92ebe0707661 173 */
trixrabbit 1:92ebe0707661 174
trixrabbit 1:92ebe0707661 175 while (true){}
trixrabbit 1:92ebe0707661 176 }
trixrabbit 1:92ebe0707661 177