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

Files at this revision

API Documentation at this revision

Comitter:
stefan1691
Date:
Wed May 27 17:23:55 2015 +0000
Parent:
5:f81113cbe930
Commit message:
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.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f81113cbe930 -r 735d5412de0d main.cpp
--- 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());