びぼうろく

北海道の人。適当にもっさりまったり書きます。さくら荘のましろが好きです。アニメとかパソコンとか

Arduinoで詰まったメモ

Arduino unoで7segを点灯しようとして詰まった

arduino unoを買ったのはだいぶ前なんだが、弄る暇がなくてずっとほっとかれてた。
正月休みを利用してポチポチいじり始めたのがきっかけ

やりたいこと

Arduino で7segを光らせたい。

回路

ごく普通の7segを点灯させる回路です。
いずれダイナミック点灯にする予定なのでトランジスタでOn/Offします。
f:id:gari30:20170129005759p:plain:w300

ソースコード

つかなかったとき

webのリファレンスを参考に、標準ライブラリで書いた。
※7segの対応しているpinにa~g、dpをdefineしてあります。

void setup() {
  pinMode(PB0, OUTPUT);
  pinMode(PB1, OUTPUT);
  pinMode(seg_b, OUTPUT);
  pinMode(seg_c, OUTPUT);
  pinMode(seg_d, OUTPUT);
  pinMode(seg_e, OUTPUT);
  pinMode(seg_f, OUTPUT);
  pinMode(seg_g, OUTPUT);
  pinMode(seg_dp, OUTPUT);
}
void loop() {
  digitalWrite(PB0,LOW);
  digitalWrite(seg_a,HIGH);
  digitalWrite(seg_b,HIGH);
  digitalWrite(seg_c,HIGH);
  digitalWrite(seg_d,HIGH);
  digitalWrite(seg_e,HIGH);
  digitalWrite(seg_f,HIGH);
  digitalWrite(seg_g,LOW);
  digitalWrite(seg_dp,LOW);
}
ついたとき

標準ライブラリを無視して、レジスタトランジスタを駆動させた。

void setup() {
  DDRB = 0x03;
  DDRD = 0x0f;
  PORTB = 0x00;
}
void loop() {
  PORTB = 0x01;
  digitalWrite(seg_a,HIGH);
  digitalWrite(seg_b,HIGH);
  digitalWrite(seg_c,HIGH);
  digitalWrite(seg_d,HIGH);
  digitalWrite(seg_e,HIGH);
  digitalWrite(seg_f,HIGH);
  digitalWrite(seg_g,LOW);
  digitalWrite(seg_dp,LOW);
}

これで動いた。

結論

わざわざ動作の遅くなる標準ライブラリを使わないで、
picと同じようにレジスタで動かそうね。