2019年10月12日土曜日

Arduino Pro mini で LED をゆっくり光らせる。 

LEDってPWMで調光しても、いきなり光だすのでシリアルから、数字を入れてPWMを調光できるようにしてみました。
とあるサイトからシリアルから数字に変換するプログラミングを流用して9ピンのLEDを光らせてみました。
結果Dutyが1/255でもかなり光る感じです。
シリアルモニターは384の改行なしです。

int led = 9;           // the PWM pin the LED is attached to
void setup() {
  Serial.begin(38400);
    pinMode(led, OUTPUT);
  Serial.println("Send value from Serial Monitor");
}

void loop() {

  if (KICK_SERIAL())
  {
    long val;
    val = SERIAL_VAL();

    Serial.print("original value:");
         analogWrite(led, val);
    for (byte i = 0 ; i < 10 ; i++)
    {
      Serial.println(val);
      val -= 1;
      delay(100);
    }
    Serial.println();
   
  }
}


bool KICK_SERIAL() {
  bool flag = false;
  if (Serial.available() > 0)
  {
    flag = true;
    delay(20);
  }
  return flag;
}

long SERIAL_VAL() {

  byte data_size = Serial.available();

  byte buf[data_size], degree = 1;
  long recv_data = 0, dub = 1;
  bool minus = 0;

  for (byte i = 0 ; i < data_size ; i++)
  {
    buf[i] = Serial.read();

    if (buf[i] >= '0' && buf[i] <= '9') buf[i] -= '0';
    else {
      if (buf[0] == '-') minus = 1;
      else degree = 0;
    }
  }
  if (degree == 1) degree = data_size - minus;

  for (byte i = 0 ; i < degree ; i++)
  {
    recv_data += buf[(data_size - 1) - i] * dub;
    dub *= 10;
  }
  if (minus) recv_data *= -1;

  return recv_data;
}

0 件のコメント:

コメントを投稿