ATTiny402マイコンでLチカボードのマニュアル

- ## 商品概要
この基板は、Attiny402マイコンを使用してLEDを制御し、楽しむことを目的としています。
本資料は、マイコンプログラミングを気軽に試みたい方向けに作成されています。

こちらの商品は、余剰となった部品を有効に活用することで
在庫を効率的に管理し、価格を抑えた製品をお届けしています。
売れなかった商品の部品を有効活用ということです。

- ## 特長

プログラムを書き込み後は、CR2032電池でも楽しむことが可能です。
UPDIで書き込みする8ピンのマイコンです。
別途シリアル接続する機器が必要です。

- ## ハードウェアの主な仕様
　①制御マイコン:ATTINY402-SSNR
　②LED　5pcs

### 1. 回路図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/6fb6a362-10bb-6063-91cd-c51561c9d7a5.png)


このマイコンボードは、LEDを光らせることを目的としています。
各マイコンのピンに1つのLEDが対応しているので、簡単に制御することができます。
ぜひ気軽にトライしてみてください！

### 2. PCB図面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/756ba8c1-683f-d3d0-ec27-860181eba9b7.png)

基板に描かれた星の頂点には、D0、D1、D2、D3、D4とシルクで記載されています。
Arduino IDEでプログラムを作成する際には、この数字が端子名に対応しています。
シンプルなハードウェア構成なので、難しく考えずに意図した場所を簡単に光らせることができます。

### 3.プログラム例

**ボードマネージャーの選択**
megaTinyCoreボードを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/2bdb563a-7992-0669-4e61-d9077d0c2eac.png)

**マイコンの選択**
Attiny4x2/Attiny2x2　になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/1d5b9fc9-88de-4ca6-e44b-a5736cd841cf.png)

**書き込み装置の設定**
シリアルUPDIを選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/f284ac00-204b-e4ab-2d27-9dc1718861db.png)


**書き込み方法**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/dfb3f81d-8a27-06ba-04d6-a4605ea44810.png)
書き込み装置を使って書き込む　を選択します。

**サンプルプログラム1**

```c++
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(0, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}
```

### 書き込み結果

![IMG20241123152912~3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/91758e12-f118-e015-861b-a6b88bdfa3b1.jpeg)

D0のLEDが点滅しているのが確認できました。

### 使用した書き込み機

https://ssci.to/9875
- USB writer　to Board
- 5V　to 5v
- GND to GND
- UPDI to UPDI
シルクで書かれたピン名をつなぐだけで簡単に書き込みできますね！
お勧めです

**サンプルプログラム2**

```c++
int ledPins[] = { 0, 1, 2, 3, 4 };                                // LEDのピン番号
int delayTimes[] = { 300, 300, 200, 200, 100, 100, 50, 50, 50 };  // 各周目のオンタイム

void setup() {
  for (int i = 0; i < 5; i++) {
    pinMode(ledPins[i], OUTPUT);  // LEDピンを出力モードに設定
  }
}

void loop() {
  for (int j = 0; j < 9; j++) {
    for (int i = 0; i < 5; i++) {
      digitalWrite(ledPins[i], HIGH);  // LEDをオン
      delay(delayTimes[j]);            // オンのまま待機
      digitalWrite(ledPins[i], LOW);   // LEDをオフ
      delay(50);                       // オフのまま待機
    }
  }

  for (int i = 0; i < 4; i++) {  // 4回繰り返し
    for (int j = 0; j < 5; j++) {
      digitalWrite(ledPins[j], HIGH);  // LEDを全点灯
    }
    delay(500);  // 0.5秒待機

    for (int j = 0; j < 5; j++) {
      digitalWrite(ledPins[j], LOW);  // LEDを全消灯
    }
    delay(400);  // 0.4秒待機
  }
}
```
### プログラムの概要

このプログラムは、複数のLEDを順番に点灯させるとともに、全てのLEDを同時に点灯・消灯する動作を行います。

### プログラムの説明

 ```c++
int ledPins[] = { 0, 1, 2, 3, 4 };
```
各LEDが接続されているピン番号を配列に格納しています。

```c++
int delayTimes[] = { 300, 300, 200, 200, 100, 100, 50, 50, 50 };
```
各周回でLEDを点灯させる時間をミリ秒単位で配列に格納しています。
ここで徐々に点灯時間を短く指定しています。

### セットアップ
void setup() 関数内で、以下の設定を行います：
```c++
for (int i = 0; i < 5; i++) { pinMode(ledPins[i], OUTPUT); }
```

すべてのLEDピンを出力モードに設定します。

### ループ
void loop() 関数内で、以下の動作を繰り返します：

- 1.各LEDを順番に点灯・消灯

9周回にわたって、各LEDを設定された時間（delayTimes 配列）だけ点灯させ、その後50ミリ秒間消灯させます。

- 2.全てのLEDを同時に点灯・消灯

4回繰り返して、全てのLEDを0.5秒間点灯させ、その後0.4秒間消灯させます。


### 最後に
LEDの点灯・消灯は、DIGITAL端子をHIGH/LOWにするだけで簡単に制御できます。
光らせる順番を変えたり、光らせ方を工夫したりすることで、マイコンを使う楽しさをぜひ実感していただきたいと思います。
実際に試してみると、マイコンの操作がそれほど難しくないことに驚かれるはずです！