Некорректные значения, возвращаемые из Array of Struct - Arduino - PullRequest
0 голосов
/ 28 ноября 2018

У меня возникла проблема, которую я задал здесь , но поскольку проблема несколько изменилась, как и код, я начинаю новый вопрос

Я пытаюсь читать и писатьзначения из массива структуры с помощью функции

void BreezeMapPixels(struct_displayType& mDisplayUnit, int breezeStrength)

Значения, которые я получаю из Serial.print, не те, которые хранятся в массиве.В частности, тот для endLed, который никогда не должен быть 0

Выход из последовательного

Начало модуля Breeze 8 End 0 Начало модуля Breeze 1 End 0 Начало модуля Breeze1 Конец 0 Бриз Модуль Начало 4 Конец 7

Они определены как

// Define each display's LED range
  {
    displayUnit[0].startLed=0;
    displayUnit[0].endLed=3;

    displayUnit[1].startLed=4;
    displayUnit[1].endLed=7;

    displayUnit[2].startLed=8;
    displayUnit[2].endLed=11;

    displayUnit[3].startLed=12;
    displayUnit[3].endLed=15;
  }

Также программа через некоторое время зависает.
Любая помощь в том, почему яЯ читаю неправильные значения будут оценены.


Полный код

/* **********************************
  Breeze
* *********************************/
// Designed to illuminate a 'map' of pixels, each of which randomly
// sometimes twinkles brighter and then back down to it's base color again.
//



/* **********************************
  Start of Code
* *********************************/
enum { SteadyDim, GettingBrighter, GettingDimmerAgain };


void InitPixelStates(struct_displayType& mDisplayUnit)
{
  for ( uint16_t i = mDisplayUnit.startLed; i <= mDisplayUnit.endLed; i++) {
    leds[i]=BASE_COLOR;
  }
}

void BreezeMapPixels(struct_displayType& mDisplayUnit, int breezeStrength)
{
  Serial.println("Breeze Module");
  Serial.print("Start ");
  Serial.print(mDisplayUnit.startLed);
  Serial.print(" End " );
  Serial.println(mDisplayUnit.endLed);


  for ( uint16_t i = mDisplayUnit.startLed; i <= mDisplayUnit.endLed; i++) {
    Serial.print(" pixel state " );
    Serial.println(mDisplayUnit.pixelState[i] );
    Serial.println(GettingBrighter);
    Serial.println(GettingDimmerAgain);
    Serial.println(SteadyDim);
    if ( mDisplayUnit.pixelState[i] == SteadyDim) {
      // this pixels is currently: SteadyDim
      // so we randomly consider making it start getting brighter
      leds[i]=BASE_COLOR;
      if ( random8() < breezeStrength) {
        mDisplayUnit.pixelState[i] = GettingBrighter;

      }

    } else if ( mDisplayUnit.pixelState[i] == GettingBrighter ) {
      Serial.println("Brighter " + i);
      // this pixels is currently: GettingBrighter
      // so if it's at peak color, switch it to getting dimmer again
      if ( leds[i] >= PEAK_COLOR ) {

        mDisplayUnit.pixelState[i] = GettingDimmerAgain;
      } else {
        // otherwise, just keep brightening it:
        leds[i] += DELTA_COLOR_UP;
      }

    } else { // getting dimmer again
      Serial.println("Dimmer " + i);
      // this pixels is currently: GettingDimmerAgain
      // so if it's back to base color, switch it to steady dim
      if ( leds[i] <= BASE_COLOR ) {

        leds[i] = BASE_COLOR; // reset to exact base color, in case we overshot
        mDisplayUnit.pixelState[i] = SteadyDim;
      } else {
        // otherwise, just keep dimming it down:
        leds[i] -= DELTA_COLOR_DOWN;

      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...