0

有一天,我在玩我的 Arduino 并有了一个很酷的想法。也许我可以在没有串行监视器的情况下进行无线连接!我可以改用液晶显示器!所以,我去上班了。我用 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 shield 的处理器和 SD 卡进行通信。这是在 Uno 上的数字引脚 11、12 和 13 以及 Mega 上的引脚 50、51 和 52 上。在 Uno11上是MOSI,并且12MISO

根据你的代码

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

您正在使用引脚1112LCD。现在,如果 LCD 使用 SPI,则 LCD 可以共享引脚1112Wi-Fi屏蔽,因为用于SS( Slave Select) 功能的同一组引脚将告诉外围设备应该监听哪一个。但是,LiquidCrystal 库将其前两个参数引脚分别用于RSEnable,使其与 SPI 不兼容。解决方案:将您的 LCD 移到不同的引脚上。

于 2013-03-14T20:10:51.383 回答