Example code 12

Dependencies:   mbed-rtos mbed

Fork of STMNucleoF401RE_ExampleCode_12_ServoMotor by 20161020-Corso Rapid Prototyping with STM32Nucleo

Circuito

/media/uploads/perlatecnica/servomotorepotenziometro.png

Committer:
perlatecnica
Date:
Fri Apr 29 14:16:40 2016 +0000
Revision:
4:bb8f5479e46c
Parent:
3:b1a16fe3265f
v1.2 Eliminata unita' di misura dalla lettura del valore anoalogico

Who changed what in which revision?

UserRevisionLine numberNew contents of line
perlatecnica 2:e1a0d442f750 1 /****************************************************
perlatecnica 2:e1a0d442f750 2 * FAST PROTOTYPING WITH NUCLEO *
perlatecnica 2:e1a0d442f750 3 * Example Code 12: Servo motor control *
perlatecnica 2:e1a0d442f750 4 * Author: Mauro D'Angelo *
perlatecnica 2:e1a0d442f750 5 * Organization: Perlatecnica no-profit organization *
perlatecnica 2:e1a0d442f750 6 *****************************************************/
perlatecnica 2:e1a0d442f750 7
bcostm 0:4860a91fb495 8 #include "mbed.h"
perlatecnica 2:e1a0d442f750 9 #include "rtos.h"
bcostm 0:4860a91fb495 10
perlatecnica 2:e1a0d442f750 11 #define PWMB PA_7
perlatecnica 2:e1a0d442f750 12 #define DIRB PA_5
perlatecnica 2:e1a0d442f750 13
perlatecnica 2:e1a0d442f750 14 #define PWMA PB_3
perlatecnica 2:e1a0d442f750 15 #define DIRA PA_6
perlatecnica 2:e1a0d442f750 16
bcostm 0:4860a91fb495 17
perlatecnica 2:e1a0d442f750 18 // Instanzia un oggetto di tipo PwmOut e gli da il nome mypwm
perlatecnica 2:e1a0d442f750 19 PwmOut mypwm(PWMA);
perlatecnica 2:e1a0d442f750 20 // Definisce il pin che indica la direzione
perlatecnica 2:e1a0d442f750 21 DigitalOut motordir(DIRB);
perlatecnica 2:e1a0d442f750 22
perlatecnica 2:e1a0d442f750 23 // Instanzia un oggetto di tipo DigitalOut sul pin LED1 e gli da il nome myled
bcostm 0:4860a91fb495 24 DigitalOut myled(LED1);
bcostm 0:4860a91fb495 25
perlatecnica 2:e1a0d442f750 26 // Instanzia un oggetto di tipo AnalogIn e gli da nome analog_value. A questo viene assegnato un pin di ingresso analogico
perlatecnica 2:e1a0d442f750 27 AnalogIn analog_value(A0);
perlatecnica 2:e1a0d442f750 28
perlatecnica 2:e1a0d442f750 29 float meas;
perlatecnica 2:e1a0d442f750 30 float dutycycle;
perlatecnica 2:e1a0d442f750 31
perlatecnica 2:e1a0d442f750 32 // Instanzia un oggetto di tipo Serial sui pin Tx e Rx della porta USB e gli da il nome pc (trattandosi della porta USB connessa al PC)
perlatecnica 2:e1a0d442f750 33 Serial pc(USBTX, USBRX);
perlatecnica 2:e1a0d442f750 34
perlatecnica 2:e1a0d442f750 35 // Read variable resistor
perlatecnica 2:e1a0d442f750 36 void runmotor_threadfunc(void const *args) {
perlatecnica 2:e1a0d442f750 37 while(true){
perlatecnica 2:e1a0d442f750 38 meas = analog_value.read(); // Reads the analog input value (value from 0.0 to 1.0)
perlatecnica 4:bb8f5479e46c 39 printf("measure = %.2f \r\n", meas);
perlatecnica 2:e1a0d442f750 40 //printf("pwm set to %.2f %%\r\n", mypwm.read() * 100);
perlatecnica 2:e1a0d442f750 41 dutycycle = meas*2/1000;
perlatecnica 3:b1a16fe3265f 42 // Set PWM period
perlatecnica 3:b1a16fe3265f 43 mypwm.period_ms(20+dutycycle);
perlatecnica 2:e1a0d442f750 44 mypwm.pulsewidth(dutycycle);
perlatecnica 2:e1a0d442f750 45 }
perlatecnica 2:e1a0d442f750 46 }
perlatecnica 2:e1a0d442f750 47
perlatecnica 2:e1a0d442f750 48 // Entry point
perlatecnica 2:e1a0d442f750 49 int main() {
perlatecnica 2:e1a0d442f750 50 // Set direction
perlatecnica 2:e1a0d442f750 51 motordir = 1;
perlatecnica 3:b1a16fe3265f 52
perlatecnica 2:e1a0d442f750 53
perlatecnica 2:e1a0d442f750 54 // Start Thread
perlatecnica 2:e1a0d442f750 55 Thread runmotor_thread(runmotor_threadfunc);
bcostm 0:4860a91fb495 56
perlatecnica 2:e1a0d442f750 57 while(1) {;}
perlatecnica 2:e1a0d442f750 58 }