ECEM119 assignment 2 problem 4

Committer:
natasha41575
Date:
Fri Apr 19 20:03:25 2019 +0000
Revision:
1:eee108fd0b4b
Parent:
0:44f80f935e35
uploading to private repo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
natasha41575 0:44f80f935e35 1 /* mbed Microcontroller Library
natasha41575 0:44f80f935e35 2 * Copyright (c) 2018 ARM Limited
natasha41575 0:44f80f935e35 3 * SPDX-License-Identifier: Apache-2.0
natasha41575 0:44f80f935e35 4 */
natasha41575 0:44f80f935e35 5
natasha41575 0:44f80f935e35 6 #include "mbed.h"
natasha41575 0:44f80f935e35 7 #include "stats_report.h"
natasha41575 1:eee108fd0b4b 8 #include <stdio.h>
natasha41575 1:eee108fd0b4b 9 #include <string.h>
natasha41575 1:eee108fd0b4b 10 #include <stdlib.h>
natasha41575 1:eee108fd0b4b 11
natasha41575 1:eee108fd0b4b 12 DigitalOut output(PTA10);
natasha41575 0:44f80f935e35 13 DigitalIn input(PTD9);
natasha41575 0:44f80f935e35 14 Timer timer1;
natasha41575 0:44f80f935e35 15 Timer timer2;
natasha41575 1:eee108fd0b4b 16 Timer timer_pwm;
natasha41575 0:44f80f935e35 17
natasha41575 0:44f80f935e35 18 Serial pc(USBTX, USBRX); //create a Serial object
natasha41575 0:44f80f935e35 19
natasha41575 0:44f80f935e35 20 int main() {
natasha41575 1:eee108fd0b4b 21 pc.baud(115200);
natasha41575 1:eee108fd0b4b 22 int period = 50000;
natasha41575 1:eee108fd0b4b 23 float duty_cycle = 0.5;
natasha41575 1:eee108fd0b4b 24
natasha41575 1:eee108fd0b4b 25 output.write(0);
natasha41575 1:eee108fd0b4b 26
natasha41575 0:44f80f935e35 27 timer1.start();
natasha41575 0:44f80f935e35 28 timer2.start();
natasha41575 1:eee108fd0b4b 29 timer_pwm.start();
natasha41575 0:44f80f935e35 30
natasha41575 0:44f80f935e35 31 int prev = 0;
natasha41575 0:44f80f935e35 32 int count = 0;
natasha41575 0:44f80f935e35 33 int t = 0;
natasha41575 0:44f80f935e35 34 float d = 0;
natasha41575 0:44f80f935e35 35 int time_on = 0;
natasha41575 0:44f80f935e35 36
natasha41575 0:44f80f935e35 37 while(1) {
natasha41575 1:eee108fd0b4b 38 //pc.printf("beginning of loop\n");
natasha41575 1:eee108fd0b4b 39 int time_on_output = duty_cycle * period;
natasha41575 1:eee108fd0b4b 40 int curr_time = timer_pwm.read_us();
natasha41575 1:eee108fd0b4b 41 //pc.printf("%i %i\n", time_on, curr_time);
natasha41575 1:eee108fd0b4b 42 if (curr_time > period) {
natasha41575 1:eee108fd0b4b 43 output.write(1);
natasha41575 1:eee108fd0b4b 44 timer_pwm.reset();
natasha41575 1:eee108fd0b4b 45 //pc.printf("outputting 1\n");
natasha41575 1:eee108fd0b4b 46 } else if (curr_time > time_on_output) {
natasha41575 1:eee108fd0b4b 47 output.write(0);
natasha41575 1:eee108fd0b4b 48 //pc.printf("outputting 0\n");
natasha41575 1:eee108fd0b4b 49 }
natasha41575 1:eee108fd0b4b 50
natasha41575 1:eee108fd0b4b 51 char buffer1[20];
natasha41575 1:eee108fd0b4b 52 char buffer2[20];
natasha41575 1:eee108fd0b4b 53 if (pc.readable()) {
natasha41575 1:eee108fd0b4b 54 memset(buffer1, 0, 20*sizeof(char));
natasha41575 1:eee108fd0b4b 55 memset(buffer2, 0, 20*sizeof(char));
natasha41575 1:eee108fd0b4b 56 pc.scanf("%s", &buffer1);
natasha41575 1:eee108fd0b4b 57 pc.scanf("%s", &buffer2);
natasha41575 1:eee108fd0b4b 58
natasha41575 1:eee108fd0b4b 59 // pc.printf("%s ", buffer1);
natasha41575 1:eee108fd0b4b 60 // pc.printf("%s\n", buffer2);
natasha41575 1:eee108fd0b4b 61
natasha41575 1:eee108fd0b4b 62 int input_per_i = atoi(buffer1);
natasha41575 1:eee108fd0b4b 63 float input_duty_f = atof(buffer2);
natasha41575 1:eee108fd0b4b 64
natasha41575 1:eee108fd0b4b 65 // pc.printf("%i ", input_per_i);
natasha41575 1:eee108fd0b4b 66 // pc.printf("%f ", input_duty_f);
natasha41575 1:eee108fd0b4b 67
natasha41575 1:eee108fd0b4b 68 if (input_per_i < 1000 || input_per_i > 60000 || input_duty_f < 0 || input_duty_f > 1) {
natasha41575 1:eee108fd0b4b 69 pc.printf("mbed> ERROR\n");
natasha41575 1:eee108fd0b4b 70 } else {
natasha41575 1:eee108fd0b4b 71 period = input_per_i;
natasha41575 1:eee108fd0b4b 72 duty_cycle = input_duty_f;
natasha41575 1:eee108fd0b4b 73 // output.period_us(atoi(input_per));
natasha41575 1:eee108fd0b4b 74 // output.write(atof(input_duty));
natasha41575 1:eee108fd0b4b 75 }
natasha41575 1:eee108fd0b4b 76 }
natasha41575 1:eee108fd0b4b 77
natasha41575 0:44f80f935e35 78 int curr = input.read();
natasha41575 0:44f80f935e35 79 if (curr) {
natasha41575 0:44f80f935e35 80 if (prev == 0) {
natasha41575 0:44f80f935e35 81 timer2.reset();
natasha41575 0:44f80f935e35 82 if (count == 0) {
natasha41575 0:44f80f935e35 83 t = timer1.read_us();
natasha41575 0:44f80f935e35 84 d = float(time_on) / t;
natasha41575 1:eee108fd0b4b 85 pc.printf("mbed> %i, %.3f\n", t, d);
natasha41575 0:44f80f935e35 86 }
natasha41575 0:44f80f935e35 87 count = (count + 1) % 10;
natasha41575 0:44f80f935e35 88 timer1.reset();
natasha41575 0:44f80f935e35 89 }
natasha41575 0:44f80f935e35 90 prev = 1;
natasha41575 0:44f80f935e35 91 } else {
natasha41575 0:44f80f935e35 92 if (prev == 1) {
natasha41575 0:44f80f935e35 93 time_on = timer2.read_us();
natasha41575 0:44f80f935e35 94 }
natasha41575 0:44f80f935e35 95 prev = 0;
natasha41575 0:44f80f935e35 96 }
natasha41575 0:44f80f935e35 97 }
natasha41575 0:44f80f935e35 98 }