![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ECEM119 assignment 2 problem 4
main.cpp
- Committer:
- natasha41575
- Date:
- 2019-04-19
- Revision:
- 1:eee108fd0b4b
- Parent:
- 0:44f80f935e35
File content as of revision 1:eee108fd0b4b:
/* mbed Microcontroller Library * Copyright (c) 2018 ARM Limited * SPDX-License-Identifier: Apache-2.0 */ #include "mbed.h" #include "stats_report.h" #include <stdio.h> #include <string.h> #include <stdlib.h> DigitalOut output(PTA10); DigitalIn input(PTD9); Timer timer1; Timer timer2; Timer timer_pwm; Serial pc(USBTX, USBRX); //create a Serial object int main() { pc.baud(115200); int period = 50000; float duty_cycle = 0.5; output.write(0); timer1.start(); timer2.start(); timer_pwm.start(); int prev = 0; int count = 0; int t = 0; float d = 0; int time_on = 0; while(1) { //pc.printf("beginning of loop\n"); int time_on_output = duty_cycle * period; int curr_time = timer_pwm.read_us(); //pc.printf("%i %i\n", time_on, curr_time); if (curr_time > period) { output.write(1); timer_pwm.reset(); //pc.printf("outputting 1\n"); } else if (curr_time > time_on_output) { output.write(0); //pc.printf("outputting 0\n"); } char buffer1[20]; char buffer2[20]; if (pc.readable()) { memset(buffer1, 0, 20*sizeof(char)); memset(buffer2, 0, 20*sizeof(char)); pc.scanf("%s", &buffer1); pc.scanf("%s", &buffer2); // pc.printf("%s ", buffer1); // pc.printf("%s\n", buffer2); int input_per_i = atoi(buffer1); float input_duty_f = atof(buffer2); // pc.printf("%i ", input_per_i); // pc.printf("%f ", input_duty_f); if (input_per_i < 1000 || input_per_i > 60000 || input_duty_f < 0 || input_duty_f > 1) { pc.printf("mbed> ERROR\n"); } else { period = input_per_i; duty_cycle = input_duty_f; // output.period_us(atoi(input_per)); // output.write(atof(input_duty)); } } int curr = input.read(); if (curr) { if (prev == 0) { timer2.reset(); if (count == 0) { t = timer1.read_us(); d = float(time_on) / t; pc.printf("mbed> %i, %.3f\n", t, d); } count = (count + 1) % 10; timer1.reset(); } prev = 1; } else { if (prev == 1) { time_on = timer2.read_us(); } prev = 0; } } }