10.1 Kombiniert die Übung 6.4 Wenn sich jemand nähert, Lauflicht einschalten mit dem Yahoo Weather Dienst, dass bei Unterwarnungen das Lauflicht eingeschaltet wird.

Dependencies:   EthernetInterface mbed-rtos mbed spxml

Fork of YahooWeather by smd.iotkit2.ch

Revision:
6:735d5412de0d
Parent:
5:f81113cbe930
--- a/main.cpp	Wed May 27 15:17:54 2015 +0000
+++ b/main.cpp	Wed May 27 17:23:55 2015 +0000
@@ -1,4 +1,4 @@
-/** Beispiel Abfrage Yahoo Weather fuer Zuerich
+/** 10.1 Kombiniert die Übung 6.4 Wenn sich jemand nähert, Lauflicht einschalten mit dem Yahoo Weather Dienst, dass bei Unterwarnungen das Lauflicht eingeschaltet wird.
  */
 #include "mbed.h"
 #include "HTTPClient.h"
@@ -15,6 +15,54 @@
 char message[6000];
 
 DigitalOut myled(LED1);
+// Lauflicht
+DigitalOut led1( D10 );
+DigitalOut led2( D11 );
+DigitalOut led3( D12 );
+DigitalOut led4( D13 );
+PwmOut     buzzer( D7 );           // Buzzer
+
+/** Alarm: Lauflicht und Summer einschalten */
+void alarm()
+{
+    // 10x Lauflicht durchlaufen
+    for ( int t = 0; t < 10; t++ ) 
+    {
+        // Buzzer bleibt eingeschaltet werden die LED ON sind 
+        buzzer.period( 1.0 / 900.0) ;   // 900hz period
+        buzzer = 0.5;                   // 50% duty cycle - max volume 
+        for ( int i = 0; i < 5; i++ ) 
+        {
+            switch  ( i ) 
+            {
+                case   0:
+                    led1 = led2 = led3 = led4 = 0;
+                    break;
+                case   1:
+                    led1 = 1;
+                    break;
+                case   2:
+                    led1 = 0;
+                    led2 = 1;
+                    break;
+                case 3:
+                    led2 = 0;
+                    led3 = 1;
+                    break;
+                case 4:
+                    led3 = 0;
+                    led4 = 1;
+                    break;
+            }
+            // wait bis naechstes LED aktiviert wird
+            wait( 0.2 );
+        }
+        // Ruhe und alle LED off
+        buzzer = 0;
+        led4 = 0;
+        wait ( 0.5 );
+    }
+}
 
 int main()
 {
@@ -37,13 +85,14 @@
             SP_XmlElementNode * node = rootHandle.getChild( "channel" ).toElement();
 
             SP_XmlHandle handle(node);
-            SP_XmlElementNode * condition = handle.getChild( "item" ).getChild("yweather:condition").toElement();
-            // Allgemeine Lage, Sonnig, Bewoelkt etc.
-            printf( "%s, ", condition->getAttrValue("text") );
-            // Temperatur in Celsius
-            printf( "%sC, ", condition->getAttrValue("temp") );
-            // Datum und Zeit letzte Aktualisierung
-            printf( "%s\n", condition->getAttrValue("date") );
+            SP_XmlElementNode * wind = handle.getChild("yweather:wind").toElement();
+            // Windgeschwindigkeit
+            printf( "Windgeschwindigkeit %s\n", wind->getAttrValue("speed") );
+            float speed;
+            sscanf( wind->getAttrValue("speed"), "%f", &speed );
+            // wenn Wind staerker als 60 Kmh Alarm ausloesen.
+            if  ( speed > 60.0f )
+                alarm();
         } 
         else
             printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());