Esercitazione5_9

Dependencies:   mbed

Committer:
MDevolution
Date:
Mon Oct 31 11:14:36 2016 +0000
Revision:
0:f7509ce18bc8
Esercitazione5_9

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MDevolution 0:f7509ce18bc8 1 /*Program Example 9: Metronome. Uses Ticker to set beat rate
MDevolution 0:f7509ce18bc8 2 */
MDevolution 0:f7509ce18bc8 3 #include "mbed.h"
MDevolution 0:f7509ce18bc8 4 #include <stdio.h>
MDevolution 0:f7509ce18bc8 5 Serial pc(USBTX, USBRX);
MDevolution 0:f7509ce18bc8 6 DigitalIn button(USER_BUTTON);
MDevolution 0:f7509ce18bc8 7 DigitalIn dir(D4,PullDown);
MDevolution 0:f7509ce18bc8 8 DigitalOut redled(D8); //displays the metronome beat
MDevolution 0:f7509ce18bc8 9 Ticker beat_rate; //define a Ticker, with name “beat_rate”
MDevolution 0:f7509ce18bc8 10 void beat(void);
MDevolution 0:f7509ce18bc8 11 float period (0.5); //metronome period in seconds, initial value 0.5
MDevolution 0:f7509ce18bc8 12 int rate (120); //metronome rate, initial value 120
MDevolution 0:f7509ce18bc8 13
MDevolution 0:f7509ce18bc8 14 int main(){
MDevolution 0:f7509ce18bc8 15 pc.printf("\r\n");
MDevolution 0:f7509ce18bc8 16 pc.printf("mbed metronome!\r\n");
MDevolution 0:f7509ce18bc8 17 pc.printf("_______________\r\n");
MDevolution 0:f7509ce18bc8 18 period = 1;
MDevolution 0:f7509ce18bc8 19 redled = 1; //diagnostic
MDevolution 0:f7509ce18bc8 20 wait(.1);
MDevolution 0:f7509ce18bc8 21 redled = 0;
MDevolution 0:f7509ce18bc8 22
MDevolution 0:f7509ce18bc8 23 beat_rate.attach(&beat, period); //initializes the beat rate
MDevolution 0:f7509ce18bc8 24 //main loop checks buttons, updates rates and displays
MDevolution 0:f7509ce18bc8 25 while(1) {
MDevolution 0:f7509ce18bc8 26 if (button ==0) {
MDevolution 0:f7509ce18bc8 27 if (dir)
MDevolution 0:f7509ce18bc8 28 //increase rate by 4
MDevolution 0:f7509ce18bc8 29 rate = rate + 4;
MDevolution 0:f7509ce18bc8 30 else
MDevolution 0:f7509ce18bc8 31 //decrease rate by 4
MDevolution 0:f7509ce18bc8 32 rate = rate - 4;
MDevolution 0:f7509ce18bc8 33 }
MDevolution 0:f7509ce18bc8 34 if (rate > 208) //limit the maximum beat rate to 208
MDevolution 0:f7509ce18bc8 35 rate = 208;
MDevolution 0:f7509ce18bc8 36 if (rate < 40) //limit the minimum beat rate to 40
MDevolution 0:f7509ce18bc8 37 rate = 40;
MDevolution 0:f7509ce18bc8 38
MDevolution 0:f7509ce18bc8 39 period = 60/rate; //calculate the beat period
MDevolution 0:f7509ce18bc8 40 pc.printf("metronome rate is %i\r", rate);
MDevolution 0:f7509ce18bc8 41 //pc.printf("metronome period is %f\r\n", period); //optional check
MDevolution 0:f7509ce18bc8 42 wait (0.5);
MDevolution 0:f7509ce18bc8 43 }
MDevolution 0:f7509ce18bc8 44 }
MDevolution 0:f7509ce18bc8 45
MDevolution 0:f7509ce18bc8 46 void beat() //this is the metronome beat
MDevolution 0:f7509ce18bc8 47 {
MDevolution 0:f7509ce18bc8 48 beat_rate.attach(&beat, period); //update beat rate at this moment
MDevolution 0:f7509ce18bc8 49 redled = 1;
MDevolution 0:f7509ce18bc8 50 wait(.1);
MDevolution 0:f7509ce18bc8 51 redled = 0;
MDevolution 0:f7509ce18bc8 52 }