
mbed2 pre-final
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
servo_gui.cpp@5:7ca9ea4cde3a, 2020-06-15 (annotated)
- Committer:
- domino5740
- Date:
- Mon Jun 15 17:33:23 2020 +0000
- Revision:
- 5:7ca9ea4cde3a
- Parent:
- 4:a8494b656292
final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
domino5740 | 2:7dc265489818 | 1 | #include "servo_gui.h" |
domino5740 | 2:7dc265489818 | 2 | |
domino5740 | 2:7dc265489818 | 3 | #define PI 3.14159 |
domino5740 | 2:7dc265489818 | 4 | |
domino5740 | 2:7dc265489818 | 5 | extern DigitalIn UserButton; |
domino5740 | 2:7dc265489818 | 6 | |
domino5740 | 2:7dc265489818 | 7 | ServoGui::ServoGui(void) |
domino5740 | 2:7dc265489818 | 8 | { |
domino5740 | 2:7dc265489818 | 9 | lcd.Clear(LCD_COLOR_WHITE); |
domino5740 | 2:7dc265489818 | 10 | DrawServo(); |
domino5740 | 2:7dc265489818 | 11 | |
domino5740 | 2:7dc265489818 | 12 | lcd.SetTextColor(LCD_COLOR_BLACK); |
domino5740 | 2:7dc265489818 | 13 | unsigned char ucLedXpos = 55; |
domino5740 | 2:7dc265489818 | 14 | for(unsigned char ucLedCounter = 0; ucLedCounter < 4; ucLedCounter++) { |
domino5740 | 2:7dc265489818 | 15 | lcd.DrawCircle(ucLedXpos, 280, 16); |
domino5740 | 2:7dc265489818 | 16 | ucLedXpos += 40; |
domino5740 | 2:7dc265489818 | 17 | } |
domino5740 | 2:7dc265489818 | 18 | } |
domino5740 | 2:7dc265489818 | 19 | |
domino5740 | 2:7dc265489818 | 20 | void ServoGui::LedStepRight(void) { |
domino5740 | 2:7dc265489818 | 21 | LedStep(RIGHT); |
domino5740 | 2:7dc265489818 | 22 | } |
domino5740 | 2:7dc265489818 | 23 | |
domino5740 | 2:7dc265489818 | 24 | void ServoGui::LedStepLeft(void) { |
domino5740 | 2:7dc265489818 | 25 | LedStep(LEFT); |
domino5740 | 2:7dc265489818 | 26 | } |
domino5740 | 2:7dc265489818 | 27 | |
domino5740 | 2:7dc265489818 | 28 | enum DetectorState ServoGui::eReadDetector(void) { |
domino5740 | 2:7dc265489818 | 29 | if (UserButton == 1) { |
domino5740 | 2:7dc265489818 | 30 | return ACTIVE; |
domino5740 | 2:7dc265489818 | 31 | } |
domino5740 | 2:7dc265489818 | 32 | else { |
domino5740 | 2:7dc265489818 | 33 | return INACTIVE; |
domino5740 | 2:7dc265489818 | 34 | } |
domino5740 | 2:7dc265489818 | 35 | } |
domino5740 | 2:7dc265489818 | 36 | |
domino5740 | 2:7dc265489818 | 37 | void ServoGui::LedOn(unsigned char ucLedIndex) { |
domino5740 | 2:7dc265489818 | 38 | LedClear(); |
domino5740 | 2:7dc265489818 | 39 | lcd.SetTextColor(LCD_COLOR_BLUE); |
domino5740 | 2:7dc265489818 | 40 | lcd.FillCircle(55 + (40 * ucLedIndex), 280, 15); |
domino5740 | 2:7dc265489818 | 41 | } |
domino5740 | 2:7dc265489818 | 42 | |
domino5740 | 2:7dc265489818 | 43 | void ServoGui::LedStep(enum Direction eStepDirection) { |
domino5740 | 2:7dc265489818 | 44 | |
domino5740 | 2:7dc265489818 | 45 | static unsigned int uiLedPoint = 0; |
domino5740 | 2:7dc265489818 | 46 | |
domino5740 | 2:7dc265489818 | 47 | switch(eStepDirection) { |
domino5740 | 2:7dc265489818 | 48 | case LEFT: |
domino5740 | 2:7dc265489818 | 49 | uiLedPoint--; |
domino5740 | 2:7dc265489818 | 50 | if(uiMarkerPos == 0) { |
domino5740 | 2:7dc265489818 | 51 | uiMarkerPos = 359; |
domino5740 | 2:7dc265489818 | 52 | } |
domino5740 | 2:7dc265489818 | 53 | else { |
domino5740 | 2:7dc265489818 | 54 | uiMarkerPos--; |
domino5740 | 2:7dc265489818 | 55 | } |
domino5740 | 2:7dc265489818 | 56 | break; |
domino5740 | 2:7dc265489818 | 57 | case RIGHT: |
domino5740 | 2:7dc265489818 | 58 | uiLedPoint++; |
domino5740 | 2:7dc265489818 | 59 | uiMarkerPos++; |
domino5740 | 2:7dc265489818 | 60 | break; |
domino5740 | 2:7dc265489818 | 61 | } |
domino5740 | 2:7dc265489818 | 62 | LedOn(uiLedPoint % 4); |
domino5740 | 2:7dc265489818 | 63 | uiMarkerPos = uiMarkerPos % 360; |
domino5740 | 2:7dc265489818 | 64 | DrawServo(); |
domino5740 | 2:7dc265489818 | 65 | DrawMarker(uiMarkerPos); |
domino5740 | 2:7dc265489818 | 66 | } |
domino5740 | 2:7dc265489818 | 67 | |
domino5740 | 2:7dc265489818 | 68 | void ServoGui::LedClear(void) |
domino5740 | 2:7dc265489818 | 69 | { |
domino5740 | 2:7dc265489818 | 70 | lcd.SetTextColor(LCD_COLOR_WHITE); |
domino5740 | 2:7dc265489818 | 71 | unsigned char ucLedXpos = 55; |
domino5740 | 2:7dc265489818 | 72 | for(unsigned char ucLedCounter = 0; ucLedCounter < 4; ucLedCounter++) { |
domino5740 | 2:7dc265489818 | 73 | lcd.FillCircle(ucLedXpos, 280, 15); |
domino5740 | 2:7dc265489818 | 74 | ucLedXpos += 40; |
domino5740 | 2:7dc265489818 | 75 | } |
domino5740 | 2:7dc265489818 | 76 | } |
domino5740 | 2:7dc265489818 | 77 | |
domino5740 | 2:7dc265489818 | 78 | void ServoGui::DrawServo(void) { |
domino5740 | 2:7dc265489818 | 79 | lcd.SetTextColor(LCD_COLOR_BLACK); |
domino5740 | 2:7dc265489818 | 80 | lcd.FillCircle(120, 120, 100); |
domino5740 | 2:7dc265489818 | 81 | lcd.SetTextColor(LCD_COLOR_WHITE); |
domino5740 | 2:7dc265489818 | 82 | lcd.FillCircle(120, 120, 20); |
domino5740 | 2:7dc265489818 | 83 | } |
domino5740 | 2:7dc265489818 | 84 | |
domino5740 | 2:7dc265489818 | 85 | void ServoGui::DrawMarker(unsigned int uiPosition) { |
domino5740 | 2:7dc265489818 | 86 | lcd.SetTextColor(LCD_COLOR_WHITE); |
domino5740 | 2:7dc265489818 | 87 | lcd.DrawLine(120, 120, (120 + (100 * cos((uiMarkerStartPos + uiPosition) * PI / 180))), (120 + (100 * sin((uiMarkerStartPos + uiPosition) * PI / 180)))); |
domino5740 | 2:7dc265489818 | 88 | } |