APP Team
/
app2
...
main.cpp@2:e5e49d27768a, 2014-01-28 (annotated)
- 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?
User | Revision | Line number | New 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 |