PWM output with serial

Dependencies:   mbed

Committer:
dousape2
Date:
Mon Apr 20 22:22:37 2015 +0000
Revision:
0:9e52247c0dd2
Child:
1:dff553988426
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dousape2 0:9e52247c0dd2 1 /**********************************************************************************
dousape2 0:9e52247c0dd2 2 * @file main.cpp
dousape2 0:9e52247c0dd2 3 * @author Petr Dousa
dousape2 0:9e52247c0dd2 4 * @version V1.00
dousape2 0:9e52247c0dd2 5 * @date 30-March-2015
dousape2 0:9e52247c0dd2 6 * @brief Every 1 second blink LED and on PB_3 generate PWM
dousape2 0:9e52247c0dd2 7 * Serial speed is set to 115200.
dousape2 0:9e52247c0dd2 8 ***********************************************************************************/
dousape2 0:9e52247c0dd2 9
dousape2 0:9e52247c0dd2 10 /**********************************************************************************/
dousape2 0:9e52247c0dd2 11 /* Table of PWM pins on Nucleo F303 (LQFP64) */
dousape2 0:9e52247c0dd2 12 /**********************************************************************************/
dousape2 0:9e52247c0dd2 13 /* LQFP64 pin | Nucleo pin | ST Pin | PWM number | Channel */
dousape2 0:9e52247c0dd2 14 /* 15 | A1 | PA_1 | PWM15 | 1 */
dousape2 0:9e52247c0dd2 15 /* 26 | A3 | PB_0 | PWM1 | 2 */
dousape2 0:9e52247c0dd2 16 /* 9 | A4 | PC_1 | PWM1 | 2 */
dousape2 0:9e52247c0dd2 17 /* 8 | A5 | PC_0 | PWM1 | 1 */
dousape2 0:9e52247c0dd2 18 /* 17 | D0 | PA_3 | PWM15 | 2 */
dousape2 0:9e52247c0dd2 19 /* 16 | D1 | PA_2 | PWM15 | 1 */
dousape2 0:9e52247c0dd2 20 /* 43 | D2 | PA_10 | PWM1 | 3 */
dousape2 0:9e52247c0dd2 21 /* 55 | D3 | PB_3 | PWM8 | 1 */
dousape2 0:9e52247c0dd2 22 /* 57 | D4 | PB_5 | PWM17 | 1 */
dousape2 0:9e52247c0dd2 23 /* 56 | D5 | PB_4 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 24 /* 41 | D7 | PA_8 | PWM1 | 1 */
dousape2 0:9e52247c0dd2 25 /* 42 | D8 | PA_9 | PWM1 | 2 */
dousape2 0:9e52247c0dd2 26 /* 38 | D9 | PC_7 | PWM3 | 2 */
dousape2 0:9e52247c0dd2 27 /* 58 | D10 | PB_6 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 28 /* 23 | D11 | PA_7 | PWM15 | 2 */
dousape2 0:9e52247c0dd2 29 /* 22 | D12 | PA_6 | PWM15 | 1 */
dousape2 0:9e52247c0dd2 30 /* 62 | D14 | PB_9 | PWM17 | 1 */
dousape2 0:9e52247c0dd2 31 /* 61 | D15 | PB_8 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 32 /* 46 | | PA_13 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 33 /* 49 | | PA_14 | PWM8 | 2 */
dousape2 0:9e52247c0dd2 34 /* 59 | | PB_7 | PWM17 | 1 */
dousape2 0:9e52247c0dd2 35 /* 2 | | PC_13 | PWM1 | 1 */
dousape2 0:9e52247c0dd2 36 /* 10 | | PC_2 | PWM1 | 3 */
dousape2 0:9e52247c0dd2 37 /* 11 | | PC_3 | PWM1 | 4 */
dousape2 0:9e52247c0dd2 38 /* 40 | | PC_9 | PWM3 | 4 */
dousape2 0:9e52247c0dd2 39 /* 39 | | PC_8 | PWM3 | 3 */
dousape2 0:9e52247c0dd2 40 /* 37 | | PC_6 | PWM3 | 1 */
dousape2 0:9e52247c0dd2 41 /* 45 | | PA_12 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 42 /* 44 | | PA_11 | PWM1 | 4 */
dousape2 0:9e52247c0dd2 43 /* 27 | | PB_1 | PWM1 | 3 */
dousape2 0:9e52247c0dd2 44 /* 36 | | PB_15 | PWM17 | 1 */
dousape2 0:9e52247c0dd2 45 /* 35 | | PB_14 | PWM16 | 1 */
dousape2 0:9e52247c0dd2 46 /**********************************************************************************/
dousape2 0:9e52247c0dd2 47
dousape2 0:9e52247c0dd2 48 /* Includes ----------------------------------------------------------------------*/
dousape2 0:9e52247c0dd2 49 #include "mbed.h"
dousape2 0:9e52247c0dd2 50
dousape2 0:9e52247c0dd2 51 /* Defines -----------------------------------------------------------------------*/
dousape2 0:9e52247c0dd2 52 /* Function prototypes -----------------------------------------------------------*/
dousape2 0:9e52247c0dd2 53 /* Variables ---------------------------------------------------------------------*/
dousape2 0:9e52247c0dd2 54 //mbed - initialization of peripherals
dousape2 0:9e52247c0dd2 55 Serial pc(SERIAL_TX, SERIAL_RX);
dousape2 0:9e52247c0dd2 56 DigitalOut my_led(LED1); // blink LED
dousape2 0:9e52247c0dd2 57 PwmOut my_pwm(PB_3); // PWM output
dousape2 0:9e52247c0dd2 58 /* Functions----------------------------------------------------------------------*/
dousape2 0:9e52247c0dd2 59
dousape2 0:9e52247c0dd2 60
dousape2 0:9e52247c0dd2 61
dousape2 0:9e52247c0dd2 62 /***********************************************************************************
dousape2 0:9e52247c0dd2 63 * Function Name : flushSerialPort.
dousape2 0:9e52247c0dd2 64 * Description : Serial flush rountine.
dousape2 0:9e52247c0dd2 65 * Input : None.
dousape2 0:9e52247c0dd2 66 * Output : None.
dousape2 0:9e52247c0dd2 67 * Return : None.
dousape2 0:9e52247c0dd2 68 ***********************************************************************************/
dousape2 0:9e52247c0dd2 69 void flushSerialPort()
dousape2 0:9e52247c0dd2 70 {
dousape2 0:9e52247c0dd2 71 while(pc.readable())
dousape2 0:9e52247c0dd2 72 pc.getc();
dousape2 0:9e52247c0dd2 73 return;
dousape2 0:9e52247c0dd2 74 }
dousape2 0:9e52247c0dd2 75
dousape2 0:9e52247c0dd2 76 /***********************************************************************************
dousape2 0:9e52247c0dd2 77 * Function Name : menu.
dousape2 0:9e52247c0dd2 78 * Description : Print menu to serial.
dousape2 0:9e52247c0dd2 79 * Input : None.
dousape2 0:9e52247c0dd2 80 * Output : None.
dousape2 0:9e52247c0dd2 81 * Return : None.
dousape2 0:9e52247c0dd2 82 ***********************************************************************************/
dousape2 0:9e52247c0dd2 83 void menu()
dousape2 0:9e52247c0dd2 84 {
dousape2 0:9e52247c0dd2 85 while(!pc.writeable()); // wait to be serial available for sending data
dousape2 0:9e52247c0dd2 86 pc.printf("HELP - MENU\n");// send text to serial
dousape2 0:9e52247c0dd2 87 while(!pc.writeable());
dousape2 0:9e52247c0dd2 88 pc.printf("Set data exactly.\n");
dousape2 0:9e52247c0dd2 89 while(!pc.writeable());
dousape2 0:9e52247c0dd2 90 pc.printf("Write to console: \"xx yy\", where xx is a code of seting and yy his value.\n");
dousape2 0:9e52247c0dd2 91 while(!pc.writeable());
dousape2 0:9e52247c0dd2 92 pc.printf("01 yyy - set up duty-cycle from 0 to 100, example:01 80\n");
dousape2 0:9e52247c0dd2 93 while(!pc.writeable());
dousape2 0:9e52247c0dd2 94 pc.printf("02 yyyyy - set up period in ms from 0 to 10000 , example:02 10\n");
dousape2 0:9e52247c0dd2 95 while(!pc.writeable());
dousape2 0:9e52247c0dd2 96 pc.printf("end HELP\n");
dousape2 0:9e52247c0dd2 97 }
dousape2 0:9e52247c0dd2 98
dousape2 0:9e52247c0dd2 99 /***********************************************************************************
dousape2 0:9e52247c0dd2 100 * Function Name : main.
dousape2 0:9e52247c0dd2 101 * Description : Main rountine.
dousape2 0:9e52247c0dd2 102 * Input : None.
dousape2 0:9e52247c0dd2 103 * Output : None.
dousape2 0:9e52247c0dd2 104 * Return : None.
dousape2 0:9e52247c0dd2 105 ***********************************************************************************/
dousape2 0:9e52247c0dd2 106 int main()
dousape2 0:9e52247c0dd2 107 {
dousape2 0:9e52247c0dd2 108 int prijData=0;
dousape2 0:9e52247c0dd2 109 int Data1=0;
dousape2 0:9e52247c0dd2 110 int Data2=0;
dousape2 0:9e52247c0dd2 111
dousape2 0:9e52247c0dd2 112 pc.baud(115200);
dousape2 0:9e52247c0dd2 113 pc.printf("\nLogic sond.\n");
dousape2 0:9e52247c0dd2 114 menu(); //print menu
dousape2 0:9e52247c0dd2 115 // Set PWM
dousape2 0:9e52247c0dd2 116 my_pwm.period_ms(10);
dousape2 0:9e52247c0dd2 117 my_pwm.write(0.5);
dousape2 0:9e52247c0dd2 118
dousape2 0:9e52247c0dd2 119 while(1) {
dousape2 0:9e52247c0dd2 120 //accepted data from serial
dousape2 0:9e52247c0dd2 121 prijData=pc.scanf("%d",&Data1); // read number from serial
dousape2 0:9e52247c0dd2 122 if(prijData==1 && (Data1>=1 && Data1<=2)) { // test if number was read and it is between 1 and 2
dousape2 0:9e52247c0dd2 123 prijData=pc.scanf("%d",&Data2); // read int number from serial
dousape2 0:9e52247c0dd2 124 if(prijData==1 && Data2<=100 && Data2>=0 && Data1==1) {
dousape2 0:9e52247c0dd2 125 prijData=2; // set variable to 2 - parse data
dousape2 0:9e52247c0dd2 126 } else if(prijData==1 && Data2>=0 && Data2<=10000 && Data1==2) {
dousape2 0:9e52247c0dd2 127 prijData=2; // set variable to 2 - parse data
dousape2 0:9e52247c0dd2 128 } else {
dousape2 0:9e52247c0dd2 129 flushSerialPort(); // discard data from serial
dousape2 0:9e52247c0dd2 130 prijData=0; // set variable to print menu
dousape2 0:9e52247c0dd2 131 }
dousape2 0:9e52247c0dd2 132 } else {
dousape2 0:9e52247c0dd2 133 flushSerialPort(); // discard data from serial
dousape2 0:9e52247c0dd2 134 prijData=0; // set variable to print menu
dousape2 0:9e52247c0dd2 135 }
dousape2 0:9e52247c0dd2 136
dousape2 0:9e52247c0dd2 137 if(prijData==2) {
dousape2 0:9e52247c0dd2 138 if(Data1==1) {
dousape2 0:9e52247c0dd2 139 my_pwm.write((double)Data2/(double)100); //set duty-cycle
dousape2 0:9e52247c0dd2 140 } else if(Data1==2) {
dousape2 0:9e52247c0dd2 141 my_pwm.period_ms(Data2); // set period in ms
dousape2 0:9e52247c0dd2 142 }
dousape2 0:9e52247c0dd2 143 } else {
dousape2 0:9e52247c0dd2 144 menu(); //print menu
dousape2 0:9e52247c0dd2 145 pc.printf("\n Bad data.\n");
dousape2 0:9e52247c0dd2 146 flushSerialPort(); // discard data from serial
dousape2 0:9e52247c0dd2 147 }
dousape2 0:9e52247c0dd2 148 }
dousape2 0:9e52247c0dd2 149 }