Обработка различных типов переменных как команд - PullRequest
0 голосов
/ 20 марта 2019

Я создаю эскиз Arduino, в котором я хочу общаться с моим Arduino для управления полосой neorgb с помощью adafruit, которая представляет собой полосу с 60 RGB светодиодами с каждым светодиодом.Я заставил его работать с простой конструкцией if, чтобы проверить, отправил ли я команду «off» для переключения всей полосы или отправил шестнадцатеричный код для определенного цвета.Это работает нормально, но теперь я хочу также уменьшить яркость полосы, моя функция затемнения каждого цветового компонента работает нормально, но мне нужен способ вызвать его с помощью команды.Моя проблема в том, что я не знаю, как я могу справиться с этим, если я отправил конкретную строку (в данном случае «выключено»), шестнадцатеричный цветовой код или процент для затемнения моей полосы.Также другой вопрос, почему мне нужно ввести «off» в последовательном мониторе, чтобы набросок повернул мою полосу.

Весь мой код выглядит так:

#include <Adafruit_NeoPixel.h>

//Vars
int stripPin = 6; //NeoPixel Strip Pin
int numberLED = 60; //How many LEDs?
int maxBrightness = 50; //maximum Brightness
String incomming;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(numberLED, stripPin, NEO_GRB + NEO_KHZ800);  

void setup() {
  // put your setup code here, to run once:
  strip.setBrightness(maxBrightness);
  strip.begin();
  strip.show();  //Clear Strip

  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {         //Listening for Commands
    incomming = Serial.readString();
    if(incomming == "off "){              //if command is "off", switch strip of
      setStripColor(0,0,0);
    }
    else{
      // Get rid of '#' and convert it to integer

      long number = (long) strtol( &incomming[1], NULL, 16);

      // Split them up into r, g, b values
      long r = number >> 16;
      long g = number >> 8 & 0xFF;
      long b = number & 0xFF;
      setStripColor(r,g,b);            //Set Color for whole Strip
      strip.show();
    } 
    Serial.println(incomming);
  }  

  delay(10);
}

int setStripColor(int redValue, int greenValue, int blueValue)  //Set Color for whole strip
{
   for(int i = 0; i  < numberLED; i++ ){
     strip.setPixelColor(i, redValue,greenValue,blueValue);
   }
}

int dim(int color, int dimVal) //Dim color to dimVal in percent
{
  color = color / 100 * dimVal; 
  return color;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...