George Wang
/
3pi_robot
Interrupt changes LED
Fork of Test1 by
main.cpp@1:963bf6581114, 2015-10-15 (annotated)
- Committer:
- wqz9822
- Date:
- Thu Oct 15 16:51:04 2015 +0000
- Revision:
- 1:963bf6581114
- Parent:
- 0:1da3cc3bc3a5
Interrupt changes LED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
powerstrokediesel97 | 0:1da3cc3bc3a5 | 1 | #include "mbed.h" |
wqz9822 | 1:963bf6581114 | 2 | #include "m3pi.h" |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 3 | |
wqz9822 | 1:963bf6581114 | 4 | //Ticker toggler1; // periodic interrupt routines |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 5 | InterruptIn risingEdge(p16); |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 6 | |
wqz9822 | 1:963bf6581114 | 7 | m3pi m3pi; |
wqz9822 | 1:963bf6581114 | 8 | Serial Wixel(p28, p27); // tx, rx |
wqz9822 | 1:963bf6581114 | 9 | AnalogIn analog (p20); |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 10 | DigitalOut myled(LED1); |
wqz9822 | 1:963bf6581114 | 11 | |
wqz9822 | 1:963bf6581114 | 12 | int behaviour; |
wqz9822 | 1:963bf6581114 | 13 | float inc; |
wqz9822 | 1:963bf6581114 | 14 | bool incCurve; |
wqz9822 | 1:963bf6581114 | 15 | bool sign = true; |
wqz9822 | 1:963bf6581114 | 16 | volatile int ledValue; |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 17 | |
wqz9822 | 1:963bf6581114 | 18 | void changeCurve() |
wqz9822 | 1:963bf6581114 | 19 | { |
wqz9822 | 1:963bf6581114 | 20 | if (sign) |
wqz9822 | 1:963bf6581114 | 21 | { |
wqz9822 | 1:963bf6581114 | 22 | inc = 0.35; |
wqz9822 | 1:963bf6581114 | 23 | } |
wqz9822 | 1:963bf6581114 | 24 | else |
wqz9822 | 1:963bf6581114 | 25 | { |
wqz9822 | 1:963bf6581114 | 26 | inc = 0.45; |
wqz9822 | 1:963bf6581114 | 27 | } |
wqz9822 | 1:963bf6581114 | 28 | sign = !sign; |
wqz9822 | 1:963bf6581114 | 29 | } |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 30 | |
wqz9822 | 1:963bf6581114 | 31 | //Generate series of circles with different radius |
wqz9822 | 1:963bf6581114 | 32 | void seriesOfCircle() |
wqz9822 | 1:963bf6581114 | 33 | { |
wqz9822 | 1:963bf6581114 | 34 | if(incCurve) |
wqz9822 | 1:963bf6581114 | 35 | { |
wqz9822 | 1:963bf6581114 | 36 | inc += 0.001; |
wqz9822 | 1:963bf6581114 | 37 | } |
wqz9822 | 1:963bf6581114 | 38 | else |
wqz9822 | 1:963bf6581114 | 39 | { |
wqz9822 | 1:963bf6581114 | 40 | inc -= 0.001; |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 41 | } |
wqz9822 | 1:963bf6581114 | 42 | |
wqz9822 | 1:963bf6581114 | 43 | if(inc >= 0.6){incCurve = false;} |
wqz9822 | 1:963bf6581114 | 44 | if(inc <= 0.45){incCurve = true;} |
wqz9822 | 1:963bf6581114 | 45 | } |
wqz9822 | 1:963bf6581114 | 46 | |
wqz9822 | 1:963bf6581114 | 47 | void toggleLED() |
wqz9822 | 1:963bf6581114 | 48 | { |
wqz9822 | 1:963bf6581114 | 49 | |
wqz9822 | 1:963bf6581114 | 50 | if (ledValue == 0) |
wqz9822 | 1:963bf6581114 | 51 | { |
wqz9822 | 1:963bf6581114 | 52 | ledValue = 1; |
wqz9822 | 1:963bf6581114 | 53 | } |
wqz9822 | 1:963bf6581114 | 54 | else |
wqz9822 | 1:963bf6581114 | 55 | { |
wqz9822 | 1:963bf6581114 | 56 | ledValue = 0; |
wqz9822 | 1:963bf6581114 | 57 | } |
wqz9822 | 1:963bf6581114 | 58 | |
wqz9822 | 1:963bf6581114 | 59 | myled = ledValue; |
wqz9822 | 1:963bf6581114 | 60 | |
wqz9822 | 1:963bf6581114 | 61 | } |
wqz9822 | 1:963bf6581114 | 62 | |
wqz9822 | 1:963bf6581114 | 63 | unsigned int random_generator (void) |
wqz9822 | 1:963bf6581114 | 64 | { |
wqz9822 | 1:963bf6581114 | 65 | unsigned int x = 0; |
wqz9822 | 1:963bf6581114 | 66 | unsigned int iRandom = 0; |
wqz9822 | 1:963bf6581114 | 67 | |
wqz9822 | 1:963bf6581114 | 68 | for (x = 0; x <= 32; x += 2) |
wqz9822 | 1:963bf6581114 | 69 | { |
wqz9822 | 1:963bf6581114 | 70 | iRandom += ((analog.read_u16() % 3) << x); |
wqz9822 | 1:963bf6581114 | 71 | wait_us (10); |
wqz9822 | 1:963bf6581114 | 72 | } |
wqz9822 | 1:963bf6581114 | 73 | |
wqz9822 | 1:963bf6581114 | 74 | return iRandom; |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 75 | } |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 76 | |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 77 | //main program |
wqz9822 | 1:963bf6581114 | 78 | int main() |
wqz9822 | 1:963bf6581114 | 79 | { |
wqz9822 | 1:963bf6581114 | 80 | |
wqz9822 | 1:963bf6581114 | 81 | Wixel.baud(115200); |
wqz9822 | 1:963bf6581114 | 82 | //srand (random_generator()); // Using ADC value to generate random seed |
wqz9822 | 1:963bf6581114 | 83 | risingEdge.rise(&toggleLED); |
wqz9822 | 1:963bf6581114 | 84 | ledValue = 0; |
wqz9822 | 1:963bf6581114 | 85 | //toggler1.attach(&changeCurve,0.9); // toggles curve every 900 ms |
wqz9822 | 1:963bf6581114 | 86 | //inc = 0.45; |
wqz9822 | 1:963bf6581114 | 87 | //incCurve = true; |
wqz9822 | 1:963bf6581114 | 88 | while(1) |
wqz9822 | 1:963bf6581114 | 89 | { |
wqz9822 | 1:963bf6581114 | 90 | //behaviour = rand() % 5 + 1; |
wqz9822 | 1:963bf6581114 | 91 | switch (behaviour) |
wqz9822 | 1:963bf6581114 | 92 | { |
wqz9822 | 1:963bf6581114 | 93 | case 1: |
wqz9822 | 1:963bf6581114 | 94 | // This is for testing rose curve |
wqz9822 | 1:963bf6581114 | 95 | //m3pi.left_motor(inc); |
wqz9822 | 1:963bf6581114 | 96 | //wait(0.1); |
wqz9822 | 1:963bf6581114 | 97 | //m3pi.right_motor(0.7); |
wqz9822 | 1:963bf6581114 | 98 | //wait(0.1); |
wqz9822 | 1:963bf6581114 | 99 | break; |
wqz9822 | 1:963bf6581114 | 100 | case 2: |
wqz9822 | 1:963bf6581114 | 101 | |
wqz9822 | 1:963bf6581114 | 102 | break; |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 103 | } |
wqz9822 | 1:963bf6581114 | 104 | } |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 105 | |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 106 | } |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 107 | |
powerstrokediesel97 | 0:1da3cc3bc3a5 | 108 |