Getting a value from a Struct Array ARDUINO

允我心安 提交于 2020-01-06 05:46:26

问题


I am having an issue retrieving the values stored in a Struct and have no idea why.

I am working on the Arduino IDE 1.8.7

In h file

// structure to hold each "display unit" settings
typedef struct {
  int displayState;
  int pixelState[];
  int startLed; // the first LED number EG: 8 if the previous display used 0-7
  int endLed; 
  int brightness;
  int saturation;

} struct_displayType;`

In setup

// display[0] is all leds
displayUnit[0].displayState=5;
displayUnit[0].brightness=255;
displayUnit[0].startLed=0;
displayUnit[0].endLed=NUM_LEDS;
displayUnit[0].saturation=127;

displayUnit[1].displayState=5;
displayUnit[1].brightness=255;
displayUnit[1].startLed=8;
displayUnit[1].endLed=15;
displayUnit[1].saturation=127;

In loop

BreezeMapPixels(displayUnit[0],SOFT_BREEZE); 

in Function

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

The Serial.println is not giving the values stored in the Struct. Please help me to find out the problem.

***************** Full Code ********************

void setup() { 

  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON, INPUT);
   FastLED.addLeds<CHIPSET, LED_PIN>(leds, NUM_LEDS);
 attachInterrupt(BUTTON,interruptRoutine,RISING);

    // serial debuging
     Serial.begin(9600);      // open the serial port at 9600 bps:

  InitPixelStates(displayUnit[0]);
    // Drying Grass
LEDcolor[0]=CHSV(22,187,217); //0xAAD93A;
LEDcolor[1]=CHSV(21,184,244); //0xC2F444;
LEDcolor[2]=CHSV(21,94,180);//0xDBF49A;
LEDcolor[3]=CHSV(16,94,200);//0xF4EE9A;
LEDcolor[4]=CHSV(12,94,220); //0xF4D99A;
//
//LEDcolor[2]=CHSV(21,94,244);//0xDBF49A;
//LEDcolor[3]=CHSV(16,94,244);//0xF4EE9A;
//LEDcolor[4]=CHSV(12,94,244); //0xF4D99A;


// Define each display's LED range

// display[0] is all leds
displayUnit[0].displayState=5;
displayUnit[0].brightness=255;
displayUnit[0].startLed=0;
displayUnit[0].endLed=NUM_LEDS;
displayUnit[0].saturation=127;

displayUnit[1].displayState=5;
displayUnit[1].brightness=255;
displayUnit[1].startLed=8;
displayUnit[1].endLed=15;
displayUnit[1].saturation=127;
  Serial.println("Setup Done");

  interruptMode=1;
}

#include "definitions.h"



void loop() {

 if(interruptMode==1){ //Soft Breeze
    //      Serial.println("Rest int");
//   restingColour(displayUnit[0]);
//   restingColour(displayUnit[1]);
BreezeMapPixels(displayUnit[0],SOFT_BREEZE); 
}
 if(interruptMode==2){ // Strong Breeze
           Serial.println("Breeze int");
//     restingBreeze(displayUnit[0]);
     Serial.println("Breeze int");
BreezeMapPixels(displayUnit[0],STRONG_BREEZE); 
}
//if(interruptMode==3){ // Fluro Flicker
//  fadeToBlack();
//
//}

    FastLED.show();  
    FastLED.delay(20);
}


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


void InitPixelStates(struct_displayType &mDisplayUnit)
{
  for ( uint16_t i = mDisplayUnit.startLed; i < mDisplayUnit.endLed; i++) {
  mDisplayUnit.pixelState[i] == SteadyDim;
  leds[i]=BASE_COLOR;
  Serial.println(i);
  }
//  memset( PixelState, sizeof(PixelState), SteadyDim); // initialize all the pixels to SteadyDim.
 // fill_solid( leds, NUM_LEDS, CRGB(0,0,0));
}

void BreezeMapPixels(struct_displayType &mDisplayUnit, int breezeStrength)
{
 // Serial.println("Breeze Module");
    Serial.println( &mDisplayUnit.startLed + mDisplayUnit.endLed);
 // for ( uint16_t i = 0; i < NUM_LEDS; i++) {
 for ( uint16_t i = mDisplayUnit.startLed; i < mDisplayUnit.endLed; i++) {
//Serial.println("Steady " + i);
    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;

      }
    }
  }
}

definitions.h

#include <FastLED.h>

#define NUM_LEDS 16
#define LED_PIN     6
#define CHIPSET     NEOPIXEL//WS2812B//WS2811
#define BRIGHTNESS  50
#define FRAMES_PER_SECOND 60


#define BUTTON  2 //trigger button
int interruptMode; // current mode - Testing only



// structure to hold each "display unit" settings
typedef struct {
  int displayState;
  int pixelState[];
  int startLed; // the first LED number EG: 8 if the previous display used 0-7
  int endLed; 
  int brightness;
  int saturation;

} struct_displayType;



// An array of the displays
struct_displayType displayUnit[30];

/* -------------
 * State types
 * -------------
 * 1 - resting
 * 2 - flickering
 * 3 - Warming up
 * 4 - Green
 * 5 - black
 */

/* **********************************
    Parameters for Breeze
 * *********************************/
// Parameters include: background color, peak color, and speed
// of brightening and dimming.
//

// Base green color
#define BASE_COLOR      CRGB(71, 94, 18)
// Peak green color to brighten up to
#define PEAK_COLOR      CRGB(201, 231, 131)


// Currently set to brighten up a bit faster than it dims down,
// but this can be adjusted.

// Amount to increment the color by each loop as it gets brighter:
#define DELTA_COLOR_UP   CRGB(6,6,6)

// Amount to decrement the color by each loop as it gets dimmer:
#define DELTA_COLOR_DOWN CRGB(3,3,3)


// Chance of each pixel starting to brighten up.
// 1 or 2 = a few brightening pixels at a time.
// 10 = lots of pixels brightening at a time.
#define SOFT_BREEZE 1
#define STRONG_BREEZE 5




CHSV LEDcolor[16];

来源:https://stackoverflow.com/questions/53493265/getting-a-value-from-a-struct-array-arduino

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!