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
main.cpp@6:735d5412de0d, 2015-05-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |