ATtiny202 Pin assignment
Pin No
1 Vcc 電源プラス
2 PA6
3 PA7 PWM
4 PA1 PWM
5 PA2 PWM
6 UPDI スケッチ書き込み
7 PA3 PWM
8 Gnd 電源マイナス
回転点灯LEDの4つのスケッチを紹介します。それぞれ光り方が異なります。
それぞれのスケッチをCopy&PasteでIDEを使って書き込んでください。
2025.12.12 Shig
//*****************************************************************
// ATtiny202 LED チェイス(回転点灯)スケッチ
// 使用ピン: PA6, PA7, PA1, PA2, PA3
// 初期点灯時間: 200ms
// 順次点滅トレイルなし
// 2025.12.18 XRQTechLab
//*****************************************************************
unsigned int SetTime = 200; // 点灯時間(ms)
// LEDピンの配列(回転順)
const uint8_t ledPins[] = {PIN_PA6, PIN_PA7, PIN_PA1, PIN_PA2, PIN_PA3};
const uint8_t ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
void setup() {
// 各ピンを出力に設定
for (uint8_t i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // 初期状態は消灯
}
}
void loop() {
static uint8_t current = 0; // 現在点灯中のLEDインデックス
// 現在のLEDを点灯
digitalWrite(ledPins[current], HIGH);
delay(SetTime);
// 現在のLEDを消灯
digitalWrite(ledPins[current], LOW);
// 次のLEDへ移動
current++;
if (current >= ledCount) {
current = 0; // 最初に戻る
}
}
//***************************************************************************
// ATtiny202 LED チェイス(トレイル付き回転)
// 使用ピン: PA6, PA7, PA1, PA2, PA3
// 初期点灯時間: 200ms
// トレイルのついた回転
// 2025.12.08 XRQTechLab
//***************************************************************************
unsigned int SetTime = 200; // 点灯時間(ms)
// LEDピンの配列(回転順)
const uint8_t ledPins[] = {PIN_PA6, PIN_PA7, PIN_PA1, PIN_PA2, PIN_PA3};
const uint8_t ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
// フェードステップ数(大きいほど滑らか)
const uint8_t fadeSteps = 20;
void setup() {
// 各ピンを出力に設定
for (uint8_t i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
analogWrite(ledPins[i], 0); // 初期状態は消灯
}
}
void loop() {
static uint8_t current = 0; // 現在点灯中のLEDインデックス
// 現在のLEDを最大輝度に
analogWrite(ledPins[current], 255);
// 指定時間保持しながら徐々に減光
for (uint8_t step = 0; step < fadeSteps; step++) {
// 次のLEDを徐々に明るく
uint8_t next = (current + 1) % ledCount;
int brightnessNext = map(step, 0, fadeSteps - 1, 0, 255);
analogWrite(ledPins[next], brightnessNext);
// 現在のLEDを徐々に暗く
int brightnessCurrent = map(step, 0, fadeSteps - 1, 255, 0);
analogWrite(ledPins[current], brightnessCurrent);
delay(SetTime / fadeSteps);
}
// 次のLEDへ移動
current++;
if (current >= ledCount) {
current = 0;
}
}
//**********************************************************************
// ATtiny202 LED チェイス(トレイル付き回転)
// 使用ピン: PA7, PA1, PA2, PA3 (PWM対応)
// 初期点灯時間: 200ms
// PWM機能を付加し残像が強く残る、尾を引きような動き
// 2025.12.08 XRQTechLab
//***********************************************************************
unsigned int SetTime = 200; // 点灯時間(ms)
// LEDピンの配列(回転順)
const uint8_t ledPins[] = {PIN_PA7, PIN_PA1, PIN_PA2, PIN_PA3};
const uint8_t ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
// フェードステップ数(大きいほど滑らか)
const uint8_t fadeSteps = 20;
void setup() {
for (uint8_t i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
analogWrite(ledPins[i], 0); // 初期状態は消灯
}
}
void loop() {
static uint8_t current = 0; // 現在点灯中のLEDインデックス
// 現在のLEDを最大輝度に
analogWrite(ledPins[current], 255);
// フェード処理
for (uint8_t step = 0; step < fadeSteps; step++) {
uint8_t next = (current + 1) % ledCount;
// 次のLEDを徐々に明るく
int brightnessNext = map(step, 0, fadeSteps - 1, 0, 255);
analogWrite(ledPins[next], brightnessNext);
// 現在のLEDを徐々に暗く
int brightnessCurrent = map(step, 0, fadeSteps - 1, 255, 0);
analogWrite(ledPins[current], brightnessCurrent);
delay(SetTime / fadeSteps);
}
// 次のLEDへ移動
current++;
if (current >= ledCount) current = 0;
}
//*************************************************************************
// ATtiny202 LED チェイス(残像付き回転)
// 使用ピン: PA7, PA1, PA2, PA3
// 初期点灯時間: 200ms
//
// 2025.12.08 XRQTechLab
//*************************************************************************
unsigned int SetTime = 200; // 回転速度(ms)
// LEDピンの配列(回転順)
const uint8_t ledPins[] = {PIN_PA7, PIN_PA1, PIN_PA2, PIN_PA3};
const uint8_t ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
// 残像の長さ(過去何個のLEDを残すか)
const uint8_t trailLength = 3;
void setup() {
for (uint8_t i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
analogWrite(ledPins[i], 0); // 初期状態は消灯
}
}
void loop() {
static uint8_t current = 0;
// すべてのLEDを一度消灯
for (uint8_t i = 0; i < ledCount; i++) {
analogWrite(ledPins[i], 0);
}
// 残像を含めて点灯
for (uint8_t t = 0; t < trailLength; t++) {
int index = (current - t + ledCount) % ledCount; // 過去のLED
int brightness = 255 - (t * (255 / trailLength)); // 徐々に暗く
analogWrite(ledPins[index], brightness);
}
delay(SetTime);
// 次のLEDへ
current++;
if (current >= ledCount) current = 0;
}