Arduinoをはじめよう Example 04

回路変わります。

まずは上から
image

つぎは横から
image

本日から analogWrite() 使います。

analogWrite() は 0 から 255 の引数を取ります。

  • 0 で消える
  • 128 で半分の明るさ
  • 255 で明るい

明るさが分かるように。
1秒待ちます。

const int LED = 3;
int i = 0;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  analogWrite(LED, 0);
  delay(1000);
  analogWrite(LED, 128);
  delay(1000);
  analogWrite(LED, 255);
  delay(1000);
}


例題どおりスリープランプです

delay() 時間を random() にしました

const int LED = 3;
int i = 0;
int d = 0;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  
  //d = 5;
  d = random(1, 5);
  
  for(i = 0; i < 255; i++) {
    analogWrite(LED, i);
    delay(d);
  }
  
  for(i = 255; i > 0; i--) {
    analogWrite(LED, i);
    delay(d);
  }

}

Arduinoをはじめよう Example 03 C

本日もデバウンシング。
そしてデバウンシング最後です。

const int LED = 13;
const int BTN = 7;

int val = 0;
int stat = 0;
int old = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (old == LOW && val == HIGH) {
    stat = 1 - stat;
    delay(10);
  }
  
  old = val;
  
  if (stat == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

ほんの少し待つことで、
スイッチの誤作動が防げます。

delay(10);

でもまだ10回に1回ぐらい
失敗してる。

Arduinoをはじめよう Example 03 B

本日はデバウンシング

回路は同じ

image

コード変更のみ

const int LED = 13;
const int BTN = 7;

int val = 0;
int stat = 0;
int old = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (old == LOW && val == HIGH) {
    stat = 1 - stat;
  }
  
  old = val;
  
  if (stat == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

スイッチの前後は次のように分かれる

  • LOW LOW スイッチは押されてない
  • HIGH HIGH スイッチが押しっぱなし
  • LOW HIGH スイッチが押された
  • HIGH LOW スイッチが離された

押されてない(LOW)>押された(HIGH)の時だけステータスを変える

  if (old == LOW && val == HIGH) {
    stat = 1 - stat;
  }

たしかにスイッチのON/OFFによく追随する。
ただ、この動画だと一回ミスが起きる。

それは、
スイッチが押されるか押されないかの
ギリギリのところで、
HIGH LOW HIGH LOW となってるから

Arduinoをはじめよう Example 03 A

回路は同じ。
スイッチを押すと点灯し続け、
もう一度押すと消灯するように、
コードを書きかえた。

image

スイッチを押すごとに点灯し消灯する

    const int LED = 13;
    const int BTN = 7;
    
    int val = 0;
    int stat = 0;
    
    void setup() {
      pinMode(LED, OUTPUT);
      pinMode(BTN, INPUT);
    }

    void loop() {
      val = digitalRead(BTN);
  
      if (val == HIGH) {
        if (stat == 0) {
          digitalWrite(LED, HIGH);
          stat = 1;
        } else {
          digitalWrite(LED, LOW);
          stat = 0;
        }
      }
    }

stat の on と off は次のように書けると

    stat = 1 - stat

引き算を減らすためではなく、
状態を入れ替えるのに使うとは。

かっこいい。 覚えとこう。

書き直してみた

const int LED = 13;
const int BTN = 7;

int val = 0;
int stat = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (val == HIGH) {
    stat = 1 - stat;   
  }
  
  if (stat == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

何度か押すとスイッチが反応しなくなる

何度かボタンを押すうちに、聴かなくなる。

バウンシングと呼ばれる。
ボタンが押されてる間に、
ループが何回も回るため、
stat が激しく書き換わり発生。

Arduinoをはじめよう Example 02

ボタンが押されている間、LEDを点ける

const int LED = 13;
const int BTN = 7;

int val = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (val == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

スイッチを押すとLEDが点く。

なんで抵抗をはさむのか分からない。

スイッチとLEDがつながってない。
むかし電池と豆球をつないだのとちがう。

それからLEDと同時にARUDUINO上のLも点くんだね

写真を撮って分かったこと

  • LEDが点いた写真もほしいな。
  • 線はまとまりごとに同系色が分かりやすい。
  • 線のカーブもきれいに曲げたい。

抵抗はなんでつけるんだろうね

考えてみよう

  • 抵抗は7番とGNDあたりにある
  • 抵抗は電流を小さくする
  • スイッチ > 抵抗 > GND

もしかして抵抗がないと7番へ流れないのかな

水路とバルブの例えでイメージしてみた

  • GNDはとても傾斜が強い排水溝
  • とても流れやすい
  • 水門でせきとめられると
  • あふれだし7番へ流れ出す

抵抗はずしてみよう。

つぶれないか心配。

思ったとおりだー。
スイッチ押しても点かない。
わわわ、スイッチ離したらチカチカする。こわー

LEDが点くということは
7番へ電流が流れた
なんでだろう

こちら抵抗あり

押してると点く

仕事の進め方について。ミームの死骸を待ちながらより。

まだ"不完全な前提条件"の元で効率よく仕事を回すコツが掴めていない。

上司の言葉を借りれば「仕事には制限時間がある」ため、自分なりにやってみてあるポイントで切り上げて先輩や上司に質問、という流れが一番効率が良い。

加えて新卒第一期ということもあり、まっさらな新人に何から詰め込めばいいのか、という問題に対する社内コンセンサスが固まっていない(のではないかと予想)

わたしがなぜ記事を集めるのかというと、あまり人と話をしないからと思います。他人の経験を取り込んでいるのですね。先輩や友達に相談する感覚です。

Egretlistについて。ミームの死骸を待ちながらより

これだ。こーゆーのが欲しかった!

僕の思考をバラして晒して残すための場所

「この方法でずっと続けられるのか?」

「一カ所にまとめる」

僕は1年以上前からDigital記録媒体をEverNoteに統合している。

GTDの理屈に乗っ取ったモノ

このへんややこしいが、使いこなすとかなり強力になる(はず)。

Egretlistよいと。