解决“重新声明为另一种符号”错误

websocket arduino ethernet atmega

1589 观看

1回复

63 作者的声誉

我目前正在使用Arduino。我正在使用Atmega1284为Lamp工作。我看到了一个示例代码ModbusIP_ENC28J60-> Lamp。我首先编译它而未添加任何内容,但编译正确。现在,我要添加WebSocketServer,因为我希望它也可以在websocket上工作。我添加了一些必要的行,但最终出现此错误: error: 'EthernetClass Ethernet' redeclared as different kind of symbol

我不了解代码有什么问题或应更改的内容。有人可以帮我弄这个吗?

我在这里粘贴我的代码以供参考:

#include <EtherCard.h>
#include <Modbus.h>
#include <ModbusIP_ENC28J60.h>

#include <WebSocketsServer.h>

WebSocketsServer webSocketServer = WebSocketsServer(8080);

//Modbus Registers Offsets (0-9999)
const int LAMP1_COIL = 100;
//Used Pins
const int ledPin = 9;

//ModbusIP object
ModbusIP mb;

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) {
    switch(type) {
        case WStype_DISCONNECTED:
            Serial.println("[%u] Disconnected!\n");
            break;
        case WStype_CONNECTED:
            {
                //IPAddress ip = webSocket.remoteIP(num);
            Serial.println("[%u] Disconnected!\n");

        // send message to client
        //webSocket.sendTXT(num, "Connected");
            }
            break;
        case WStype_TEXT:
            Serial.println("[%u] got text!\n");

            // send message to client
            // webSocket.sendTXT(num, "message here");

            // send data to all connected clients
            // webSocket.broadcastTXT("message here");
            break;
        case WStype_BIN:
            Serial.println("[%u] get binary ");
            //hexdump(payload, lenght);

            // send message to client
            // webSocket.sendBIN(num, payload, lenght);
            break;
    }
}

void setup() {
    // The media access control (ethernet hardware) address for the shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    // The IP address for the shield
    byte ip[] = { 192, 168, 0, 120 };
    //Config Modbus IP
    mb.config(mac, ip);
    //Set ledPin mode
    pinMode(ledPin, OUTPUT);
    // Add LAMP1_COIL register - Use addCoil() for digital outputs
    mb.addCoil(LAMP1_COIL);

    webSocketServer.begin();
    webSocketServer.onEvent(webSocketEvent); 
}

void loop() {
   //Call once inside loop() - all magic here
   mb.task();

   //Attach ledPin to LAMP1_COIL register
   digitalWrite(ledPin, mb.Coil(LAMP1_COIL));

   webSocketServer.loop();
}

帮我使它工作。

作者: Electronic Brat 的来源 发布者: 2017 年 9 月 15 日

回应 1


0

29 作者的声誉

您两次声明了以太网。他们是不同的。

首先可能在包含文件Ethercard.h中,其次是Modbus.h

在我通过Google在github中找到的ModbusIP_ENC28J60中,他们将以太网声明为数组。

重命名一个声明(例如,以太网与以太网)或取消使用一个声明。另外,考虑到源文件中的包含文件,如果只有两个冲突,我会感到惊讶。

C课:声明变量供函数使用,非常简单。添加其他模块时,任何名称冲突都将导致问题。如果您同意两个变量但仍在程序中,则将遭受大量的调试麻烦,因为一个函数将访问其变量,而另一个函数将拥有自己的变量,从而导致实际无效。

返回并查看源文件(* .h)。搜索“以太网”变量。查看如何声明它们以及如何使用它们。最简单的解决方案是选择最新的扩展,然后将以太网更改为以太(如上所述)。

祝好运。

作者: dcy665 发布者: 2017 年 9 月 15 日
32x32