Example of using threads to run different actions happening at the same time.
Fork of Fa2018-es200-1121-3321-thread-example by
Diff: main.cpp
- Revision:
- 7:b7257f01ced7
- Parent:
- 6:ed7539be9fa3
- Child:
- 8:990a1c27a5da
diff -r ed7539be9fa3 -r b7257f01ced7 main.cpp --- a/main.cpp Fri Oct 19 12:27:25 2018 +0000 +++ b/main.cpp Mon Oct 22 15:23:45 2018 +0000 @@ -1,6 +1,6 @@ /* -ES200 Project 2 thread example -D Evangelista, 2018 +ES200 Project 2 thread use +Rock em Sock em 2018 Note that this uses mbed OS 5 vice OS 2. */ @@ -13,17 +13,17 @@ // Declare some stuff DigitalIn sw1(p18); // switch for activating motor DigitalIn sw2(p16); // switch for activating servo -DigitalIn sw3(p20); // +DigitalIn sw3(p20); // switch for activating servo2 DigitalOut led1(LED1); // status LED for sw1 DigitalOut led2(LED2); // status LED for sw2 DigitalOut led3(LED3); // status LED for sw3 -DigitalOut heartbeat(LED4); // heartbeat LED +DigitalOut heartbeat(LED4); // heartbeat LED adds visual effects Motor m(p26,p30,p29); Servo s1(p21); Servo s2(p22); Thread m_thread; // NEW IN mbed OS 5, threads are used to (sorta) do multiple things at once -Thread s1_thread; -Thread s2_thread; +Thread s1_thread; //creates thread for servo +Thread s2_thread; // creates thread for servo2 /** Callback for executing a simple motor action. When sw1 is high, * the motor turns forward, otherwise the motor turns off. @@ -46,10 +46,11 @@ m.speed(0.0); // set motor speed to zero at startup // start tasks - printf("main thread running\n"); + printf("In the left corner: MIDN Slappy weighing 0.02 lbs.\n In the right corner: MIDN Hitme weighing 0.021 lbs.\n"); m_thread.start(callback(m_callback)); // starts the motor thread going s1_thread.start(callback(s1_callback)); // starts the servo thread going s2_thread.start(callback(s2_callback)); //starts the servo2 thread going + printf("\"ding ding ding\" Fight!\n"); // main loop while(1){ @@ -66,27 +67,27 @@ void m_callback(void){ - printf("m_thread running\n"); + printf("THE fighters are moving back and forth like dancers!!\n"); while(1) { led1.write(1); // light a light for entertaining purposes - m.speed(0.7); // spin motor ahead to move players together - wait (1.2); + m.speed(0.5); // spin motor ahead to move players together + wait (0.7); //time of motor movement m.speed(0.0); //stop players when they are close. wait (1+rand()%5); //let them fight for a random amount of time led1.write(0); - m.speed(-0.7); // move the players back - wait (1.2); + m.speed(-0.5); // move the players back + wait (0.7); //time of opposite motor movement - //ThisThread::sleep_for(200); // this thread executes 5x a second - Thread::wait(200); + //ThisThread::sleep_for(200); // this thread executes 20x a second + // Thread::wait(50); //possibly change to small or erase } // while(1) } // m_callback() void s1_callback(void){ - printf("s1_thread running\n"); + printf("Slappy threw a punch!\n"); while(1){ if (sw2.read()){ led2.write(1); // light a light for entertaining purposes @@ -94,25 +95,25 @@ } else{ led2.write(0); - s1.write(0); // move servo a step to left + s1.write(sw1.read()-0.5); // move servo a step to left } - //ThisThread::sleep_for(200); // this thread executes 5x a second - Thread::wait(200); + //ThisThread::sleep_for(200); // this thread executes 20x a second + // Thread::wait(50); //possibly change } // while(1) } // s1_callback() void s2_callback(void){ - printf("s2_thread running\n"); + printf("Hitme is fighting back!\n"); while(1){ if (sw3.read()){ - led3.write(1); // light a light for debugging purposes + led3.write(1); // light a light for entertaining purposes s2.write(s2.read()+0.5); // move servo a step to right } else{ led3.write(0); - s2.write(0); // move servo a step to left + s2.write(s2.read()-0.5); // move servo a step to left } - //ThisThread::sleep_for(200); // this thread executes 5x a second - Thread::wait(200); + //ThisThread::sleep_for(200); // this thread executes 20x a second + // Thread::wait(50); //possibly change } // while(1) } // s2_callback()