Simone Palombi / Mbed 2 deprecated Nucleo_pwm

Dependencies:   mbed

Committer:
misterciak
Date:
Sun Nov 15 11:28:47 2015 +0000
Revision:
0:6622ba57fee8
pwm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
misterciak 0:6622ba57fee8 1 #include "mbed.h"
misterciak 0:6622ba57fee8 2
misterciak 0:6622ba57fee8 3 Timeout timer;
misterciak 0:6622ba57fee8 4
misterciak 0:6622ba57fee8 5 typedef enum{
misterciak 0:6622ba57fee8 6 DO,
misterciak 0:6622ba57fee8 7 RE,
misterciak 0:6622ba57fee8 8 MI,
misterciak 0:6622ba57fee8 9 FA,
misterciak 0:6622ba57fee8 10 SOL,
misterciak 0:6622ba57fee8 11 LA,
misterciak 0:6622ba57fee8 12 SI,
misterciak 0:6622ba57fee8 13 DO1,
misterciak 0:6622ba57fee8 14 }Nota;
misterciak 0:6622ba57fee8 15
misterciak 0:6622ba57fee8 16 Nota selected_nota = DO1;
misterciak 0:6622ba57fee8 17
misterciak 0:6622ba57fee8 18 DigitalOut pwm_green(D8); // IO used by pwm_io function
misterciak 0:6622ba57fee8 19 DigitalOut pwm_red(D7);
misterciak 0:6622ba57fee8 20 DigitalOut pwm_blue(D2);
misterciak 0:6622ba57fee8 21
misterciak 0:6622ba57fee8 22 int on_delay = 0;
misterciak 0:6622ba57fee8 23 int off_delay = 0;
misterciak 0:6622ba57fee8 24
misterciak 0:6622ba57fee8 25 void toggleOff_green();
misterciak 0:6622ba57fee8 26 void toggleOff_blue();
misterciak 0:6622ba57fee8 27 void toggleOff_red();
misterciak 0:6622ba57fee8 28
misterciak 0:6622ba57fee8 29 void toggleOn_green() {
misterciak 0:6622ba57fee8 30 pwm_green = 1;
misterciak 0:6622ba57fee8 31 timer.attach_us(toggleOff_green, on_delay);
misterciak 0:6622ba57fee8 32 }
misterciak 0:6622ba57fee8 33
misterciak 0:6622ba57fee8 34 void toggleOn_red() {
misterciak 0:6622ba57fee8 35 pwm_red = 1;
misterciak 0:6622ba57fee8 36 timer.attach_us(toggleOff_red, on_delay);
misterciak 0:6622ba57fee8 37 }
misterciak 0:6622ba57fee8 38
misterciak 0:6622ba57fee8 39 void toggleOn_blue() {
misterciak 0:6622ba57fee8 40 pwm_blue = 1;
misterciak 0:6622ba57fee8 41 timer.attach_us(toggleOff_blue, on_delay);
misterciak 0:6622ba57fee8 42 }
misterciak 0:6622ba57fee8 43
misterciak 0:6622ba57fee8 44 void toggleOff_green() {
misterciak 0:6622ba57fee8 45 pwm_green = 0;
misterciak 0:6622ba57fee8 46 timer.attach_us(toggleOn_green, off_delay);
misterciak 0:6622ba57fee8 47 }
misterciak 0:6622ba57fee8 48
misterciak 0:6622ba57fee8 49 void toggleOff_red() {
misterciak 0:6622ba57fee8 50 pwm_red = 0;
misterciak 0:6622ba57fee8 51 timer.attach_us(toggleOn_red, off_delay);
misterciak 0:6622ba57fee8 52 }
misterciak 0:6622ba57fee8 53
misterciak 0:6622ba57fee8 54 void toggleOff_blue() {
misterciak 0:6622ba57fee8 55 pwm_blue = 0;
misterciak 0:6622ba57fee8 56 timer.attach_us(toggleOn_blue, off_delay);
misterciak 0:6622ba57fee8 57 }
misterciak 0:6622ba57fee8 58
misterciak 0:6622ba57fee8 59 // p_us = signal period in micro_seconds
misterciak 0:6622ba57fee8 60 // dc = signal duty-cycle (0.0 to 1.0)
misterciak 0:6622ba57fee8 61 void pwm_io_green(int p_us, float dc) {
misterciak 0:6622ba57fee8 62 timer.detach();
misterciak 0:6622ba57fee8 63 if ((p_us == 0) || (dc == 0)) {
misterciak 0:6622ba57fee8 64 pwm_green = 0;
misterciak 0:6622ba57fee8 65 return;
misterciak 0:6622ba57fee8 66 }
misterciak 0:6622ba57fee8 67 if (dc >= 1) {
misterciak 0:6622ba57fee8 68 pwm_green = 1;
misterciak 0:6622ba57fee8 69 return;
misterciak 0:6622ba57fee8 70 }
misterciak 0:6622ba57fee8 71 on_delay = (int)(p_us * dc);
misterciak 0:6622ba57fee8 72 off_delay = p_us - on_delay;
misterciak 0:6622ba57fee8 73 toggleOn_green();
misterciak 0:6622ba57fee8 74 }
misterciak 0:6622ba57fee8 75
misterciak 0:6622ba57fee8 76 void pwm_io_red(int p_us, float dc) {
misterciak 0:6622ba57fee8 77 timer.detach();
misterciak 0:6622ba57fee8 78 if ((p_us == 0) || (dc == 0)) {
misterciak 0:6622ba57fee8 79 pwm_red = 0;
misterciak 0:6622ba57fee8 80 return;
misterciak 0:6622ba57fee8 81 }
misterciak 0:6622ba57fee8 82 if (dc >= 1) {
misterciak 0:6622ba57fee8 83 pwm_red = 1;
misterciak 0:6622ba57fee8 84 return;
misterciak 0:6622ba57fee8 85 }
misterciak 0:6622ba57fee8 86 on_delay = (int)(p_us * dc);
misterciak 0:6622ba57fee8 87 off_delay = p_us - on_delay;
misterciak 0:6622ba57fee8 88 toggleOn_red();
misterciak 0:6622ba57fee8 89 }
misterciak 0:6622ba57fee8 90
misterciak 0:6622ba57fee8 91 void pwm_io_blue(int p_us, float dc) {
misterciak 0:6622ba57fee8 92 timer.detach();
misterciak 0:6622ba57fee8 93 if ((p_us == 0) || (dc == 0)) {
misterciak 0:6622ba57fee8 94 pwm_blue = 0;
misterciak 0:6622ba57fee8 95 return;
misterciak 0:6622ba57fee8 96 }
misterciak 0:6622ba57fee8 97 if (dc >= 1) {
misterciak 0:6622ba57fee8 98 pwm_blue = 1;
misterciak 0:6622ba57fee8 99 return;
misterciak 0:6622ba57fee8 100 }
misterciak 0:6622ba57fee8 101 on_delay = (int)(p_us * dc);
misterciak 0:6622ba57fee8 102 off_delay = p_us - on_delay;
misterciak 0:6622ba57fee8 103 toggleOn_blue();
misterciak 0:6622ba57fee8 104 }
misterciak 0:6622ba57fee8 105
misterciak 0:6622ba57fee8 106 int main() {
misterciak 0:6622ba57fee8 107
misterciak 0:6622ba57fee8 108 pwm_io_green(20, 0.50); // 20ms - 25%
misterciak 0:6622ba57fee8 109 pwm_io_blue(20, 0.50);
misterciak 0:6622ba57fee8 110 pwm_io_red(20, 0.50);
misterciak 0:6622ba57fee8 111
misterciak 0:6622ba57fee8 112 while(1) {
misterciak 0:6622ba57fee8 113 switch (selected_nota){
misterciak 0:6622ba57fee8 114 case DO: pwm_io_red(20, 1.00);
misterciak 0:6622ba57fee8 115 pwm_io_green(20, 0.00); // 20ms - 25%
misterciak 0:6622ba57fee8 116 pwm_io_blue(20, 0.00);
misterciak 0:6622ba57fee8 117
misterciak 0:6622ba57fee8 118 break;
misterciak 0:6622ba57fee8 119 case RE: pwm_io_red(20, 1.00);
misterciak 0:6622ba57fee8 120 pwm_io_green(20, 0.60); // 20ms - 25%
misterciak 0:6622ba57fee8 121 pwm_io_blue(20, 0.00);
misterciak 0:6622ba57fee8 122 break;
misterciak 0:6622ba57fee8 123 case MI: pwm_io_red(20, 1.00);
misterciak 0:6622ba57fee8 124 pwm_io_green(20, 1.00); // 20ms - 25%
misterciak 0:6622ba57fee8 125 pwm_io_blue(20, 0.00);
misterciak 0:6622ba57fee8 126 break;
misterciak 0:6622ba57fee8 127 case FA: pwm_io_red(20, 0.00);
misterciak 0:6622ba57fee8 128 pwm_io_green(20, 1.00); // 20ms - 25%
misterciak 0:6622ba57fee8 129 pwm_io_blue(20, 0.00);
misterciak 0:6622ba57fee8 130 break;
misterciak 0:6622ba57fee8 131 case SOL: pwm_io_red(20, 0.00);
misterciak 0:6622ba57fee8 132 pwm_io_green(20, 0.00); // 20ms - 25%
misterciak 0:6622ba57fee8 133 pwm_io_blue(20, 1.00);
misterciak 0:6622ba57fee8 134 break;
misterciak 0:6622ba57fee8 135 case LA: pwm_io_red(20, 0.20);
misterciak 0:6622ba57fee8 136 pwm_io_green(20, 0.00); // 20ms - 25%
misterciak 0:6622ba57fee8 137 pwm_io_blue(20, 0.60);
misterciak 0:6622ba57fee8 138 break;
misterciak 0:6622ba57fee8 139 case SI: pwm_io_red(20, 1.00);
misterciak 0:6622ba57fee8 140 pwm_io_green(20, 0.00); // 20ms - 25%
misterciak 0:6622ba57fee8 141 pwm_io_blue(20, 1.00);
misterciak 0:6622ba57fee8 142 break;
misterciak 0:6622ba57fee8 143 case DO1: pwm_io_red(20, 1.00);
misterciak 0:6622ba57fee8 144 pwm_io_green(20, 1.00); // 20ms - 25%
misterciak 0:6622ba57fee8 145 pwm_io_blue(20, 1.00);
misterciak 0:6622ba57fee8 146 break;
misterciak 0:6622ba57fee8 147
misterciak 0:6622ba57fee8 148 }
misterciak 0:6622ba57fee8 149 }
misterciak 0:6622ba57fee8 150 }
misterciak 0:6622ba57fee8 151