Arduino LiquidCrystal库可以干扰Wifi库吗?

时间:2013-03-14 20:06:10

标签: wifi arduino lcd

有一天,我和我的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);

和GUESS什么!任何一行都没有显示!我到处看,我检查了显示器针脚。

最后,我发现了问题!

这是一个我无法摆脱的可怕的错误!显示器不会显示WiFi.h库!我不知道为什么,但如果我甚至#include <WiFi.h>进入我的程序(或任何带有LiquidCrystal库的程序......事情就会完全一样!

这个问题的原因是什么,我该如何解决?我还没有运气。

1 个答案:

答案 0 :(得分:2)

根据documentation

  

Arduino使用SPI总线(通过ICSP接头)与Wifi屏蔽处理器和SD卡通信。这是在Uno上的数字引脚11,12和13以及Mega上的引脚50,51和52上。在Uno 11MOSI12MISO

根据您的代码

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

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