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

Committer:
stefan1691
Date:
Wed May 27 17:23:55 2015 +0000
Revision:
6:735d5412de0d
Parent:
5:f81113cbe930
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.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stefan1691 6:735d5412de0d 1 /** 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.
marcel1691 1:2e29a33cd918 2 */
WiredHome 0:fb5060c39dd1 3 #include "mbed.h"
WiredHome 0:fb5060c39dd1 4 #include "HTTPClient.h"
marcel1691 1:2e29a33cd918 5 #include "HTTPText.h"
WiredHome 0:fb5060c39dd1 6 #include "EthernetInterface.h"
stefan1691 5:f81113cbe930 7 #include "spdomparser.hpp"
stefan1691 5:f81113cbe930 8 #include "spxmlnode.hpp"
stefan1691 5:f81113cbe930 9 #include "spxmlhandle.hpp"
WiredHome 0:fb5060c39dd1 10
WiredHome 0:fb5060c39dd1 11 EthernetInterface eth;
stefan1691 3:aad64a4b6ff6 12 // HTTPClient Hilfsklasse
WiredHome 0:fb5060c39dd1 13 HTTPClient http;
stefan1691 3:aad64a4b6ff6 14 // I/O Buffer
marcel1691 1:2e29a33cd918 15 char message[6000];
WiredHome 0:fb5060c39dd1 16
WiredHome 0:fb5060c39dd1 17 DigitalOut myled(LED1);
stefan1691 6:735d5412de0d 18 // Lauflicht
stefan1691 6:735d5412de0d 19 DigitalOut led1( D10 );
stefan1691 6:735d5412de0d 20 DigitalOut led2( D11 );
stefan1691 6:735d5412de0d 21 DigitalOut led3( D12 );
stefan1691 6:735d5412de0d 22 DigitalOut led4( D13 );
stefan1691 6:735d5412de0d 23 PwmOut buzzer( D7 ); // Buzzer
stefan1691 6:735d5412de0d 24
stefan1691 6:735d5412de0d 25 /** Alarm: Lauflicht und Summer einschalten */
stefan1691 6:735d5412de0d 26 void alarm()
stefan1691 6:735d5412de0d 27 {
stefan1691 6:735d5412de0d 28 // 10x Lauflicht durchlaufen
stefan1691 6:735d5412de0d 29 for ( int t = 0; t < 10; t++ )
stefan1691 6:735d5412de0d 30 {
stefan1691 6:735d5412de0d 31 // Buzzer bleibt eingeschaltet werden die LED ON sind
stefan1691 6:735d5412de0d 32 buzzer.period( 1.0 / 900.0) ; // 900hz period
stefan1691 6:735d5412de0d 33 buzzer = 0.5; // 50% duty cycle - max volume
stefan1691 6:735d5412de0d 34 for ( int i = 0; i < 5; i++ )
stefan1691 6:735d5412de0d 35 {
stefan1691 6:735d5412de0d 36 switch ( i )
stefan1691 6:735d5412de0d 37 {
stefan1691 6:735d5412de0d 38 case 0:
stefan1691 6:735d5412de0d 39 led1 = led2 = led3 = led4 = 0;
stefan1691 6:735d5412de0d 40 break;
stefan1691 6:735d5412de0d 41 case 1:
stefan1691 6:735d5412de0d 42 led1 = 1;
stefan1691 6:735d5412de0d 43 break;
stefan1691 6:735d5412de0d 44 case 2:
stefan1691 6:735d5412de0d 45 led1 = 0;
stefan1691 6:735d5412de0d 46 led2 = 1;
stefan1691 6:735d5412de0d 47 break;
stefan1691 6:735d5412de0d 48 case 3:
stefan1691 6:735d5412de0d 49 led2 = 0;
stefan1691 6:735d5412de0d 50 led3 = 1;
stefan1691 6:735d5412de0d 51 break;
stefan1691 6:735d5412de0d 52 case 4:
stefan1691 6:735d5412de0d 53 led3 = 0;
stefan1691 6:735d5412de0d 54 led4 = 1;
stefan1691 6:735d5412de0d 55 break;
stefan1691 6:735d5412de0d 56 }
stefan1691 6:735d5412de0d 57 // wait bis naechstes LED aktiviert wird
stefan1691 6:735d5412de0d 58 wait( 0.2 );
stefan1691 6:735d5412de0d 59 }
stefan1691 6:735d5412de0d 60 // Ruhe und alle LED off
stefan1691 6:735d5412de0d 61 buzzer = 0;
stefan1691 6:735d5412de0d 62 led4 = 0;
stefan1691 6:735d5412de0d 63 wait ( 0.5 );
stefan1691 6:735d5412de0d 64 }
stefan1691 6:735d5412de0d 65 }
WiredHome 0:fb5060c39dd1 66
marcel1691 1:2e29a33cd918 67 int main()
marcel1691 1:2e29a33cd918 68 {
stefan1691 5:f81113cbe930 69 printf("\tYahoo Weather\n");
WiredHome 0:fb5060c39dd1 70 eth.init();
WiredHome 0:fb5060c39dd1 71 eth.connect();
WiredHome 0:fb5060c39dd1 72
marcel1691 1:2e29a33cd918 73 while(1)
marcel1691 1:2e29a33cd918 74 {
WiredHome 0:fb5060c39dd1 75 myled = 1;
stefan1691 5:f81113cbe930 76 // Yahoo Weather fuer Zuerich
stefan1691 5:f81113cbe930 77 int ret = http.get("http://weather.yahooapis.com/forecastrss?w=784794&u=c", message, sizeof(message));
marcel1691 1:2e29a33cd918 78 if ( !ret )
marcel1691 1:2e29a33cd918 79 {
stefan1691 5:f81113cbe930 80 // XML Parser
stefan1691 5:f81113cbe930 81 SP_XmlDomParser parser;
stefan1691 5:f81113cbe930 82 // char[] bzw. XML parsen
stefan1691 5:f81113cbe930 83 parser.append( message, strlen( message ) );
stefan1691 5:f81113cbe930 84 SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() );
stefan1691 5:f81113cbe930 85 SP_XmlElementNode * node = rootHandle.getChild( "channel" ).toElement();
stefan1691 5:f81113cbe930 86
stefan1691 5:f81113cbe930 87 SP_XmlHandle handle(node);
stefan1691 6:735d5412de0d 88 SP_XmlElementNode * wind = handle.getChild("yweather:wind").toElement();
stefan1691 6:735d5412de0d 89 // Windgeschwindigkeit
stefan1691 6:735d5412de0d 90 printf( "Windgeschwindigkeit %s\n", wind->getAttrValue("speed") );
stefan1691 6:735d5412de0d 91 float speed;
stefan1691 6:735d5412de0d 92 sscanf( wind->getAttrValue("speed"), "%f", &speed );
stefan1691 6:735d5412de0d 93 // wenn Wind staerker als 60 Kmh Alarm ausloesen.
stefan1691 6:735d5412de0d 94 if ( speed > 60.0f )
stefan1691 6:735d5412de0d 95 alarm();
stefan1691 5:f81113cbe930 96 }
marcel1691 1:2e29a33cd918 97 else
marcel1691 1:2e29a33cd918 98 printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
stefan1691 5:f81113cbe930 99
WiredHome 0:fb5060c39dd1 100 myled = 0;
marcel1691 1:2e29a33cd918 101
WiredHome 0:fb5060c39dd1 102 wait(10);
WiredHome 0:fb5060c39dd1 103 }
stefan1691 5:f81113cbe930 104 //eth.disconnect();
WiredHome 0:fb5060c39dd1 105 }