Arduino-PCの接続はUSBシリアルを使う。どうやってリセットしているかというと、リセットボタンもあるが実際はそのボタンはあまり使われずにCOMを開くとDTRをLに、COMを閉じるとDTRをHにすることでリセットをかけている。
ATmega-DTR間に1μのコンデンサと10kの抵抗を挟む。
トランジスタ使い方(STA472A)
1 or 10はVCCにつなぐ
2,4,6,8はArduino側、3,5,7,9はLED側につなぐが、このトランジスタにはベース抵抗が入っていないのでArduino側に1kΩの抵抗を挟む
半田付けについて
まず半田付けをする前に回路図を紙に書くなり、ブレッドボードの写真を撮っておくなりすること
マトリクスLEDを使うにあたって、libraryを作成した
まず、マトリクスLEDのpin番号とArduinoの番号を対応させる(なるべくわかりやすく)
pixelは配列で考えた方がわかりやすいのでpixcel[8][8]というのを作って、pixelの色は0-7で表す
RGBを二進数で表現することで考えやすくなる
color 0 1 2 3 4 5 6 7 R 0 1 0 1 0 1 0 1 G 0 0 1 1 0 0 1 1 B 0 0 0 0 1 1 1 1
マトリクスLEDを制御するのにDisplayMatorixという関数を定義する
0(LOW)のとき光って、1(HIGH)のとき消える
例えばpixel[0][0]が光っていたとする。
pixel[1][1]を光らせたいとなった時に、まず2行目を全て1にする(PinRow[1]をHIGH)
次に1列目から8列目まで順番に見ていく。
pixel[1][1]と001の論理積が1ならPinColR[1]をLOW、0ならPinColR[1]をHIGH
pixel[1][1]と010の論理積が1ならPinColG[1]をLOW、0ならPinColG[1]をHIGH
pixel[1][1]と100の論理積が1ならPinColB[1]をLOW、0ならPinColB[1]をHIGH
そしてPinRow[1]をLOWにする
最後にrowに1足して同じことを繰り返す。
このDisplayMatorix関数はMsTimer2を使って5msごとに呼び出す
#include "MsTimer2.h" ArduinoMega Pin Assignments 1 2 3 4 5 6 7 8 Row 20 21 22 23 24 25 26 27 Col(R) 28 29 30 31 32 33 34 35 Col(G) 36 37 38 39 40 41 42 43 Col(B) 44 45 46 47 48 49 50 51 int PinRow[] = {20, 21, 22, 23, 24, 25, 26, 27}; int PinColR[] = {28, 29, 30, 31, 32, 33, 34, 35}; int PinColG[] = {36, 37, 38, 39, 40, 41, 42, 43}; int PinColB[] = {44, 45, 46, 47, 48, 49, 50, 51}; char pixel[8][8]; // each pixel's color (0-7) color 0 1 2 3 4 5 6 7 R 0 1 0 1 0 1 0 1 G 0 0 1 1 0 0 1 1 B 0 0 0 0 1 1 1 1 int row; void setup() { int i; for (i = 20; i <= 51; i++) pinMode(i, OUTPUT); row = 0; pixel[0][0] = 7; pixel[3][3] = 4; MsTimer2::set(5, DisplayMatrix); MsTimer2::start(); } void loop() { // DisplayMatrix(); // delay(5); } // function for controling matrix LED, called every 5ms void DisplayMatrix() { int x, y; for (y = 0; y < 8; y++) digitalWrite(PinRow[y], HIGH); // digitalWrite(PinRow[row], LOW); // will make illusion for (x = 0; x < 8; x++){ if (pixel[x][row] & 0x01) digitalWrite(PinColR[x], LOW); else digitalWrite(PinColR[x], HIGH); if (pixel[x][row] & 0x02) digitalWrite(PinColG[x], LOW); else digitalWrite(PinColG[x], HIGH); if (pixel[x][row] & 0x04) digitalWrite(PinColB[x], LOW); else digitalWrite(PinColB[x], HIGH); } digitalWrite(PinRow[row], LOW); // row = row + 1; if (row == 8) row = 0; row = (row + 1) % 8; }
フルカラーマトリクスLEDを使用
(COL)1-8R,9-16G,21-28B (ROW)17-20,29-32
ROW側はたくさん電流(1列にRGB 8×3 )を流さなければいけないのでトランジスタアレイ(ダーリントン)を入れる。
入れないと壊れる可能性あり。
COL側は24個の抵抗を入れる。
ピン番号は左下から反時計回りに数える
トランジスタアレイは内部抵抗をもつので、トランジスタアレイを入れたところすなわちROW側には抵抗を入れなくて良い
研究室初めての顔合わせでした
研究室内の配線をごちゃごちゃ動かしました
まさか床下があんなことになっているとは
先輩方も先生もとてもいい人たちなので、これからの研究室生活楽しみです