APP Team
/
app2
...
Diff: main.cpp
- Revision:
- 1:92ebe0707661
- Parent:
- 0:a68d724119d5
- Child:
- 2:e5e49d27768a
--- a/main.cpp Mon Jan 27 15:40:32 2014 +0000 +++ b/main.cpp Mon Jan 27 21:46:01 2014 +0000 @@ -1,47 +1,177 @@ #include "mbed.h" #include "rtos.h" -DigitalOut led1(LED1); -DigitalOut led2(LED2); -AnalogIn evenAnn1(p19); -AnalogIn evenAnn1(p20); + +#define NUM_DELAY 100 +#define ANN_DELAY 250 +#define ANN_THRESOLD 125 + +#define SWITCH_1 0 +#define SWITCH_2 1 +#define POT_1 2 +#define POT_2 3 + +const char* eventType[4] = {"Switch 1", "Switch 2", "Pot 1", "Pot 2 "}; + +Serial pc(USBTX, USBRX); DigitalIn evenNum1(p15); DigitalIn evenNum2(p16); +AnalogIn evenAnn1(p19); +AnalogIn evenAnn2(p20); -void even1_thread(void const *args) +struct Event +{ + short type; + int time; +}; + +typedef Event Event_t; + +Queue<Event_t, 16> eventQueue; + +Mutex queue_mutex; + +void RTC_Init() +{ + set_time(1391097600); // Set RTC time to Thursday, 30 Jan 2014 16:00:00 +} + +short Average(short values[5]) +{ + return ((values[0] + values[1] + values[2] + values[3] + values[4]) /5); +} + +void samplingNum(void const *n) { - while (true) + static bool stateChanged[2] = {false, false}; + static bool value[2] = {1, 1}; + + stateChanged[0] = (value[0] != evenNum1.read()); + stateChanged[1] = (value[1] != evenNum2.read()); + + if((stateChanged[0] == true) || (stateChanged[1] == true)) { + wait_ms(50); + stateChanged[0] = (value[0] != evenNum1.read()); + stateChanged[1] = (value[1] != evenNum2.read()); + + if(stateChanged[0]) + { + Event_t *event1 = new Event_t(); + event1->type = SWITCH_1; + event1->time = time(NULL); + queue_mutex.lock(); + eventQueue.put(event1); + queue_mutex.unlock(); + value[0] = !value[0]; + } + if(stateChanged[1]) + { + Event_t *event2 = new Event_t(); + event2->type = SWITCH_2; + event2->time = time(NULL); + queue_mutex.lock(); + eventQueue.put(event2); + queue_mutex.unlock(); + value[1] = !value[1]; + } } } -void even2_thread(void const *args) -{ - while (true) - { - } -} - -void even3_thread(void const *args) +void samplingAnn(void const *n) { - while (true) + static short tabPot1[5] = {0, 0, 0, 0, 0}; + static short tabPot2[5] = {0, 0, 0, 0, 0}; + static short currentValue[2] = {0, 0}; + short avg[2]= {0, 0}; + static short tabPtr = 0; + static bool ready = false; + + currentValue[0] = evenAnn1.read() * 1000; + avg[0] = Average(tabPot1); + + currentValue[1] = evenAnn2.read() * 1000; + avg[1] = Average(tabPot2); + + if(ready) { + if((currentValue[0] < (avg[0] - ANN_THRESOLD)) || (currentValue[0] > (avg[0] + ANN_THRESOLD))) + { + Event_t *event1 = new Event_t(); + event1->type = POT_1; + event1->time = time(NULL); + queue_mutex.lock(); + eventQueue.put(event1); + queue_mutex.unlock(); + } + + if((currentValue[1] < (avg[1] - ANN_THRESOLD)) || (currentValue[1] > (avg[1] + ANN_THRESOLD))) + { + Event_t *event2 = new Event_t(); + event2->type = POT_2; + event2->time = time(NULL); + queue_mutex.lock(); + eventQueue.put(event2); + queue_mutex.unlock(); + } } -} - -void even4_thread(void const *args) -{ - while (true) + + tabPot1[tabPtr] = currentValue[0]; + tabPot2[tabPtr] = currentValue[1]; + + tabPtr++; + if(tabPtr == 5) { + tabPtr = 0; + ready = true; } } +void NumEvent_thread(void const *args) +{ + RtosTimer samplingTimer(samplingNum, osTimerPeriodic, (void *)0); + samplingTimer.start(NUM_DELAY); + while (true){} +} -int main() { -Thread thread1(even1_thread); -Thread thread2(even2_thread); -Thread thread3(even3_thread); -Thread thread4(even4_thread); -while (true) { - } - } \ No newline at end of file +void AnnEvent_thread(void const *args) +{ + RtosTimer samplingTimer(samplingAnn, osTimerPeriodic, (void *)0); + samplingTimer.start(ANN_DELAY); + while (true){} +} + +void Collector_thread(void const *args) +{ + Event_t *event; + osEvent evt; + + while(true) + { + evt = eventQueue.get(); + if (evt.status == osEventMessage) + { + event = (Event_t*)evt.value.p; + } + pc.printf("Event Type = %s Time = %d \n\r", eventType[event->type], event->time); + + delete event; + } +} + +int main() +{ + RTC_Init(); + Thread thread1(NumEvent_thread); + Thread thread2(AnnEvent_thread); + Thread thread3(Collector_thread); + + /* + thread1.set_priority(osPriorityRealtime); + thread2.set_priority(osPriorityRealtime); + thread3.set_priority(osPriorityNormal); + */ + + while (true){} + } + \ No newline at end of file