Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
servo.cpp@1:be03cac9fe74, 2020-06-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |