Mark Schwarzer / Mbed 2 deprecated Schwarzer_A6_2

Dependencies:   mbed

Committer:
markschwarzer
Date:
Tue Nov 03 21:15:25 2020 +0000
Revision:
0:cad1a4329bd8
final, compiles

Who changed what in which revision?

UserRevisionLine numberNew 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); }}