1

我目前正在做一个 arduino 项目。arduino 是否通过 Web 套接字与 NodeJS 服务器通信。

套接字连接工作正常,没有问题。但我目前遇到的问题是,我希望能够使用 NodeJS 服务器发出的套接字中断无限循环。

我发现一个页面可以解决这个问题,但只有一个按钮连接到 arduino。

链接到页面(用按钮中断)

这是我希望能够用套接字中断的循环:

bool loopRunning = true;

void rainbow(int wait) {
while(loopRunning == true) {

      for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) {
        for(int i=0; i<strip.numPixels(); i++) { 
          int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
          strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
        }
        strip.show(); 
        delay(wait);  
      }
    }
}

当我收到套接字发射时,我想将 loopRunning 设置为 false。

任何人都有任何想法我可以如何实现这个?

我使用的套接字功能的页面

4

1 回答 1

1

您似乎需要使用两个主要功能:

  • SocketIoClient::on(event, callback)- 将事件绑定到函数
  • SocketIoClient::loop()- 处理 websocket 并获取任何传入事件

我不能轻易测试这个,但根据文档,这样的事情似乎应该起作用:

bool loopRunning = true;
SocketIoClient webSocket;

void handleEvent(const char* payload, size_t length) {
  loopRunning = false;
}

void setup() {
  // ...
  // general setup code
  // ...

  webSocket.on("event", handleEvent); // call handleEvent when an event named "event" occurs
  webSocket.begin(/* ... whatever ... */);
}

void rainbow(int wait) {
  while(loopRunning == true) {
    for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) {
      for(int i=0; i<strip.numPixels(); i++) { 
        int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
        strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
      }
      strip.show();
      webSocket.loop(); // process any incoming websocket events
      delay(wait);
    }
  }
}
于 2019-12-03T19:16:29.790 回答