Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 1:df2cee74ab8b
- Parent:
- 0:7a91558f8c41
- Child:
- 2:7aacbdf39425
--- a/main.cpp Mon Jan 30 05:20:16 2017 +0000
+++ b/main.cpp Mon Jan 30 06:07:59 2017 +0000
@@ -1,31 +1,50 @@
-#include "mbed.h"
+//This software is derived from the example Nucleo_pwm.
+//It outputs a PWM signal that is compatible with Tower Pro SG90 servos.
+//It makes the servo move from one programmed position to another each time the
+//user button is pressed.
+//The programmed positions are defined by the values that are stored in
+//the variable "pulseDurationInMicroSeconds".
+//An index counter is used to select which value is to be used to set the pulse
+//duration of the PWM signal that controls that servo.
+//The value of this index counter is changed each time the user button is
+//pressed and the changes are made in a way that makes the program repeatedly
+//cycles through all the possible positions.
+//It is just necessary to add values to "pulseDurationInMicroSeconds" to have
+//the servo adopt more positions.
+
+//Just connect the brown wire of a SG90 servo to GND, its red wire to AVDD and
+//its the orange wire to D11 to have the SMT32-F401RE contol the servo.
+//
-PwmOut mypwm(PA_7);
-InterruptIn monBouton(USER_BUTTON);
-int compteur;
-int cycle[]={700, 1550, 2500, 1550};
-void pressed(void)
+#include "mbed.h"
+#define NUMBER_OF_POSITIONS sizeof(pulseDurationInMicroSeconds)/sizeof(int)
+#define PWM_PERIOD_FOR_SG90_IN_MS 20
+
+DigitalOut userLED(LED1);
+PwmOut towerProSG90(D11); //PA_7);
+InterruptIn userButton(USER_BUTTON);
+int index;
+int pulseDurationInMicroSeconds[]={700, 1550, 2500, 1550};
+void responseToUserButtonPressed(void)
{
- compteur++;
- if (compteur >= sizeof(cycle)/sizeof(int))
+ index++;
+ if (index >= NUMBER_OF_POSITIONS)
{
- compteur = 0;
+ index = 0;
}
- mypwm.pulsewidth_us(cycle[compteur]);
+ towerProSG90.pulsewidth_us(pulseDurationInMicroSeconds[index]);
}
-DigitalOut myled(LED1);
-
-int main() {
- compteur = 0;
- mypwm.period_ms(20);
- mypwm.pulsewidth_us(500);
-
-// printf("pwm set to %.2f %%\n", mypwm.read() * 100);
- monBouton.fall(&pressed);
+int main()
+{
+ index = 0;
+ towerProSG90.period_ms(PWM_PERIOD_FOR_SG90_IN_MS);
+ towerProSG90.pulsewidth_us(pulseDurationInMicroSeconds[index]);
+ userButton.fall(&responseToUserButtonPressed);
- while(1) {
- myled = !myled;
+ while(1)
+ {
+ userLED = !userLED;
wait(1);
}
}