![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ECEM119 assignment 2 problem 4
main.cpp@1:eee108fd0b4b, 2019-04-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |