繁体   English   中英

如何优化以下代码? (它在arduino中)

[英]How can I optimize the following code? (it's in arduino)

我需要执行一个 function 来根据路径设置颜色,也就是说,要有一个 function 而不是调用 void red、void green、void blue。 我知道我必须将路线和每种颜色的值作为参数(字符串路线,int 颜色)传递,但我不知道该怎么做。

    #include<WiFi.h>
    #include<FirebaseESP32.h>
    #include <Adafruit_NeoPixel.h>

    #define PIN 21
    #define NUM_LEDS 20
    #define FIREBASE_HOST "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    #define FIREBASE_AUTH "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

     const char* ssid = "XXXXXXXXXXXX";
     const char* password = "XXXXXXXXXXXX";

     FirebaseData firebaseData;

     Adafruit_NeoPixel leds(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

   // Current color values
      int redValue = 0;
      int greenValue = 0;
      int blueValue = 0;

       void setup() {
       Serial.begin(9600);
       WiFi.begin(ssid, password);

        while (WiFi.status() != WL_CONNECTED) {
          delay(500);
         Serial.print(".");
         }

     Serial.println(".......");
     Serial.println("WiFi Connected....IP Address:");
     Serial.println(WiFi.localIP());

     leds.begin();
  
     Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
     Firebase.reconnectWiFi(true);
      }


     void setLedColor() {
      for (int i=0; i < NUM_LEDS; i++) 
      leds.setPixelColor(i, leds.Color(redValue, greenValue, blueValue));
      leds.show();
     }


      void red(String route) {
       if (Firebase.getInt(firebaseData,route)) {
       if  (firebaseData.dataType() == "int") {
        int val = firebaseData.intData();
        if (val != redValue) {
         redValue = val;
         setLedColor();
         }
        }
       }
      }
    void green(String route){
      if (Firebase.getInt(firebaseData,route)) {
      if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != greenValue) {
        greenValue = val;
        setLedColor();
         }
       }
      }
     }

    void blue(String route){

     if (Firebase.getInt(firebaseData,route)) {
      if  (firebaseData.dataType() == "int") {
       int val = firebaseData.intData();
       if (val != blueValue) {
        blueValue = val;
        setLedColor();
         }
        }
     }
   }

    void init(){
    red("/lampara4/red");
    green("/lampara4/green");
    blue("/lampara4/blue"); 
     }

    void loop() {
    init();
    }

如果我正确理解了您的问题,您可以通过将要设置为按引用参数调用的颜色变量传递来做到这一点,如下所示:

  void setRGB(String route, int &colorValue) {
   if (Firebase.getInt(firebaseData,route)) {
   if  (firebaseData.dataType() == "int") {
    int val = firebaseData.intData();
    if (val != colorValue) {
     colorValue = val;
     setLedColor();
     }
    }
   }
  }

然后你可以调用 setRGB 来设置 redValue 等,如下所示:

setRGB("/lampara4/red", redValue);
setRGB("/lampara4/green", greenValue);
setRGB("/lampara4/blue", blueValue);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM