ブログを引っ越しました。新しいブログは工房便り〜TSUBAKI GUITARS&LEATHERです。
前回の続きです。
LEDを点灯させるだけの単純なものを少し変更して、iPhoneからのメッセージ応じて動作を変えるようにしました。機能はLEDの点灯、液晶のバックライトの明るさ調整、液晶の背景色の変更。依然として単純ですけど・・・
LPC1114側のプログラムの中からI2Cに関連する部分の抜粋です。(mbedオンラインコンパイラーでコンパイルしました)
#include "mbed.h" #include "Adafruit_ST7735.h" I2CSlave slave(dp5, dp27); // LPC1114 SDA=dp5, SCL=dp27 DigitalOut led1(LED1); DigitalOut led2(LED2); Adafruit_ST7735 tft(dp2, NC, dp6, dp24, dp26, dp25); #define DEVICE_ADDR (0x20<<1) Serial pc(USBTX, USBRX); PwmOut bl(dp18); int bgColor; int textColor; void drawString(char *str) { ..... ..... } void led1_on() { ..... ..... } void led2_on() { ..... ..... } #define LED_REG 0x31 #define BL_REG 0x32 #define COLOR_REG 0x33 #define BUFF_SIZE 20 uint8_t mode = 0x00; int main() { char buff[BUFF_SIZE+1]; char msg[] = "OK!"; ..... ..... ..... slave.address(DEVICE_ADDR); pc.printf("Initializing TFT\n\r"); ..... pc.printf("TFT initialized\n\r"); // whileループの中がI2C通信処理 while(1) { int i = slave.receive(); switch(i) { case I2CSlave::ReadAddressed: slave.write(msg, strlen(msg)+1); break; case I2CSlave::WriteGeneral: slave.read(buff, BUFF_SIZE); pc.printf("Read General: %s\n\r", buff); break; case I2CSlave::WriteAddressed: slave.read(buff, BUFF_SIZE); pc.printf("Read Address: %s\n\r", buff); mode = buff[0]; switch(mode) { case LED_REG: if(buff[1] == '0') { led1_on(); // LED1を点灯 } else { led2_on(); // LED2を点灯 } break; case BL_REG: float val = atof(&buff[1]); bl = val; // バックライトの明るさを設定 break; case COLOR_REG: bgColor = atoi(&buff[1]); tft.fillScreen(bgColor); // 背景色で塗りつぶし if(led1) { led1_on(); } else { led2_on(); } break; default: break; } break; } // 読み込みバッファをクリア for(int i = 0; i <= BUFF_SIZE; i++) { buff[i] = 0; } } }
iPhone側のI2Cに関連する部分の抜粋です。
// LEDスイッチ - (IBAction)led:(id)sender { UISwitch *sw = sender; uint8_t bytes[2] = {'1', sw.on ? '1' : '0'}; [Konashi i2cStartCondition]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cWriteData:[NSData dataWithBytes:bytes length:2] address:0x20]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cStopCondition]; [NSThread sleepForTimeInterval:0.01]; } // バックライトスライダー - (IBAction)backlight:(id)sender { UISlider *slider = sender; char buff[10]; buff[0] = 0x32; sprintf(&buff[1], "%.2f", slider.value); uint8_t len = strlen(buff); [Konashi i2cStartCondition]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cWriteData:[NSData dataWithBytes:buff length:len] address:0x20]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cStopCondition]; [NSThread sleepForTimeInterval:0.01]; } // ColorPickerから色を選んだ時に呼ばれるメソッド - (void) pickedColor:(UIColor *)color { uint16_t col = [color color565]; // UIColorのカテゴリメソッドを追加 char buff[10]; buff[0] = 0x33; sprintf(&buff[1], "%d", col); uint8_t len = strlen(buff); [Konashi i2cStartCondition]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cWriteData:[NSData dataWithBytes:buff length:len] address:0x20]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cStopCondition]; [NSThread sleepForTimeInterval:0.01]; }
面白いですね。
Koshianを2個追加購入しました。WICEDデベロッパーを入手できたので今度これのファームウエアを書いてみようと思います。楽しみです。
仕上げに入れそうで入れないTelecasterタイプです。よ〜〜く見ると平滑でない部分があるので、真っ平らになるまで塗りと研ぎを繰り返してから仕上げ塗りです。
工房便り〜TSUBAKI GUITARS & LEATHER でリブログしてコメントを追加:
LPC1114に関する過去の記事です。
いいねいいね