У меня возникла проблема, которую я задал здесь , но поскольку проблема несколько изменилась, как и код, я начинаю новый вопрос
Я пытаюсь читать и писатьзначения из массива структуры с помощью функции
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;
}
}
}
}