2016-12-31 49 views
3

我正在爲arduino構建一個均衡器,因此我在c編碼,我有以下問題,這肯定很容易解決,但我不是能夠找到解決方案,因爲我現在沒有用c編寫太多的代碼。 所以這是我想做的事情:Arduino草圖與多個NeoPixels(功能採取不同的NeoPixels)

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800); 
    ... 
Adafruit_NeoPixel strip14 = Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800); 

Adafruit_NeoPixel strips[14] = {strip1,strip2,strip3,strip4,strip5,strip6,strip7,strip8,strip9,strip10,strip11,strip12,strip13,strip14}; 

現在我有一個函數,它採用下列參數:

void set_band_ledx(Adafruit_NeoPixel stripx,uint32_t color, float value,float value_old) {...} 

,我想使用這樣的功能:

for(int i = 0;i<1;i++){ 
    set_band_ledx(strips[i],strip[i].Color(c1, c2, c3), value_l[i],value_l_old[i]); 
    } 

該功能本身的作品,如果我只用一個LED燈條, 我想問題是關於指針。該功能並沒有像這樣工作,我無法設法得到它的工作。 整個prorgram工作正常,如果我測試沒有條陣列。

那麼,我在哪裏以及如何使用指針? 感謝您的幫助!

+0

* Arduino *不是* C *。你應該有資格*根本不工作*在一點點細節:*什麼有效?什麼不?你嘗試了什麼?* - 事實上,只能猜測項目中可能出現的錯誤。 *警衛'我<1'是在越野車代碼中還是在工作中?* –

回答

1

當你做到這一點

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800); 
    ... 
Adafruit_NeoPixel strip14 = Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800); 

Adafruit_NeoPixel strips[14] = {strip1,strip2,strip3,strip4,strip5,strip6,strip7,strip8,strip9,strip10,strip11,strip12,strip13,strip14}; 

你佔據,而不是需要14內存相當於在內存2 * 14 = 28Adafruit_NeoPixel的。

這會更好:

Adafruit_NeoPixel strips[14] = { 
    Adafruit_NeoPixel(21, LEFT_BAND_1, NEO_GRB + NEO_KHZ800), 
    ... 
    Adafruit_NeoPixel(21, RIGHT_BAND_7, NEO_GRB + NEO_KHZ800) 
} 

而是由值

void set_band_ledx(Adafruit_NeoPixel stripx, uint32_t color, float value, float value_old) {...} 

傳遞stripx的你應該參考

void set_band_ledx(Adafruit_NeoPixel &stripx, uint32_t color, float value, float value_old) {...} 
0傳遞

而且,似乎沒有任何理由傳遞uint32_t color作爲單獨的參數,因爲顯然它存儲在stripx實例中:

set_band_ledx(strips[i],strip[i].Color(c1, c2, c3), value_l[i],value_l_old[i]); 

(雖然我可能是錯在這個沒有看到其餘代碼)。

+0

非常感謝,我想我會更加輕鬆地處理指針,當我更頻繁地再次執行它時! – Th3Fi3nD