DotStarのライブラリを作ったよ。

DotStarのライブラリを作ったよ。

Tags
Published
May 31, 2019
日付5/31

DotStarのライブラリを作ったよ。

ライブラリを作りました。今回はインスタンスが生成された時に変数の配列の数を決定するっていうのをやってみたかったのでやってみました。ネットで調べたりしてやっとできたのが嬉しかったです。
//LGDotStar.h #ifndef LGDOTSTAR_H #define LGDOTSTAR_H #define LED_FREQ 800000 // spi #include "mbed.h" class LGDotStar { public: LGDotStar(PinName mosi,PinName sck,uint8_t lednumber); void set(uint8_t r,uint8_t g,uint8_t b,uint8_t n); void write(); void write(uint8_t groval); private: SPI spi; uint8_t *red; uint8_t *green; uint8_t *blue; uint8_t led_num; }; #endif LGDotStar.cpp #include "LGDotStar.h" LGDotStar::LGDotStar(PinName mosi,PinName sck,uint8_t n) : spi(mosi,NC,sck){ spi.frequency(LED_FREQ); red = new uint8_t[n]; green = new uint8_t[n]; blue = new uint8_t[n]; led_num = n; for (size_t i = 0; i < led_num; i++) { red[i] = 0; green[i] = 0; blue[i] = 0; } write(); } void LGDotStar::set(uint8_t r,uint8_t g,uint8_t b,uint8_t n){ red[n] = r; green[n] = g; blue[n] = b; } void LGDotStar::write(){ uint8_t i; // start frame for (i = 0; i < 4; i++) { spi.write(0); } for (i = 0; i < led_num; i++) { spi.write(255); spi.write(blue[i]); // B spi.write(green[i]); // G spi.write(red[i]); // R } // end frame for(i = 0; i<4; i++) { spi.write(1); } } void LGDotStar::write(uint8_t groval_brightness ){ // groval_brightness(0~31) uint8_t i; // start frame for (i = 0; i < 4; i++) { spi.write(0); } for (i = 0; i < led_num; i++) { spi.write((7<<5)|groval_brightness); spi.write(blue[i]); // B spi.write(green[i]); // G spi.write(red[i]); // R } // end frame for(i = 0; i<4; i++) { spi.write(1); } }

今回のメイン,配列の要素数の決定について

まず宣言
uint8_t *red;

要素数の決定

red = new uint8_t[n];//nは要素数
以上です。ポイントは変数(実態になる予定のやつ)をポインターで宣言するところです。
そのあとにnewってのをします。これはポインタにしか使えない処理らしいです。
関係ないですけどgroval_brightnessを0~31で調整することによって光の強さを変えられます。
// サンプルプログラム #include "mbed.h" #include "LGDotStar.h" LGDotStar LED(D11,D13,4); int main(){ while (1) { LED.set(255,0,255,0); LED.set(255,255,255,1); LED.set(255,255,0,2); LED.set(0,255,255,3); LED.write(31); } }
普通に使いやすそうです。それでは。

Loading Comments...