mbed2 pre-final

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

servo_gui.cpp

Committer:
domino5740
Date:
2020-06-15
Revision:
5:7ca9ea4cde3a
Parent:
4:a8494b656292

File content as of revision 5:7ca9ea4cde3a:

#include "servo_gui.h"

#define PI 3.14159

extern DigitalIn UserButton;

ServoGui::ServoGui(void)
{
    lcd.Clear(LCD_COLOR_WHITE);
    DrawServo();
    
    lcd.SetTextColor(LCD_COLOR_BLACK);
    unsigned char ucLedXpos = 55;
    for(unsigned char ucLedCounter = 0; ucLedCounter < 4; ucLedCounter++) {
        lcd.DrawCircle(ucLedXpos, 280, 16);
        ucLedXpos += 40;
    }
}

void ServoGui::LedStepRight(void) {
    LedStep(RIGHT);
}

void ServoGui::LedStepLeft(void) {
    LedStep(LEFT);
}

enum DetectorState ServoGui::eReadDetector(void) {
    if (UserButton == 1) {
        return ACTIVE;
    }
    else {
        return INACTIVE;
    }
}

void ServoGui::LedOn(unsigned char ucLedIndex) {
    LedClear();
    lcd.SetTextColor(LCD_COLOR_BLUE);
    lcd.FillCircle(55 + (40 * ucLedIndex), 280, 15);
}

void ServoGui::LedStep(enum Direction eStepDirection) {
    
    static unsigned int uiLedPoint = 0;

    switch(eStepDirection) {
        case LEFT:
            uiLedPoint--;
            if(uiMarkerPos == 0) {
                uiMarkerPos = 359;
            }
            else {
                uiMarkerPos--;
            }
            break;
        case RIGHT:
            uiLedPoint++;
            uiMarkerPos++;
            break;
    }
    LedOn(uiLedPoint % 4);
    uiMarkerPos = uiMarkerPos % 360;
    DrawServo();
    DrawMarker(uiMarkerPos);
}

void ServoGui::LedClear(void)
{
    lcd.SetTextColor(LCD_COLOR_WHITE);
    unsigned char ucLedXpos =  55;
    for(unsigned char ucLedCounter = 0; ucLedCounter < 4; ucLedCounter++) {
        lcd.FillCircle(ucLedXpos, 280, 15);
        ucLedXpos += 40;
    }
}

void ServoGui::DrawServo(void) {
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.FillCircle(120, 120, 100);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillCircle(120, 120, 20);
}

void ServoGui::DrawMarker(unsigned int uiPosition) {
    lcd.SetTextColor(LCD_COLOR_WHITE); 
    lcd.DrawLine(120, 120, (120 + (100 * cos((uiMarkerStartPos + uiPosition) * PI / 180))), (120 + (100 * sin((uiMarkerStartPos + uiPosition) * PI / 180))));
}