RGB LEDs Control
Dependencies: mbed QEI PololuLedStrip
main.cpp@8:2a4298cbae3f, 2019-05-04 (annotated)
- Committer:
- whutsup
- Date:
- Sat May 04 18:51:43 2019 +0000
- Revision:
- 8:2a4298cbae3f
- Parent:
- 6:0882f93da02f
Lune RGB LEDs control;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DavidEGrayson | 0:a3a9c486fc68 | 1 | #include "mbed.h" |
DavidEGrayson | 0:a3a9c486fc68 | 2 | #include "PololuLedStrip.h" |
whutsup | 8:2a4298cbae3f | 3 | #include "QEI.h" |
whutsup | 8:2a4298cbae3f | 4 | #include "MotorControl.h" |
whutsup | 8:2a4298cbae3f | 5 | #include "RgbControl.h" |
DavidEGrayson | 0:a3a9c486fc68 | 6 | |
whutsup | 8:2a4298cbae3f | 7 | //Serial bt(USBTX,USBRX); |
whutsup | 8:2a4298cbae3f | 8 | |
whutsup | 8:2a4298cbae3f | 9 | Serial bt(D1,D0); |
whutsup | 8:2a4298cbae3f | 10 | |
whutsup | 8:2a4298cbae3f | 11 | InterruptIn LeftReset(PF_0); |
whutsup | 8:2a4298cbae3f | 12 | InterruptIn RightReset(PB_4); |
whutsup | 8:2a4298cbae3f | 13 | |
whutsup | 8:2a4298cbae3f | 14 | QEI re(PA_5,PA_7,NC,220); |
DavidEGrayson | 0:a3a9c486fc68 | 15 | |
whutsup | 8:2a4298cbae3f | 16 | Ticker timer1; //control Position |
whutsup | 8:2a4298cbae3f | 17 | Timeout ResetTimer; |
whutsup | 8:2a4298cbae3f | 18 | |
DavidEGrayson | 0:a3a9c486fc68 | 19 | |
whutsup | 8:2a4298cbae3f | 20 | int targetDis; |
whutsup | 8:2a4298cbae3f | 21 | char rxData[7]; |
whutsup | 8:2a4298cbae3f | 22 | bool flagRx = 0; |
whutsup | 8:2a4298cbae3f | 23 | int dayLed; |
DavidEGrayson | 0:a3a9c486fc68 | 24 | |
whutsup | 8:2a4298cbae3f | 25 | int R; |
whutsup | 8:2a4298cbae3f | 26 | int G; |
whutsup | 8:2a4298cbae3f | 27 | int B; |
whutsup | 8:2a4298cbae3f | 28 | |
whutsup | 8:2a4298cbae3f | 29 | void ReadData() |
DavidEGrayson | 0:a3a9c486fc68 | 30 | { |
whutsup | 8:2a4298cbae3f | 31 | char inChar; |
whutsup | 8:2a4298cbae3f | 32 | static char rxCount = 0; |
whutsup | 8:2a4298cbae3f | 33 | static char rxBuf[7]; |
whutsup | 8:2a4298cbae3f | 34 | |
whutsup | 8:2a4298cbae3f | 35 | while(1 == bt.readable()) |
whutsup | 8:2a4298cbae3f | 36 | { |
whutsup | 8:2a4298cbae3f | 37 | |
whutsup | 8:2a4298cbae3f | 38 | inChar = bt.getc(); |
whutsup | 8:2a4298cbae3f | 39 | |
whutsup | 8:2a4298cbae3f | 40 | if('<' == inChar) |
whutsup | 8:2a4298cbae3f | 41 | { |
whutsup | 8:2a4298cbae3f | 42 | rxCount = 1; |
whutsup | 8:2a4298cbae3f | 43 | } |
whutsup | 8:2a4298cbae3f | 44 | |
whutsup | 8:2a4298cbae3f | 45 | else if (rxCount > 0 && rxCount <8) |
whutsup | 8:2a4298cbae3f | 46 | { |
whutsup | 8:2a4298cbae3f | 47 | rxBuf[rxCount-1] = inChar; |
whutsup | 8:2a4298cbae3f | 48 | rxCount++; |
whutsup | 8:2a4298cbae3f | 49 | } |
whutsup | 8:2a4298cbae3f | 50 | |
whutsup | 8:2a4298cbae3f | 51 | else if ( 8 == rxCount && '>' == inChar) |
whutsup | 8:2a4298cbae3f | 52 | { |
whutsup | 8:2a4298cbae3f | 53 | rxCount = 0; |
whutsup | 8:2a4298cbae3f | 54 | flagRx = 1; |
whutsup | 8:2a4298cbae3f | 55 | memcpy(rxData, rxBuf, 7); |
whutsup | 8:2a4298cbae3f | 56 | |
whutsup | 8:2a4298cbae3f | 57 | } |
whutsup | 8:2a4298cbae3f | 58 | } |
whutsup | 8:2a4298cbae3f | 59 | } |
whutsup | 8:2a4298cbae3f | 60 | |
whutsup | 8:2a4298cbae3f | 61 | |
whutsup | 8:2a4298cbae3f | 62 | void Reset_L() |
whutsup | 8:2a4298cbae3f | 63 | { |
whutsup | 8:2a4298cbae3f | 64 | MotorTest(0); |
whutsup | 8:2a4298cbae3f | 65 | re.reset(); |
whutsup | 8:2a4298cbae3f | 66 | } |
whutsup | 8:2a4298cbae3f | 67 | |
whutsup | 8:2a4298cbae3f | 68 | void Reset_R() |
whutsup | 8:2a4298cbae3f | 69 | { |
whutsup | 8:2a4298cbae3f | 70 | MotorTest(0); |
whutsup | 8:2a4298cbae3f | 71 | } |
whutsup | 8:2a4298cbae3f | 72 | |
whutsup | 8:2a4298cbae3f | 73 | void Stop() |
whutsup | 8:2a4298cbae3f | 74 | { |
whutsup | 8:2a4298cbae3f | 75 | MotorTest(0); |
DavidEGrayson | 0:a3a9c486fc68 | 76 | } |
DavidEGrayson | 0:a3a9c486fc68 | 77 | |
DavidEGrayson | 0:a3a9c486fc68 | 78 | int main() |
DavidEGrayson | 0:a3a9c486fc68 | 79 | { |
whutsup | 8:2a4298cbae3f | 80 | |
whutsup | 8:2a4298cbae3f | 81 | bt.baud(115200); |
whutsup | 8:2a4298cbae3f | 82 | bt.puts("START\n"); |
whutsup | 8:2a4298cbae3f | 83 | MotorTest(2); |
whutsup | 8:2a4298cbae3f | 84 | ResetTimer.attach(&Stop,15); |
whutsup | 8:2a4298cbae3f | 85 | |
DavidEGrayson | 0:a3a9c486fc68 | 86 | |
whutsup | 8:2a4298cbae3f | 87 | LeftReset.rise(&Reset_L); |
whutsup | 8:2a4298cbae3f | 88 | RightReset.rise(&Reset_R); |
whutsup | 8:2a4298cbae3f | 89 | |
whutsup | 8:2a4298cbae3f | 90 | char tmpCommand[4] = {0,}; // [ADD] command |
whutsup | 8:2a4298cbae3f | 91 | int rxVal = 0; |
whutsup | 8:2a4298cbae3f | 92 | |
whutsup | 8:2a4298cbae3f | 93 | int modeMotor = 0; |
whutsup | 8:2a4298cbae3f | 94 | int modeNum = 0; |
whutsup | 8:2a4298cbae3f | 95 | bt.attach(&ReadData, Serial::RxIrq); |
whutsup | 8:2a4298cbae3f | 96 | |
whutsup | 8:2a4298cbae3f | 97 | while(1) |
DavidEGrayson | 0:a3a9c486fc68 | 98 | { |
whutsup | 8:2a4298cbae3f | 99 | |
whutsup | 8:2a4298cbae3f | 100 | if (1 == flagRx) |
whutsup | 8:2a4298cbae3f | 101 | { |
whutsup | 8:2a4298cbae3f | 102 | flagRx = 0; |
whutsup | 8:2a4298cbae3f | 103 | tmpCommand[0] = rxData[0]; |
whutsup | 8:2a4298cbae3f | 104 | tmpCommand[1] = rxData[1]; |
whutsup | 8:2a4298cbae3f | 105 | tmpCommand[2] = rxData[2]; |
whutsup | 8:2a4298cbae3f | 106 | rxVal = atoi(rxData+3); |
whutsup | 8:2a4298cbae3f | 107 | |
whutsup | 8:2a4298cbae3f | 108 | if (0 == strcmp(tmpCommand,"MOT")) |
whutsup | 8:2a4298cbae3f | 109 | { |
whutsup | 8:2a4298cbae3f | 110 | bt.putc(tmpCommand[0]); |
whutsup | 8:2a4298cbae3f | 111 | modeMotor = rxVal; |
whutsup | 8:2a4298cbae3f | 112 | MotorTest(modeMotor); |
whutsup | 8:2a4298cbae3f | 113 | |
whutsup | 8:2a4298cbae3f | 114 | } |
whutsup | 8:2a4298cbae3f | 115 | |
whutsup | 8:2a4298cbae3f | 116 | else if (0 == strcmp(tmpCommand,"POS")) |
whutsup | 8:2a4298cbae3f | 117 | { |
whutsup | 8:2a4298cbae3f | 118 | bt.putc(tmpCommand[0]); |
whutsup | 8:2a4298cbae3f | 119 | targetDis = rxVal; |
whutsup | 8:2a4298cbae3f | 120 | timer1.attach(&ControlPos,0.1); |
whutsup | 8:2a4298cbae3f | 121 | } |
whutsup | 8:2a4298cbae3f | 122 | |
whutsup | 8:2a4298cbae3f | 123 | else if (0 == strcmp(tmpCommand,"MOD")) |
whutsup | 8:2a4298cbae3f | 124 | { |
whutsup | 8:2a4298cbae3f | 125 | bt.putc(tmpCommand[0]); |
whutsup | 8:2a4298cbae3f | 126 | modeNum = rxVal; |
whutsup | 8:2a4298cbae3f | 127 | ModeSelect(modeNum); |
whutsup | 8:2a4298cbae3f | 128 | |
whutsup | 8:2a4298cbae3f | 129 | } |
whutsup | 8:2a4298cbae3f | 130 | |
whutsup | 8:2a4298cbae3f | 131 | else if (0 == strcmp(tmpCommand,"DAY")) |
whutsup | 8:2a4298cbae3f | 132 | { |
whutsup | 8:2a4298cbae3f | 133 | ModeSelect(4); |
whutsup | 8:2a4298cbae3f | 134 | bt.putc(tmpCommand[0]); |
whutsup | 8:2a4298cbae3f | 135 | targetDis = atoi(rxData+5); // [ADD] return 2 characters in the back of 4 characters |
whutsup | 8:2a4298cbae3f | 136 | dayLed = 0.01*(atoi(rxData+3)-atoi(rxData+5)); // [ADD] return 2 cahracters in the front of 4 characters |
whutsup | 8:2a4298cbae3f | 137 | timer1.attach(&ControlPos,0.1); |
whutsup | 8:2a4298cbae3f | 138 | } |
whutsup | 8:2a4298cbae3f | 139 | |
whutsup | 8:2a4298cbae3f | 140 | } |
whutsup | 8:2a4298cbae3f | 141 | |
whutsup | 8:2a4298cbae3f | 142 | // int pulse = re.getPulses(); |
whutsup | 8:2a4298cbae3f | 143 | // int d = pulse/220; |
whutsup | 8:2a4298cbae3f | 144 | // int e = LeftReset.read(); |
whutsup | 8:2a4298cbae3f | 145 | // bt.printf("%d %d \n",d,e); |
whutsup | 8:2a4298cbae3f | 146 | |
whutsup | 8:2a4298cbae3f | 147 | wait(0.1); |
whutsup | 8:2a4298cbae3f | 148 | |
whutsup | 8:2a4298cbae3f | 149 | |
DavidEGrayson | 0:a3a9c486fc68 | 150 | } |
whutsup | 8:2a4298cbae3f | 151 | |
whutsup | 8:2a4298cbae3f | 152 | |
whutsup | 8:2a4298cbae3f | 153 | |
whutsup | 8:2a4298cbae3f | 154 | } |