オブジェクト指向的 マルチLチカ ATTiny13 | Tamesuke-Goto Maker的Blog

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

以前書いた オブジェクト指向的Lチカを ATTiny13 を使って作りました。

試作品なのでバッファを入れていませんが、、、円高になったら基板起こしてクリスマス用に量産しようと思っているのだけど中々円高になりませんね。残念。

KiCadで回路は作ってあるのですが。

 

 

スケッチは以下になります。バイナリーで300バイトくらい、大分コンパクトです。

 

/*
  Multi Blink   ATTiny13
              
   PCINT5/A0/D5/RST |1---O---8| VCC
       PCINT3/A3/D3 |2       7| D2/A1/INT0/PCINT2
       PCINT4/A2/D4 |3       6| D1/PWM/PCINT1
                GND |4-------5| D0/PWM/A0/PCINT0
 
 */

#define LED1 3
#define LED2 4
#define LED3 1
#define LED4 2

struct led {
  char pin;   //  PIN No.
  bool on;   // ON/OFF status
  int cont;  // time count
  int ontime; // ON time (msec)
  int intval; // interval time (msec)
};

struct led led1={LED1,0,200,  800,1000};
struct led led2={LED2,0,400,  950,1350};
struct led led3={LED3,0,500, 1150,1450};
struct led led4={LED4,0,600, 1050,1550};

/*
 * LED Blink func.
 *
 */

void blinkled(struct led *myled)
{
  int pin=myled->pin;
  if(myled->cont++ == myled->ontime){
    digitalWrite(pin,false);
    myled->on=false;
    } else if(myled->cont >= myled->intval){
      digitalWrite(pin,true);
      myled->cont=0;
      myled->on=true;
    }
//  return myled->on;
}


void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop() {
   delay(1);
   blinkled(&led1);
   blinkled(&led2);
   blinkled(&led3);
   blinkled(&led4);
}