Software that allows basic remote control of the position of a servo (schematic included in the comments)

Dependencies:   MyDS1820 mbed

Fork of Nucleo_sg90_remote_control by YP Roy

Revision:
5:78a94312c383
Parent:
4:85a8391945b2
Child:
6:6e9120cf5640
--- a/main.cpp	Thu Mar 09 01:16:43 2017 +0000
+++ b/main.cpp	Thu Mar 23 19:44:48 2017 +0000
@@ -1,68 +1,55 @@
-//247-426-Nucleo_Lab_7
-//This software is derived from Nucleo_pwm_servo_sg90.
+//247-426-Nucleo_Lab_8
+//This software is derived from Nucleo_sg90_remote_control.
 //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.
+//It makes the servo move according to the temperature read from a DS1820
+//temperature sensor.
+//Pressing the user button makes the software define the temperature it then
+//reads as a reference temperature that is associated to the middle position
+//that can be taken by the sg90 servo. An increase in temperature relative to
+//this reference temperature will then make the servo rotate in one direction
+//whereas a decrease with respect to the reference will rather make it rotate in
+//the other direction.
+//
 
 //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 control the servo.
 //
-
-//Remote control of a SG90 servo is also possible if the Nucleo board is allowed
-//to control an infrared LED as an infrared receptor is connected to the servo.
 //
 //material:
-//      Infrared LED = LTE-5802A, Receiver = RPM7140-V4R
+//      DS18S20: temperature sensor
 //
 //signals:
 //      D11= pwm signal to use to control SG90 directly
-//      D10= !D11 = signal to use to control the transmitter's LED
-//      D9 = 40kHz signal to use to modulate the LED output
-//
-//
-//Transmitter: (powered by Nucleo's supply)
-//   +5 ---/\/\/\----------- |
-//           180             |
-//                           |_
-//                           \/  LTE-5802A
-//                           --
-//                     ______|______
-//                   |/             \|
-//  D10---/\/\/\-----|               |-----/\/\/\----- D9
-//  (!pwm)   10k      |\ <-emitter-> /|       10k      (40kHz)
-//                    |             |
-//                   GND           GND
+//      D8=  used to communicate with the 1-wire temperature sensor Ds18s20
 //
-//  GND of Nucleo board ------ GND
-//
-//Receiver: (powered by remote supply)
-//
+//  Circuit:
 //                                                             _____
-//                                                             | O | RPM7140-V4R
-//                                      +5---/\/\/\----        ----- (front view)
-//                                            10k     |        | | |
-//                                                    |        | | |______+5v
-//      Orange wire of servo SG90 --------------------.--      | |________GND 
-//      Red wire of servo SG90 -----+5V                  \|    | 
-//      Brown wire of servo SG90 ---GND                   |-----
-//                                              emitter  /|
-//                                                       |
-//                                                      GND
+//                                                             |   | DS18S20
+//                                                             -----(front view)
+//                                                             | | |
+//                                                       GND___| | |+5V
+//      Orange wire of servo SG90 --D11                          |
+//      Red wire of servo SG90 -----+5V                 D8_______|-/\/\/\--+5v
+//      Brown wire of servo SG90 ---GND                              10k
+//
+// Hyperterminal configuration
+// 9600 bauds, 8-bit data, no parity
 
+
+
+#include "DS1820.h"
 #include "mbed.h"
 #define NUMBER_OF_POSITIONS sizeof(pulseDurationInMicroSeconds)/sizeof(int)
 #define PWM_PERIOD_FOR_SG90_IN_MS           20
 #define PWM_PERIOD_FOR_MODULATION_IN_US     25  
+
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+DS1820 probe(D8);
+
+PwmOut led(LED1);
 DigitalOut userLED(LED1);
+
 PwmOut towerProSG90(D11);
 PwmOut remoteControlOutput(D10);
 PwmOut modulatingOutput(D9);
@@ -91,10 +78,15 @@
     modulatingOutput.period_us(PWM_PERIOD_FOR_MODULATION_IN_US);
     modulatingOutput.pulsewidth_us(PWM_PERIOD_FOR_MODULATION_IN_US/2);
     userButton.fall(&responseToUserButtonPressed);
-      
+    
+    userLED = 1;
     while(1)
     {
         userLED = !userLED;
-        wait(1);
+        
+        int delai = 0;
+        delai = probe.convertTemperature(true, DS1820::all_devices);         //Start temperature conversion, wait until ready        
+        printf("Il fait: %3.1foC\r\n", probe.temperature());   
+        wait(1.25);   
     }
 }