Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed-rtos mbed
Diff: main.cpp
- Revision:
- 1:57cd3ae5f44a
- Parent:
- 0:da581483b90d
- Child:
- 2:18b496a20413
diff -r da581483b90d -r 57cd3ae5f44a main.cpp
--- a/main.cpp Thu Dec 01 05:02:25 2016 +0000
+++ b/main.cpp Fri Dec 02 21:39:47 2016 +0000
@@ -17,15 +17,21 @@
Thread *heartmodeThread;
osThreadId heartmodeTid;
+Queue<char,256> mode_q;
+Queue<char,256> signal_q;
+
+
+FILE * testresults;
+
/////////////////
TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
RawSerial pc(USBTX, USBRX);
char key = 'n';
-char c;
int manual_mode;
int isChangingObsInt;
/////////////////
-
+volatile char c;
+volatile int mm = 0;
int lri = 1000;
int uri = 700;
@@ -37,6 +43,8 @@
int twait = 10;
int thrsh = 1000;
int heartmode = 0;
+
+
void vpace_irq()
{
//heartmodeThread->signal_set(0x1);
@@ -49,6 +57,28 @@
osSignalSet(heartmodeTid, 0x10);
}
+
+
+void Rx_interrupt()
+{
+ while(pc.readable()) {
+ c = pc.getc();
+ if(c == 'm') {
+ mode_q.put((char*)c);
+ mm = 1;
+ } else if(c == 'r' || c == 't') {
+ mode_q.put((char*)c);
+ mm = 0;
+ } else if((c == 'a' || c == 'v') && mm) {
+ signal_q.put((char*)c);
+ }
+ }
+}
+
+
+
+
+
void test_vrp_vv(FILE * results, Timer * ti)
{
int vrpwait = vrp/2;
@@ -478,7 +508,7 @@
void testmode(void const *args)
{
Timer *t;
- FILE * testresults = fopen("/local/testreport.txt", "w"); // Open "out.txt" on the local file system for writing
+ testresults = fopen("/local/testreport.txt", "w"); // Open "out.txt" on the local file system for writing
t = new Timer();
t->start();
@@ -546,70 +576,101 @@
Thread::wait(twait);
apace_led = 0;
break;
+
+// case(0x100):
+//
}
}
}
-//void Rx_interrupt()
-//{
-// while(pc.readable()) {
-// c = pc.getc();
-// if(c == 'r') {
-// heartmode = 0;
-// } else if (heartmode == 0) {
-// randommode(NULL);
-// } else if (c == 't') {
-// heartmode = 1;
-// } else if (c == 'm') {
-// heartmode = 2;
-// } else if (heartmode == 2 && c == 'a') {
-// asignal = 1;
-// asignal_led = 1;
-// Thread::wait(10);
-// asignal = 0;
-// asignal_led = 0;
-// } else if (heartmode == 2 && c == 'v') {
-// vsignal = 1;
-// vsignal_led = 1;
-// Thread::wait(10);
-// vsignal = 0;
-// vsignal_led = 0;
-// }
-// }
-//}
+void manualmode(void const *args)
+{
+ while(1) {
+ osEvent evt = signal_q.get();
+ if(evt.status == osEventMessage) {
+ if((char)evt.value.p == 'a') {
+ asignal = 1;
+ asignal_led = 1;
+ Thread::wait(twait);
+ asignal_led = 0;
+ asignal = 0;
+ } else if((char)evt.value.p == 'v') {
+ vsignal = 1;
+ vsignal_led = 1;
+ Thread::wait(twait);
+ vsignal = 0;
+ vsignal_led = 0;
+ }
+ }
+ }
+}
-//osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE);
+osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE);
osThreadDef(testmode, osPriorityNormal, DEFAULT_STACK_SIZE);
+osThreadDef(manualmode, osPriorityNormal, DEFAULT_STACK_SIZE);
+
int main()
{
vpace.rise(&vpace_irq);
apace.rise(&apace_irq);
-// pc.attach(&Rx_interrupt, RawSerial::RxIrq);
+ pc.attach(&Rx_interrupt, RawSerial::RxIrq);
//heartmodeThread = new Thread();
//Callback<void()> testmodeTask((void*)NULL,(void (*)(void *))&testmode);
- //heartmodeTid = osThreadCreate(osThread(randommode), NULL);
- heartmodeTid = osThreadCreate(osThread(testmode), NULL);
+ heartmodeTid = osThreadCreate(osThread(randommode), NULL);
+// heartmodeTid = osThreadCreate(osThread(testmode), NULL);
+// heartmodeTid = osThreadCreate(osThread(manualmode), NULL);
// lcd.printf();
while(true) {
- while(pc.readable()) {
- key = pc.getc();
- switch(key) {
+// while(pc.readable()) {
+// key = pc.getc();
+ osEvent evt = mode_q.get();
+ if(evt.status == osEventMessage) {
+ switch((char)evt.value.p) {
//pvarp = 0.3s
case('r'):
lcd.printf("R");
- randommode(NULL);
+// randommode.terminate();
+ osThreadTerminate (heartmodeTid);
+ if (testresults != NULL) {
+ fclose(testresults);
+ }
+ asignal_led = 0;
+ vsignal_led = 0;
+ apace_led = 0;
+ vpace_led = 0;
+
+ heartmodeTid = osThreadCreate(osThread(randommode), NULL);
// Thread::wait(100);
break;
case('t'):
lcd.printf("T");
- testmode(NULL);
+ osThreadTerminate (heartmodeTid);
+ if (testresults != NULL) {
+ fclose(testresults);
+ }
+ asignal_led = 0;
+ vsignal_led = 0;
+ apace_led = 0;
+ vpace_led = 0;
+
+ heartmodeTid = osThreadCreate(osThread(testmode), NULL);
break;
case('m'):
lcd.printf("M");
+ osThreadTerminate (heartmodeTid);
+ if (testresults != NULL) {
+ fclose(testresults);
+ }
+ asignal_led = 0;
+ vsignal_led = 0;
+ apace_led = 0;
+ vpace_led = 0;
+
+ heartmodeTid = osThreadCreate(osThread(manualmode), NULL);
manual_mode = 1;
break;
@@ -619,24 +680,5 @@
break;
}
}
-
- if(manual_mode) {
- key = pc.getc();
- if(key == 'a') {
- asignal = 1;
- asignal_led = 1;
- Thread::wait(twait);
- asignal_led = 0;
- asignal = 0;
- } else if(key == 'v') {
- vsignal = 1;
- vsignal_led = 1;
- Thread::wait(twait);
- vsignal = 0;
- vsignal_led = 0;
- } else if(key == 'q') {
- manual_mode = 0;
- }
- }
}
}
\ No newline at end of file