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:cad1a4329bd8, 2020-11-03 (annotated)
- Committer:
- markschwarzer
- Date:
- Tue Nov 03 21:15:25 2020 +0000
- Revision:
- 0:cad1a4329bd8
final, compiles
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| markschwarzer | 0:cad1a4329bd8 | 1 | //Mark Schwarzer Assignment 6 Part 2 |
| markschwarzer | 0:cad1a4329bd8 | 2 | #include "mbed.h" |
| markschwarzer | 0:cad1a4329bd8 | 3 | |
| markschwarzer | 0:cad1a4329bd8 | 4 | PwmOut servo(p19); |
| markschwarzer | 0:cad1a4329bd8 | 5 | AnalogIn Pcell(p20); |
| markschwarzer | 0:cad1a4329bd8 | 6 | DigitalIn switch_input(p17); |
| markschwarzer | 0:cad1a4329bd8 | 7 | Serial pc(USBTX,USBRX); |
| markschwarzer | 0:cad1a4329bd8 | 8 | float V; //voltage |
| markschwarzer | 0:cad1a4329bd8 | 9 | float angle; |
| markschwarzer | 0:cad1a4329bd8 | 10 | |
| markschwarzer | 0:cad1a4329bd8 | 11 | //Run through a range of pulse widths, report to serial output: |
| markschwarzer | 0:cad1a4329bd8 | 12 | void servo_test(float period, float minPulse, float maxPulse, float pulseStep) |
| markschwarzer | 0:cad1a4329bd8 | 13 | { |
| markschwarzer | 0:cad1a4329bd8 | 14 | float currentPulse; |
| markschwarzer | 0:cad1a4329bd8 | 15 | servo.period(period); //set the PWM period |
| markschwarzer | 0:cad1a4329bd8 | 16 | |
| markschwarzer | 0:cad1a4329bd8 | 17 | //Vary the pulse width from minimum to maximum in steps. |
| markschwarzer | 0:cad1a4329bd8 | 18 | pc.printf("Commencing Servo Test\r\n"); |
| markschwarzer | 0:cad1a4329bd8 | 19 | for (currentPulse=minPulse; currentPulse<maxPulse; currentPulse=currentPulse+pulseStep) { |
| markschwarzer | 0:cad1a4329bd8 | 20 | servo.pulsewidth(currentPulse/1000000.000); //convert uSec to sec. |
| markschwarzer | 0:cad1a4329bd8 | 21 | pc.printf("Current pulse width is %f\r\n",currentPulse); |
| markschwarzer | 0:cad1a4329bd8 | 22 | wait(0.5); |
| markschwarzer | 0:cad1a4329bd8 | 23 | } |
| markschwarzer | 0:cad1a4329bd8 | 24 | pc.printf("Servo Test Finished\r\n"); |
| markschwarzer | 0:cad1a4329bd8 | 25 | } |
| markschwarzer | 0:cad1a4329bd8 | 26 | |
| markschwarzer | 0:cad1a4329bd8 | 27 | |
| markschwarzer | 0:cad1a4329bd8 | 28 | //Sends correct pulse width to servo to achieve desired angle: |
| markschwarzer | 0:cad1a4329bd8 | 29 | void servo_set_angle(float angle) |
| markschwarzer | 0:cad1a4329bd8 | 30 | { |
| markschwarzer | 0:cad1a4329bd8 | 31 | float pulseCoeff = 10.0; |
| markschwarzer | 0:cad1a4329bd8 | 32 | float pulseOffset = 400; |
| markschwarzer | 0:cad1a4329bd8 | 33 | float pulseWidth; |
| markschwarzer | 0:cad1a4329bd8 | 34 | |
| markschwarzer | 0:cad1a4329bd8 | 35 | //Check to make sure commanded angle is within min-max bounds: |
| markschwarzer | 0:cad1a4329bd8 | 36 | if (angle < 0) { |
| markschwarzer | 0:cad1a4329bd8 | 37 | angle = 0; |
| markschwarzer | 0:cad1a4329bd8 | 38 | } else if (angle > 180) { |
| markschwarzer | 0:cad1a4329bd8 | 39 | angle = 180.0; |
| markschwarzer | 0:cad1a4329bd8 | 40 | } |
| markschwarzer | 0:cad1a4329bd8 | 41 | |
| markschwarzer | 0:cad1a4329bd8 | 42 | //Calculate pulsewidth for the desired angle and issue command: |
| markschwarzer | 0:cad1a4329bd8 | 43 | pulseWidth = pulseCoeff * angle + pulseOffset; |
| markschwarzer | 0:cad1a4329bd8 | 44 | servo.pulsewidth(pulseWidth/1000000.000); |
| markschwarzer | 0:cad1a4329bd8 | 45 | } |
| markschwarzer | 0:cad1a4329bd8 | 46 | |
| markschwarzer | 0:cad1a4329bd8 | 47 | int main() |
| markschwarzer | 0:cad1a4329bd8 | 48 | { |
| markschwarzer | 0:cad1a4329bd8 | 49 | V=(3.3); |
| markschwarzer | 0:cad1a4329bd8 | 50 | wait(3); |
| markschwarzer | 0:cad1a4329bd8 | 51 | servo.period(0.01); |
| markschwarzer | 0:cad1a4329bd8 | 52 | float voltageLight; |
| markschwarzer | 0:cad1a4329bd8 | 53 | |
| markschwarzer | 0:cad1a4329bd8 | 54 | while(1) { |
| markschwarzer | 0:cad1a4329bd8 | 55 | voltageLight= Pcell.read()*V; |
| markschwarzer | 0:cad1a4329bd8 | 56 | angle=(180*V); |
| markschwarzer | 0:cad1a4329bd8 | 57 | pc.printf("Servo Angle: %5.2f\r\n",angle); |
| markschwarzer | 0:cad1a4329bd8 | 58 | pc.printf("Voltage;%f",voltageLight); |
| markschwarzer | 0:cad1a4329bd8 | 59 | wait(1); }} |