1

我正在尝试从 NodeJS 控制 Arduino。

我已经尝试过Duino,我知道设备已准备就绪,并且调试器显示命令已成功发送到 Arduino,但没有任何反应。

我也试过Johnny-Five,它显示设备已连接(在 COM8 上),但该on ready事件从未被触发。

请帮忙!谢谢..

4

1 回答 1

3

我也许可以帮助您,因为您必须更具体地了解您真正想做的事情?

你想读取数据吗?你想远程控制它吗?

编辑: 我也使用 Node 来控制 Arduino,但我没有使用 Duino 或 Johnny-Five,因为它们不适合我的项目。

相反,我在我的计算机和我的机器人之间建立了自己的通信协议。

在 Arduino 上,代码很简单。它检查串行是否可用,如果可用,则读取并存储缓冲区。使用 aswitchif/else然后我选择我希望我的机器人执行的动作(向前移动、向后移动、闪烁 LED 等)

通信是通过发送bytes而不是人类可读的动作进行的。所以你要做的第一件事就是想象两者之间的一个小接口。Bytes很有用,因为在 Arduino 方面,您不需要任何转换,并且它们可以很好地与. 一起使用switch,而字符串则不是这样。

在 Arduino 方面,您将拥有类似的东西:(请注意,您需要在DATA_HEADER某处声明)

void readCommands(){
    while(Serial.available() > 0){

        // Read first byte of stream.
        uint8_t numberOfActions;
        uint8_t recievedByte = Serial.read();

        // If first byte is equal to dataHeader, lets do
        if(recievedByte == DATA_HEADER){
            delay(10);

            // Get the number of actions to execute
            numberOfActions = Serial.read();

            delay(10);

            // Execute each actions
            for (uint8_t i = 0 ; i < numberOfActions ; i++){

                // Get action type
                actionType = Serial.read();

                if(actionType == 0x01){
                    // do you first action
                }
                else if(actionType == 0x02{
                    // do your second action
                }
                else if(actionType == 0x03){
                    // do your third action
                }
            }
        }
    }
}

在节点方面,您将拥有类似的东西:(查看串行端口 github以获取更多信息)

var dataHeader = 0x0f, //beginning of the data stream, very useful if you intend to send a batch of actions
myFirstAction = 0x01,
mySecondAction = 0x02,
myThirdAction = 0x03;

sendCmdToArduino = function() {
    sp.write(Buffer([dataHeader]));

    sp.write(Buffer([0x03])); // this is the number of actions for the Arduino code

    sp.write(Buffer([myFirstAction]));
    sp.write(Buffer([mySecondAction]));
    sp.write(Buffer([myThirdAction]));
}

希望能帮助到你!

于 2013-10-04T07:00:00.063 回答