Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Committer:
domino5740
Date:
Mon Jun 08 21:57:59 2020 +0000
Revision:
1:be03cac9fe74
Child:
2:7dc265489818
in progress jazda jazdunia

Who changed what in which revision?

UserRevisionLine numberNew contents of line
domino5740 1:be03cac9fe74 1 #include "servo.h"
domino5740 1:be03cac9fe74 2 Servo myServo;
domino5740 1:be03cac9fe74 3
domino5740 1:be03cac9fe74 4 Servo::Servo(unsigned int uiServoFrequency) {
domino5740 1:be03cac9fe74 5 LedInit();
domino5740 1:be03cac9fe74 6 sServo.eState = CALLIB;
domino5740 1:be03cac9fe74 7 Timer0Interrupts_Init((1000000/uiServoFrequency), &ServoAutomat);
domino5740 1:be03cac9fe74 8 while(sServo.eState != IDLE) {}
domino5740 1:be03cac9fe74 9 }
domino5740 1:be03cac9fe74 10
domino5740 1:be03cac9fe74 11 void ServoGoTo(unsigned int uiPosition) {
domino5740 1:be03cac9fe74 12 sServo.uiDesiredPosition = uiPosition;
domino5740 1:be03cac9fe74 13 sServo.eState = IN_PROGRESS;
domino5740 1:be03cac9fe74 14 while(sServo.eState != IDLE) {}
domino5740 1:be03cac9fe74 15 }
domino5740 1:be03cac9fe74 16
domino5740 1:be03cac9fe74 17 void ServoCallib() {
domino5740 1:be03cac9fe74 18 sServo.eState = CALLIB;
domino5740 1:be03cac9fe74 19 while(sServo.eState != IDLE) {}
domino5740 1:be03cac9fe74 20 }
domino5740 1:be03cac9fe74 21
domino5740 1:be03cac9fe74 22 void Servo::Automat() {
domino5740 1:be03cac9fe74 23 switch(myServo::eState) {
domino5740 1:be03cac9fe74 24 case IN_PROGRESS:
domino5740 1:be03cac9fe74 25 if(uiCurrentPosition < uiDesiredPosition) {
domino5740 1:be03cac9fe74 26 LedStepRight();
domino5740 1:be03cac9fe74 27 uiCurrentPosition++;
domino5740 1:be03cac9fe74 28 }
domino5740 1:be03cac9fe74 29 else if(uiCurrentPosition > uiDesiredPosition){
domino5740 1:be03cac9fe74 30 LedStepLeft();
domino5740 1:be03cac9fe74 31 uiCurrentPosition--;
domino5740 1:be03cac9fe74 32 }
domino5740 1:be03cac9fe74 33 else {
domino5740 1:be03cac9fe74 34 eState = IDLE;
domino5740 1:be03cac9fe74 35 }
domino5740 1:be03cac9fe74 36 break;
domino5740 1:be03cac9fe74 37 case IDLE:
domino5740 1:be03cac9fe74 38 if (uiCurrentPosition != uiDesiredPosition) {
domino5740 1:be03cac9fe74 39 eState = IN_PROGRESS;
domino5740 1:be03cac9fe74 40 }
domino5740 1:be03cac9fe74 41 else {}
domino5740 1:be03cac9fe74 42 break;
domino5740 1:be03cac9fe74 43 case CALLIB:
domino5740 1:be03cac9fe74 44 if(eReadDetector() == ACTIVE) {
domino5740 1:be03cac9fe74 45 eState = IDLE;
domino5740 1:be03cac9fe74 46 uiCurrentPosition = 0;
domino5740 1:be03cac9fe74 47 uiDesiredPosition = 0;
domino5740 1:be03cac9fe74 48 }
domino5740 1:be03cac9fe74 49 else {
domino5740 1:be03cac9fe74 50 LedStepLeft();
domino5740 1:be03cac9fe74 51 }
domino5740 1:be03cac9fe74 52 break;
domino5740 1:be03cac9fe74 53 }
domino5740 1:be03cac9fe74 54 }
domino5740 1:be03cac9fe74 55
domino5740 1:be03cac9fe74 56 enum DetectorState eReadDetector() {
domino5740 1:be03cac9fe74 57 if ((IO0PIN & DETECTOR_bm) == 0) {
domino5740 1:be03cac9fe74 58 return ACTIVE;
domino5740 1:be03cac9fe74 59 }
domino5740 1:be03cac9fe74 60 else {
domino5740 1:be03cac9fe74 61 return INACTIVE;
domino5740 1:be03cac9fe74 62 }
domino5740 1:be03cac9fe74 63 }