Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:6d9c7e98dab0, 2022-11-16 (annotated)
- Committer:
- michael_antonucci
- Date:
- Wed Nov 16 04:52:35 2022 +0000
- Revision:
- 0:6d9c7e98dab0
Working servo code. Has a bug where the button needs to be pressed twice at first. Not sure how to resolve
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| michael_antonucci | 0:6d9c7e98dab0 | 1 | //Assignment 5 Exercise 2 |
| michael_antonucci | 0:6d9c7e98dab0 | 2 | //Author: Michael Antonucci |
| michael_antonucci | 0:6d9c7e98dab0 | 3 | //Last Modified: 11/15/2022 |
| michael_antonucci | 0:6d9c7e98dab0 | 4 | |
| michael_antonucci | 0:6d9c7e98dab0 | 5 | #include "mbed.h" |
| michael_antonucci | 0:6d9c7e98dab0 | 6 | |
| michael_antonucci | 0:6d9c7e98dab0 | 7 | DigitalOut myled(LED1); //Specify inputs and variables |
| michael_antonucci | 0:6d9c7e98dab0 | 8 | DigitalIn button(p17); |
| michael_antonucci | 0:6d9c7e98dab0 | 9 | Serial pc(USBTX,USBRX); |
| michael_antonucci | 0:6d9c7e98dab0 | 10 | PwmOut servo(p21); |
| michael_antonucci | 0:6d9c7e98dab0 | 11 | Timer timePressed; |
| michael_antonucci | 0:6d9c7e98dab0 | 12 | |
| michael_antonucci | 0:6d9c7e98dab0 | 13 | |
| michael_antonucci | 0:6d9c7e98dab0 | 14 | void servo_angle(float angle) //declare the angle function |
| michael_antonucci | 0:6d9c7e98dab0 | 15 | { |
| michael_antonucci | 0:6d9c7e98dab0 | 16 | float pulseCoeff = 10.0; |
| michael_antonucci | 0:6d9c7e98dab0 | 17 | float pulseOffset = 400; |
| michael_antonucci | 0:6d9c7e98dab0 | 18 | float pulseWidth; |
| michael_antonucci | 0:6d9c7e98dab0 | 19 | |
| michael_antonucci | 0:6d9c7e98dab0 | 20 | //Make sure angles are within bounds |
| michael_antonucci | 0:6d9c7e98dab0 | 21 | if (angle < 0) { |
| michael_antonucci | 0:6d9c7e98dab0 | 22 | angle = 0; |
| michael_antonucci | 0:6d9c7e98dab0 | 23 | } else if (angle > 180) { |
| michael_antonucci | 0:6d9c7e98dab0 | 24 | angle = 180.0; |
| michael_antonucci | 0:6d9c7e98dab0 | 25 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 26 | |
| michael_antonucci | 0:6d9c7e98dab0 | 27 | //Calculate the pulsewidth for the desired angle and issue command: |
| michael_antonucci | 0:6d9c7e98dab0 | 28 | pulseWidth = pulseCoeff * angle + pulseOffset; |
| michael_antonucci | 0:6d9c7e98dab0 | 29 | servo.pulsewidth(pulseWidth/1000000.000); |
| michael_antonucci | 0:6d9c7e98dab0 | 30 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 31 | |
| michael_antonucci | 0:6d9c7e98dab0 | 32 | int main() |
| michael_antonucci | 0:6d9c7e98dab0 | 33 | { |
| michael_antonucci | 0:6d9c7e98dab0 | 34 | wait(3); |
| michael_antonucci | 0:6d9c7e98dab0 | 35 | float angle; //store angle data |
| michael_antonucci | 0:6d9c7e98dab0 | 36 | angle = 0; //set to zero |
| michael_antonucci | 0:6d9c7e98dab0 | 37 | servo_angle(angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 38 | pc.printf("The servo angle is: %5.2f\r\n",angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 39 | while(1) { |
| michael_antonucci | 0:6d9c7e98dab0 | 40 | |
| michael_antonucci | 0:6d9c7e98dab0 | 41 | while(button.read()==0) { //while button is not pressed |
| michael_antonucci | 0:6d9c7e98dab0 | 42 | wait(0.1); |
| michael_antonucci | 0:6d9c7e98dab0 | 43 | if (button.read()==1) { //if pressed |
| michael_antonucci | 0:6d9c7e98dab0 | 44 | angle=angle+30; |
| michael_antonucci | 0:6d9c7e98dab0 | 45 | servo_angle(angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 46 | timePressed.start(); //Start button timer |
| michael_antonucci | 0:6d9c7e98dab0 | 47 | pc.printf("The servo angle is: %5.2f\r\n",angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 48 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 49 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 50 | while(button.read()==1) { //while button is pressed |
| michael_antonucci | 0:6d9c7e98dab0 | 51 | wait(0.1); |
| michael_antonucci | 0:6d9c7e98dab0 | 52 | if (button.read()==0) { //if released |
| michael_antonucci | 0:6d9c7e98dab0 | 53 | timePressed.stop(); //Stop button timer |
| michael_antonucci | 0:6d9c7e98dab0 | 54 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 55 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 56 | if (angle >= 180) { //Reset Servo if angle is greater than 180 |
| michael_antonucci | 0:6d9c7e98dab0 | 57 | angle = 0; |
| michael_antonucci | 0:6d9c7e98dab0 | 58 | servo_angle(angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 59 | pc.printf("The servo angle is: %5.2f\r\n",angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 60 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 61 | if (timePressed.read_ms()>= 3000) { //Reset servo if timer is greater than 3 seconds |
| michael_antonucci | 0:6d9c7e98dab0 | 62 | angle = 0; |
| michael_antonucci | 0:6d9c7e98dab0 | 63 | servo_angle(angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 64 | pc.printf("The servo angle is: %5.2f\r\n",angle); |
| michael_antonucci | 0:6d9c7e98dab0 | 65 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 66 | timePressed.reset(); //Reset button timer |
| michael_antonucci | 0:6d9c7e98dab0 | 67 | |
| michael_antonucci | 0:6d9c7e98dab0 | 68 | } |
| michael_antonucci | 0:6d9c7e98dab0 | 69 | } |
