complete
Dependencies: 4DGL-uLCD-SE PinDetect mbed
Fork of my2036lab2robotLCD by
main.cpp@1:5a1311f0ea06, 2016-11-06 (annotated)
- Committer:
- jboettcher
- Date:
- Sun Nov 06 22:25:24 2016 +0000
- Revision:
- 1:5a1311f0ea06
- Parent:
- 0:343fbeea672c
complete;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 0:343fbeea672c | 1 | |
4180_1 | 0:343fbeea672c | 2 | #include "mbed.h" |
4180_1 | 0:343fbeea672c | 3 | #include "Speaker.h" |
4180_1 | 0:343fbeea672c | 4 | #include "PinDetect.h" |
4180_1 | 0:343fbeea672c | 5 | #include "uLCD_4DGL.h" |
4180_1 | 0:343fbeea672c | 6 | // setup builtin LEDs |
4180_1 | 0:343fbeea672c | 7 | DigitalOut myLed1(LED1); |
4180_1 | 0:343fbeea672c | 8 | DigitalOut myLed2(LED2); |
4180_1 | 0:343fbeea672c | 9 | DigitalOut myLed3(LED3); |
4180_1 | 0:343fbeea672c | 10 | DigitalOut myLed4(LED4); |
4180_1 | 0:343fbeea672c | 11 | // setup pushbuttons for debounced interrupt use |
4180_1 | 0:343fbeea672c | 12 | PinDetect pb1(p23); |
4180_1 | 0:343fbeea672c | 13 | PinDetect pb2(p24); |
4180_1 | 0:343fbeea672c | 14 | PinDetect pb3(p25); |
4180_1 | 0:343fbeea672c | 15 | PinDetect pb4(p26); |
4180_1 | 0:343fbeea672c | 16 | |
4180_1 | 0:343fbeea672c | 17 | // setup LCD |
4180_1 | 0:343fbeea672c | 18 | uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object |
4180_1 | 0:343fbeea672c | 19 | |
4180_1 | 0:343fbeea672c | 20 | //moving include down here allows use in uLCD in Robot class draw and erase member functions |
4180_1 | 0:343fbeea672c | 21 | //easier for now than passing a new uLCD_4DGL object argument to the class |
4180_1 | 0:343fbeea672c | 22 | #include "Robot.h" |
4180_1 | 0:343fbeea672c | 23 | |
4180_1 | 0:343fbeea672c | 24 | // setup instance of new Speaker class, mySpeaker using pin 21 |
4180_1 | 0:343fbeea672c | 25 | // the pin must be a PWM output pin |
4180_1 | 0:343fbeea672c | 26 | Speaker mySpeaker(p21); |
4180_1 | 0:343fbeea672c | 27 | |
4180_1 | 0:343fbeea672c | 28 | // pushbutton status - need volatile for safe interrupt R/W |
4180_1 | 0:343fbeea672c | 29 | volatile int pbStatus = 0; |
4180_1 | 0:343fbeea672c | 30 | |
4180_1 | 0:343fbeea672c | 31 | // Callback routine is interrupt activated by a debounced pb1 hit |
4180_1 | 0:343fbeea672c | 32 | void pb1_hit_callback (void) |
4180_1 | 0:343fbeea672c | 33 | { |
4180_1 | 0:343fbeea672c | 34 | // CODE HERE WILL RUN WHEN INTERUPT IS GENERATED |
4180_1 | 0:343fbeea672c | 35 | pbStatus = pbStatus | 0x01; |
4180_1 | 0:343fbeea672c | 36 | |
4180_1 | 0:343fbeea672c | 37 | } |
4180_1 | 0:343fbeea672c | 38 | // Callback routine is interrupt activated by a debounced pb2 hit |
4180_1 | 0:343fbeea672c | 39 | void pb2_hit_callback (void) |
4180_1 | 0:343fbeea672c | 40 | { |
4180_1 | 0:343fbeea672c | 41 | // CODE HERE WILL RUN WHEN INTERUPT IS GENERATED |
4180_1 | 0:343fbeea672c | 42 | pbStatus = pbStatus | 0x02; |
4180_1 | 0:343fbeea672c | 43 | } |
4180_1 | 0:343fbeea672c | 44 | // Callback routine is interrupt activated by a debounced pb3 hit |
4180_1 | 0:343fbeea672c | 45 | void pb3_hit_callback (void) |
4180_1 | 0:343fbeea672c | 46 | { |
4180_1 | 0:343fbeea672c | 47 | // CODE HERE WILL RUN WHEN INTERUPT IS GENERATED |
4180_1 | 0:343fbeea672c | 48 | pbStatus = pbStatus | 0x04; |
4180_1 | 0:343fbeea672c | 49 | } |
4180_1 | 0:343fbeea672c | 50 | // Callback routine is interrupt activated by a debounced pb4 hit |
4180_1 | 0:343fbeea672c | 51 | void pb4_hit_callback (void) |
4180_1 | 0:343fbeea672c | 52 | { |
4180_1 | 0:343fbeea672c | 53 | // CODE HERE WILL RUN WHEN INTERUPT IS GENERATED |
4180_1 | 0:343fbeea672c | 54 | pbStatus = pbStatus | 0x08; |
4180_1 | 0:343fbeea672c | 55 | } |
4180_1 | 0:343fbeea672c | 56 | |
4180_1 | 0:343fbeea672c | 57 | // main program |
4180_1 | 0:343fbeea672c | 58 | int main() |
4180_1 | 0:343fbeea672c | 59 | { |
jboettcher | 1:5a1311f0ea06 | 60 | uLCD.printf("\nmyRobot!\nJoseph Boettcher"); |
4180_1 | 0:343fbeea672c | 61 | //setup four SPST push buttons |
4180_1 | 0:343fbeea672c | 62 | pb1.mode(PullUp); //add internal pullup resistor |
4180_1 | 0:343fbeea672c | 63 | pb2.mode(PullUp); |
4180_1 | 0:343fbeea672c | 64 | pb3.mode(PullUp); |
4180_1 | 0:343fbeea672c | 65 | pb4.mode(PullUp); |
4180_1 | 0:343fbeea672c | 66 | // need a small delay for initial pullup to take effect due to capacitance |
4180_1 | 0:343fbeea672c | 67 | wait(.01); |
4180_1 | 0:343fbeea672c | 68 | // Setup Interrupt callback functions for each pb hit |
4180_1 | 0:343fbeea672c | 69 | pb1.attach_deasserted(&pb1_hit_callback); |
4180_1 | 0:343fbeea672c | 70 | pb2.attach_deasserted(&pb2_hit_callback); |
4180_1 | 0:343fbeea672c | 71 | pb3.attach_deasserted(&pb3_hit_callback); |
4180_1 | 0:343fbeea672c | 72 | pb4.attach_deasserted(&pb4_hit_callback); |
4180_1 | 0:343fbeea672c | 73 | // Start sampling the pb inputs using interrupts |
4180_1 | 0:343fbeea672c | 74 | pb1.setSampleFrequency(); |
4180_1 | 0:343fbeea672c | 75 | pb2.setSampleFrequency(); |
4180_1 | 0:343fbeea672c | 76 | pb3.setSampleFrequency(); |
4180_1 | 0:343fbeea672c | 77 | pb4.setSampleFrequency(); |
4180_1 | 0:343fbeea672c | 78 | // pushbuttons are all now setup with pullups and running with a software decounce filter |
4180_1 | 0:343fbeea672c | 79 | |
4180_1 | 0:343fbeea672c | 80 | // use your modified robot class to move and display robot's new location on LCD |
4180_1 | 0:343fbeea672c | 81 | Robot myRobot; |
4180_1 | 0:343fbeea672c | 82 | |
4180_1 | 0:343fbeea672c | 83 | myRobot.draw(); //initial robot display in center of LCD |
4180_1 | 0:343fbeea672c | 84 | //main loop to control and display robot |
4180_1 | 0:343fbeea672c | 85 | while(1) { |
4180_1 | 0:343fbeea672c | 86 | //check pushbutton status for new input |
4180_1 | 0:343fbeea672c | 87 | switch (pbStatus) { |
4180_1 | 0:343fbeea672c | 88 | //move forward |
4180_1 | 0:343fbeea672c | 89 | case 0x01 : |
4180_1 | 0:343fbeea672c | 90 | myLed1 = 1; |
4180_1 | 0:343fbeea672c | 91 | pbStatus = 0; |
4180_1 | 0:343fbeea672c | 92 | mySpeaker.PlayNote(200.0,0.1,0.8); |
4180_1 | 0:343fbeea672c | 93 | myRobot.erase(); |
4180_1 | 0:343fbeea672c | 94 | myRobot.moveForward(1); |
4180_1 | 0:343fbeea672c | 95 | myRobot.draw(); |
4180_1 | 0:343fbeea672c | 96 | break; |
4180_1 | 0:343fbeea672c | 97 | //move backwards |
4180_1 | 0:343fbeea672c | 98 | case 0x02 : |
4180_1 | 0:343fbeea672c | 99 | myLed2 = 1; |
4180_1 | 0:343fbeea672c | 100 | pbStatus = 0; |
4180_1 | 0:343fbeea672c | 101 | mySpeaker.PlayNote(400.0,0.1,0.8); |
4180_1 | 0:343fbeea672c | 102 | myRobot.erase(); |
4180_1 | 0:343fbeea672c | 103 | myRobot.moveBackward(1); |
4180_1 | 0:343fbeea672c | 104 | myRobot.draw(); |
4180_1 | 0:343fbeea672c | 105 | break; |
4180_1 | 0:343fbeea672c | 106 | //move left |
4180_1 | 0:343fbeea672c | 107 | case 0x04 : |
4180_1 | 0:343fbeea672c | 108 | myLed3 = 1; |
4180_1 | 0:343fbeea672c | 109 | pbStatus = 0; |
4180_1 | 0:343fbeea672c | 110 | mySpeaker.PlayNote(600.0,0.1,0.8); |
4180_1 | 0:343fbeea672c | 111 | myRobot.erase(); |
4180_1 | 0:343fbeea672c | 112 | myRobot.moveLeft(1); |
4180_1 | 0:343fbeea672c | 113 | myRobot.draw(); |
4180_1 | 0:343fbeea672c | 114 | break; |
4180_1 | 0:343fbeea672c | 115 | //move right |
4180_1 | 0:343fbeea672c | 116 | case 0x08 : |
4180_1 | 0:343fbeea672c | 117 | myLed4 = 1; |
4180_1 | 0:343fbeea672c | 118 | pbStatus = 0; |
4180_1 | 0:343fbeea672c | 119 | mySpeaker.PlayNote(800.0,0.1,0.8); |
4180_1 | 0:343fbeea672c | 120 | myRobot.erase(); |
4180_1 | 0:343fbeea672c | 121 | myRobot.moveRight(1); |
4180_1 | 0:343fbeea672c | 122 | myRobot.draw(); |
4180_1 | 0:343fbeea672c | 123 | break; |
4180_1 | 0:343fbeea672c | 124 | //no pb or multiple pbs hit |
4180_1 | 0:343fbeea672c | 125 | default : |
jboettcher | 1:5a1311f0ea06 | 126 | // myLed1 = 0; |
4180_1 | 0:343fbeea672c | 127 | myLed2 = 0; |
4180_1 | 0:343fbeea672c | 128 | myLed3 = 0; |
4180_1 | 0:343fbeea672c | 129 | myLed4 = 0; |
4180_1 | 0:343fbeea672c | 130 | pbStatus = 0; |
4180_1 | 0:343fbeea672c | 131 | } //end switch |
4180_1 | 0:343fbeea672c | 132 | myLed1 = !myLed1; //blink to show loop is still running |
4180_1 | 0:343fbeea672c | 133 | wait(.05); |
4180_1 | 0:343fbeea672c | 134 | } //end while |
4180_1 | 0:343fbeea672c | 135 | } //end main |
4180_1 | 0:343fbeea672c | 136 |