
zoba
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
ServoGUI.cpp
- Committer:
- bolko
- Date:
- 2020-06-09
- Revision:
- 1:4fd32c2e7975
- Parent:
- 0:befccd954577
File content as of revision 1:4fd32c2e7975:
#include "ServoGUI.h" #include "mbed.h" #include "mbed.h" DigitalIn UserButton(USER_BUTTON); enum eStep{RIGHT, LEFT}; enum eDetectorState{ACTIVE, OFF}; ServoGUI::ServoGUI(){ LCD_Display.Clear(LCD_COLOR_WHITE); sPosition.X=120; sPosition.Y=210; ucCurrentPosition=0; ucStepPosition=0; ucCallibPosition=12; DrawServo(); LedOn(0); Callib(); } void ServoGUI::DrawServo(){ LCD_Display.SetTextColor(LCD_COLOR_BLACK); LCD_Display.FillCircle(120,110,102); LCD_Display.SetTextColor(LCD_COLOR_BLUE); LCD_Display.FillCircle(120, 110, 100); LCD_Display.SetTextColor(LCD_COLOR_YELLOW); LCD_Display.DrawLine(120, 110, sPosition.X, sPosition.Y); LCD_Display.SetTextColor(LCD_COLOR_WHITE); LCD_Display.FillCircle(120, 110, 20); } void ServoGUI::DrawLed(unsigned char ucCurrentLed, uint32_t uiLedColor){ LCD_Display.SetTextColor(LCD_COLOR_BLACK); LCD_Display.FillCircle(30+60*ucCurrentLed,270,20); LCD_Display.SetTextColor(uiLedColor); LCD_Display.FillCircle(30+60*ucCurrentLed,270,18); } void ServoGUI::LedOn(unsigned char ucLed){ unsigned char ucCurrentLed; for(ucCurrentLed=0; ucCurrentLed<NUMBER_OF_LEDS; ucCurrentLed++){ if(ucCurrentLed==ucLed){ DrawLed(ucCurrentLed,LCD_COLOR_BLUE); } else{ DrawLed(ucCurrentLed, LCD_COLOR_WHITE); } } } void ServoGUI::Step(void){ double dStep; dStep=((((ucCurrentPosition+ucCallibPosition)%48))%48*(3.1415/24)); sPosition.X=(120+100*cos(dStep)); sPosition.Y=(110+100*sin(dStep)); DrawServo(); LedOn(ucCurrentPosition%4); wait(0.1); } void ServoGUI::MovePos(enum eStep eDirection){ while(ucCurrentPosition!=ucStepPosition){ if(eDirection==LEFT){ ucCurrentPosition--; } else if(eDirection==RIGHT){ ucCurrentPosition++; } else; ucCurrentPosition=ucCurrentPosition%48; Step(); } } void ServoGUI::GoTo(unsigned char ucPosition){ ucStepPosition=ucPosition; if(ucCurrentPosition!=ucStepPosition){ enum eStep eDirection= ucPosition < ucCurrentPosition ? LEFT : RIGHT; MovePos(eDirection); } else; } void ServoGUI::Shift(unsigned char ucLed){ ucStepPosition+=ucLed; if(ucCurrentPosition!=ucStepPosition){ enum eStep eDirection= ucStepPosition < ucCurrentPosition ? LEFT : RIGHT; ucStepPosition=ucStepPosition%48; MovePos(eDirection); } else; } enum eDetectorState ServoGUI::GetDetector(){ if(UserButton==1) return ACTIVE; else return OFF; } void ServoGUI::Callib(){ unsigned char ucCallibCounter=12; while(GetDetector()!=ACTIVE){ Shift(1); ucCallibCounter++; } ucCallibPosition=ucCallibCounter%48; ucCurrentPosition=0; ucStepPosition=0; }