0

ある日、私は Arduino をいじっていて、クールなアイデアを思いつきました。たぶん、シリアルモニターなしでワイヤレス接続を行うことができました! 代わりにLCDディスプレイを使用できます!それで、私は仕事に行きました。シリアルのものをすべてLCDのものに置き換えました。

最後に、コードにエラーはありませんでした (Arduino クライアントによると)。

これが私のコードです:

#include <LiquidCrystal.h>
#include <WiFi.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

char ssid[] = "Fake Network";                    // Your network SSID (name)
char key[] = "1";       // your network key
int keyIndex = 0;                                // Your network key Index number
int status = WL_IDLE_STATUS;                     // The Wi-Fi radio's status

void setup() {

    lcd.begin(16, 2);

    // Check for the presence of the shield:
    if (WiFi.status() == WL_NO_SHIELD) {
        lcd.println("WiFi shield not present");
        // Don't continue:
        while(true);
    }

    // Attempt to connect to Wi-Fi network:
    while ( status != WL_CONNECTED) {
        lcd.print("Attempting to connect to WEP network, SSID: ");
        lcd.println(ssid);
        status = WiFi.begin(ssid, keyIndex, key);

        // Wait 10 seconds for connection:
        delay(10000);
    }

    // Once you are connected:
    lcd.print("You're connected to the network");
    printCurrentNet();
    printWifiData();
}

void loop() {
    // Check the network connection once every 10 seconds:
    delay(10000);
    printCurrentNet();
}

void printWifiData() {
  // Print your Wi-Fi shield's IP address:
  IPAddress IPaddr = WiFi.localIP();
  lcd.print("IP Address: ");
  lcd.println(IPaddr);
  lcd.println(IPaddr);

  // Print your MAC address:
  byte MACaddr[6];
  WiFi.macAddress(MACaddr);
  lcd.print("MAC address: ");
  lcd.print(MACaddr[5],HEX);
  lcd.print(":");
  lcd.print(MACaddr[4],HEX);
  lcd.print(":");
  lcd.print(MACaddr[3],HEX);
  lcd.print(":");
  lcd.print(MACaddr[2],HEX);
  lcd.print(":");
  lcd.print(MACaddr[1],HEX);
  lcd.print(":");
  lcd.println(MACaddr[0],HEX);
}

void printCurrentNet() {
    // Print the SSID of the network you're attached to:
    lcd.print("SSID: ");
    lcd.println(WiFi.SSID());

    // Print the MAC address of the router you're attached to:
    byte bssid[6];
    WiFi.BSSID(bssid);
    lcd.print("BSSID: ");
    lcd.print(bssid[5],HEX);
    lcd.print(":");
    lcd.print(bssid[4],HEX);
    lcd.print(":");
    lcd.print(bssid[3],HEX);
    lcd.print(":");
    lcd.print(bssid[2],HEX);
    lcd.print(":");
    lcd.print(bssid[1],HEX);
    lcd.print(":");
    lcd.println(bssid[0],HEX);

    // Print the received signal strength:
    long rssi = WiFi.RSSI();
    lcd.print("signal strength (RSSI):");
    lcd.println(rssi);

    // Print the encryption type:
    byte encryption = WiFi.encryptionType();
    lcd.print("Encryption Type:");
    lcd.println(encryption,HEX);
    lcd.println();
}

そして結果は…………何もありませんでした。何も表示されません。

次に、自分のバージョンのデバッグを行いました。コードの一番下から始めたことに注意してください。

lcd.print("bug");

これをコードのすべての行の下に置きます。最後に、この行の下にあるトップに到達しました。

lcd.begin(16, 2);

そして、何を推測してください!どの行にも表示されません!あちこち見て、ディスプレイピンをチェックしました。

最後に、私は問題を見つけました!

なかなか取り除けない恐ろしい虫です!WiFi.h ライブラリでは表示されません! 理由はわかりませんが、#include <WiFi.h>自分のプログラム (または LiquidCrystal ライブラリを使用する任意のプログラム) にアクセスした場合でも、まったく同じことが起こります。

この問題の原因は何ですか?どうすれば修正できますか? 私はまだ運がありません。

4

1 に答える 1

2

ドキュメントによると:

Arduino は、SPI バス (ICSP ヘッダー経由) を使用して、Wifi シールドのプロセッサと SD カードの両方と通信します。これは、Uno のデジタル ピン 11、12、および 13 と Mega のピン 50、51、および 52 にあります。宇野上11MOSI、で12あるMISO

あなたのコードによると

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

ピン1112LCDに使用しています。LCD が SPI を使用している場合、LCD はWi-Fiシールドとピン11を共有できます。これは、 ( ) 機能に使用される同じピンのセットが、周辺機器のどれがリッスンする必要があるかを周辺機器に伝えるためです。ただし、LiquidCrystal ライブラリは最初の 2 つの引数ピンをそれぞれ とに使用するため、SPI との互換性がありません。解決策: LCD を別のピンに移動します。12SSSlave SelectRSEnable

于 2013-03-14T20:10:51.383 に答える