2017-04-09 8 views
0

ウェブサイトの値に基づいてLEDのオン/オフを切り替えるコードがあります(空白ページに数字が表示されます)。LEDの点滅回数はArduinoが間違った整数値を返す

です

問題は、ループが実行しておくことである。
私は手動で(int c = 3)の整数値を設定することで、問題を解決することができます。

ない私の問題が何であるかを確認してください。
たぶん、あなたの1は私を指すことができます正しい方向。

Ur L:http://b2b.as/lan.php?pid=8855

コード:

#include <Ethernet.h> 
#include <SPI.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 104 }; 
char server[] = "b2b.as"; 

void setup() 
{ 
    Ethernet.begin(mac, ip); 
    Serial.begin(9600); 

    delay(1000); 

    Serial.println(Ethernet.localIP()); 
    Serial.println(); 

    // Set digital pin as output 
    // 5V 
    pinMode(8, OUTPUT); 
} 

void loop() 
{ 

    // 
    Serial.print("\n-----\n"); 

    // Connect to the server 
    Serial.print("connecting to URL ..."); 

    // Start LAN connection 
    EthernetClient client; 
    if (client.connect(server, 80)) { 
    Serial.println("connected"); 
    client.println("GET /lan.php?pid=8855"); 
    client.println(); 
    } else { 
    Serial.println("connection failed"); 
    } 

    // Wait a moment for data to arrive 
    // Note: This is NOT a reliable way of doing this! 
    delay(1000); 

    if (client.available() > 0) { 

    char c = atoi(client.read()); 

    Serial.print("page value (pick): "); 
    Serial.print(c, DEC); 
    Serial.print("\n"); 

    for (int x = 1; x <= int(c); x++) { 
     Serial.print("picking: #"); 
     Serial.println(x); 
     digitalWrite(8, HIGH); 
     Serial.println("8 HIGH ..."); 
     delay(5000); // Add switch 
     digitalWrite(8, LOW); 
     Serial.println("8 LOW ..."); 
     delay(1000); 
    } 

    Serial.print("end"); 

    } 

    // Disconnect the client 
    if (client.connected()) { 
    //Serial.println(); 
    Serial.print("disconnecting"); 
    client.stop(); 
    } 

    // Wait another 9s, which will give us a delay of roughly 10s 
    delay(9000); 
} 
+0

適切なHTTPリクエストのように見えていないこと。そして、HTTPサーバは単なる1バイトを返すだけではありません。 https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session –

+0

これはPHPページで、0〜100の値を返します –

+0

また、サーバーは一連のヘッダーを送信します。そして、 'client.read()'は1バイトを読み込みます。これは0から9の数字だけを生成します。 –

答えて

0

私はlan.php?pid=8855への呼び出しだけで、XML、例えば、フォーマットせずにJSONをHTMLに値を返すことを前提としています。その後、コードは基本的にASCII文字3を整数値33(ASCII Table参照)を与える整数に変換します。したがって、ループは停止しません。

ソリューション

ただ、整数に変換しatoi関数を使用します。

char c = atoi(client.read()); 
+0

私はすでにatoiを使ってみましたが、何も返しません。値は入っていません。 –

+0

どのように確認しましたか? 'atoi'の戻り値を' Serial.println'を介して出力しようとすると、文字値3がデフォルトでは "不可視"の制御文字に対応するため、何も表示されません。 –

+0

さて、さらにテストする必要があります:) –

0

これはtoInt()が私が探していた機能だと思われます。文字列を整数に変換し、ループを修正します。

https://www.arduino.cc/en/Reference/StringToInt

コードが更新されていて、動作しているようです:

#include <Ethernet.h> 
#include <SPI.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 104 }; 
char server[] = "b2b.as"; 

void setup() 
{ 
    Ethernet.begin(mac, ip); 
    Serial.begin(9600); 

    delay(1000); 

    Serial.println(Ethernet.localIP()); 
    Serial.println(); 

    // Set digital pin as output 
    // 5V 
    pinMode(8, OUTPUT); 
} 

void loop() 
{ 

    // 
    Serial.print("\n-----\n"); 

    // Connect to the server 
    Serial.print("connecting to URL ..."); 

    // Start LAN connection 
    EthernetClient client; 
    if (client.connect(server, 80)) { 
    Serial.println("connected"); 
    client.println("GET /lan.php?pid=8855"); 
    client.println(); 
    } else { 
    Serial.println("connection failed"); 
    } 

    // Wait a moment for data to arrive 
    // Note: This is NOT a reliable way of doing this! 
    delay(1000); 

    if (client.available() > 0) { 

    String pickNum; 

    while (client.available()) { 
     char c = client.read(); // gets one byte from serial buffer 
     pickNum += c; // count 
     delay(2); // delay for buffer 
    } 

    Serial.print("page value (pick): "); 
    Serial.println(pickNum); 

    for (int x = 1; x <= pickNum.toInt(); x++) { 
     Serial.print("picking: #"); 
     Serial.println(x); 
     digitalWrite(8, HIGH); 
     Serial.println("8 HIGH ..."); 
     delay(1000); // Add switch 
     digitalWrite(8, LOW); 
     Serial.println("8 LOW ..."); 
     delay(1000); 
    } 

    Serial.print("end"); 

    } 

    // Disconnect the client 
    if (client.connected()) { 
    //Serial.println(); 
    Serial.print("disconnecting"); 
    client.stop(); 
    } 

    // Wait another 9s, which will give us a delay of roughly 10s 
    delay(9000); 
} 
関連する問題