zoba

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Committer:
bolko
Date:
Tue Jun 09 11:20:57 2020 +0000
Revision:
1:4fd32c2e7975
Parent:
0:befccd954577
filip;

Who changed what in which revision?

UserRevisionLine numberNew 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