zoba
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
ServoGUI.cpp@1:4fd32c2e7975, 2020-06-09 (annotated)
- Committer:
- bolko
- Date:
- Tue Jun 09 11:20:57 2020 +0000
- Revision:
- 1:4fd32c2e7975
- Parent:
- 0:befccd954577
filip;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
filipksiezyc | 0:befccd954577 | 1 | #include "ServoGUI.h" |
filipksiezyc | 0:befccd954577 | 2 | #include "mbed.h" |
filipksiezyc | 0:befccd954577 | 3 | #include "mbed.h" |
filipksiezyc | 0:befccd954577 | 4 | |
filipksiezyc | 0:befccd954577 | 5 | DigitalIn UserButton(USER_BUTTON); |
filipksiezyc | 0:befccd954577 | 6 | |
filipksiezyc | 0:befccd954577 | 7 | enum eStep{RIGHT, LEFT}; |
filipksiezyc | 0:befccd954577 | 8 | enum eDetectorState{ACTIVE, OFF}; |
filipksiezyc | 0:befccd954577 | 9 | |
filipksiezyc | 0:befccd954577 | 10 | ServoGUI::ServoGUI(){ |
filipksiezyc | 0:befccd954577 | 11 | LCD_Display.Clear(LCD_COLOR_WHITE); |
filipksiezyc | 0:befccd954577 | 12 | sPosition.X=120; |
filipksiezyc | 0:befccd954577 | 13 | sPosition.Y=210; |
filipksiezyc | 0:befccd954577 | 14 | ucCurrentPosition=0; |
filipksiezyc | 0:befccd954577 | 15 | ucStepPosition=0; |
filipksiezyc | 0:befccd954577 | 16 | ucCallibPosition=12; |
filipksiezyc | 0:befccd954577 | 17 | |
filipksiezyc | 0:befccd954577 | 18 | DrawServo(); |
filipksiezyc | 0:befccd954577 | 19 | LedOn(0); |
filipksiezyc | 0:befccd954577 | 20 | Callib(); |
filipksiezyc | 0:befccd954577 | 21 | } |
filipksiezyc | 0:befccd954577 | 22 | |
filipksiezyc | 0:befccd954577 | 23 | void ServoGUI::DrawServo(){ |
filipksiezyc | 0:befccd954577 | 24 | LCD_Display.SetTextColor(LCD_COLOR_BLACK); |
filipksiezyc | 0:befccd954577 | 25 | LCD_Display.FillCircle(120,110,102); |
filipksiezyc | 0:befccd954577 | 26 | LCD_Display.SetTextColor(LCD_COLOR_BLUE); |
filipksiezyc | 0:befccd954577 | 27 | LCD_Display.FillCircle(120, 110, 100); |
filipksiezyc | 0:befccd954577 | 28 | LCD_Display.SetTextColor(LCD_COLOR_YELLOW); |
filipksiezyc | 0:befccd954577 | 29 | LCD_Display.DrawLine(120, 110, sPosition.X, sPosition.Y); |
filipksiezyc | 0:befccd954577 | 30 | LCD_Display.SetTextColor(LCD_COLOR_WHITE); |
filipksiezyc | 0:befccd954577 | 31 | LCD_Display.FillCircle(120, 110, 20); |
filipksiezyc | 0:befccd954577 | 32 | } |
filipksiezyc | 0:befccd954577 | 33 | |
filipksiezyc | 0:befccd954577 | 34 | void ServoGUI::DrawLed(unsigned char ucCurrentLed, uint32_t uiLedColor){ |
filipksiezyc | 0:befccd954577 | 35 | LCD_Display.SetTextColor(LCD_COLOR_BLACK); |
filipksiezyc | 0:befccd954577 | 36 | LCD_Display.FillCircle(30+60*ucCurrentLed,270,20); |
filipksiezyc | 0:befccd954577 | 37 | LCD_Display.SetTextColor(uiLedColor); |
filipksiezyc | 0:befccd954577 | 38 | LCD_Display.FillCircle(30+60*ucCurrentLed,270,18); |
filipksiezyc | 0:befccd954577 | 39 | } |
filipksiezyc | 0:befccd954577 | 40 | |
filipksiezyc | 0:befccd954577 | 41 | void ServoGUI::LedOn(unsigned char ucLed){ |
filipksiezyc | 0:befccd954577 | 42 | unsigned char ucCurrentLed; |
filipksiezyc | 0:befccd954577 | 43 | for(ucCurrentLed=0; ucCurrentLed<NUMBER_OF_LEDS; ucCurrentLed++){ |
filipksiezyc | 0:befccd954577 | 44 | if(ucCurrentLed==ucLed){ |
filipksiezyc | 0:befccd954577 | 45 | DrawLed(ucCurrentLed,LCD_COLOR_BLUE); |
filipksiezyc | 0:befccd954577 | 46 | } |
filipksiezyc | 0:befccd954577 | 47 | else{ |
filipksiezyc | 0:befccd954577 | 48 | DrawLed(ucCurrentLed, LCD_COLOR_WHITE); |
filipksiezyc | 0:befccd954577 | 49 | } |
filipksiezyc | 0:befccd954577 | 50 | } |
filipksiezyc | 0:befccd954577 | 51 | } |
filipksiezyc | 0:befccd954577 | 52 | |
filipksiezyc | 0:befccd954577 | 53 | void ServoGUI::Step(void){ |
filipksiezyc | 0:befccd954577 | 54 | double dStep; |
filipksiezyc | 0:befccd954577 | 55 | dStep=((((ucCurrentPosition+ucCallibPosition)%48))%48*(3.1415/24)); |
filipksiezyc | 0:befccd954577 | 56 | sPosition.X=(120+100*cos(dStep)); |
filipksiezyc | 0:befccd954577 | 57 | sPosition.Y=(110+100*sin(dStep)); |
filipksiezyc | 0:befccd954577 | 58 | DrawServo(); |
filipksiezyc | 0:befccd954577 | 59 | LedOn(ucCurrentPosition%4); |
filipksiezyc | 0:befccd954577 | 60 | wait(0.1); |
filipksiezyc | 0:befccd954577 | 61 | } |
filipksiezyc | 0:befccd954577 | 62 | |
filipksiezyc | 0:befccd954577 | 63 | void ServoGUI::MovePos(enum eStep eDirection){ |
filipksiezyc | 0:befccd954577 | 64 | while(ucCurrentPosition!=ucStepPosition){ |
filipksiezyc | 0:befccd954577 | 65 | if(eDirection==LEFT){ |
filipksiezyc | 0:befccd954577 | 66 | ucCurrentPosition--; |
filipksiezyc | 0:befccd954577 | 67 | } |
filipksiezyc | 0:befccd954577 | 68 | else if(eDirection==RIGHT){ |
filipksiezyc | 0:befccd954577 | 69 | ucCurrentPosition++; |
filipksiezyc | 0:befccd954577 | 70 | } |
filipksiezyc | 0:befccd954577 | 71 | else; |
filipksiezyc | 0:befccd954577 | 72 | ucCurrentPosition=ucCurrentPosition%48; |
filipksiezyc | 0:befccd954577 | 73 | Step(); |
filipksiezyc | 0:befccd954577 | 74 | } |
filipksiezyc | 0:befccd954577 | 75 | } |
filipksiezyc | 0:befccd954577 | 76 | |
filipksiezyc | 0:befccd954577 | 77 | |
filipksiezyc | 0:befccd954577 | 78 | |
filipksiezyc | 0:befccd954577 | 79 | void ServoGUI::GoTo(unsigned char ucPosition){ |
filipksiezyc | 0:befccd954577 | 80 | ucStepPosition=ucPosition; |
filipksiezyc | 0:befccd954577 | 81 | |
filipksiezyc | 0:befccd954577 | 82 | if(ucCurrentPosition!=ucStepPosition){ |
filipksiezyc | 0:befccd954577 | 83 | enum eStep eDirection= ucPosition < ucCurrentPosition ? LEFT : RIGHT; |
filipksiezyc | 0:befccd954577 | 84 | MovePos(eDirection); |
filipksiezyc | 0:befccd954577 | 85 | } |
filipksiezyc | 0:befccd954577 | 86 | else; |
filipksiezyc | 0:befccd954577 | 87 | } |
filipksiezyc | 0:befccd954577 | 88 | |
filipksiezyc | 0:befccd954577 | 89 | |
filipksiezyc | 0:befccd954577 | 90 | void ServoGUI::Shift(unsigned char ucLed){ |
filipksiezyc | 0:befccd954577 | 91 | ucStepPosition+=ucLed; |
filipksiezyc | 0:befccd954577 | 92 | if(ucCurrentPosition!=ucStepPosition){ |
filipksiezyc | 0:befccd954577 | 93 | enum eStep eDirection= ucStepPosition < ucCurrentPosition ? LEFT : RIGHT; |
filipksiezyc | 0:befccd954577 | 94 | ucStepPosition=ucStepPosition%48; |
filipksiezyc | 0:befccd954577 | 95 | MovePos(eDirection); |
filipksiezyc | 0:befccd954577 | 96 | } |
filipksiezyc | 0:befccd954577 | 97 | else; |
filipksiezyc | 0:befccd954577 | 98 | } |
filipksiezyc | 0:befccd954577 | 99 | |
filipksiezyc | 0:befccd954577 | 100 | enum eDetectorState ServoGUI::GetDetector(){ |
filipksiezyc | 0:befccd954577 | 101 | if(UserButton==1) |
filipksiezyc | 0:befccd954577 | 102 | return ACTIVE; |
filipksiezyc | 0:befccd954577 | 103 | else |
filipksiezyc | 0:befccd954577 | 104 | return OFF; |
filipksiezyc | 0:befccd954577 | 105 | } |
filipksiezyc | 0:befccd954577 | 106 | |
filipksiezyc | 0:befccd954577 | 107 | void ServoGUI::Callib(){ |
filipksiezyc | 0:befccd954577 | 108 | unsigned char ucCallibCounter=12; |
filipksiezyc | 0:befccd954577 | 109 | while(GetDetector()!=ACTIVE){ |
filipksiezyc | 0:befccd954577 | 110 | Shift(1); |
filipksiezyc | 0:befccd954577 | 111 | ucCallibCounter++; |
filipksiezyc | 0:befccd954577 | 112 | } |
filipksiezyc | 0:befccd954577 | 113 | ucCallibPosition=ucCallibCounter%48; |
filipksiezyc | 0:befccd954577 | 114 | ucCurrentPosition=0; |
filipksiezyc | 0:befccd954577 | 115 | ucStepPosition=0; |
filipksiezyc | 0:befccd954577 | 116 | } |
filipksiezyc | 0:befccd954577 | 117 |