シリアルモニタからArduinoに数値を送る

記事内に広告が含まれています。
serial

arduinoのシリアルモニタでそのまま数値を入力しても、うまく値を読んでくれない。そこで、以下のようにすると0~32767までの整数値(int型なので)を読み取ることが出来る。

スケッチでは9番ピンにつないだLEDの明るさを、 シリアルモニタからの入力(0~255)に応じて変化させるスケッチ。

int num = 0;
int val = 0;
int input = -1;

void setup(){
  pinMode(9,OUTPUT);
  Serial.begin(9600);
}

void loop(){
  input = Serial.read();//0~32767
  
  if(input!=-1){
    if(input!=10){
      num = num*10+(input - 48);
    }else{
      val = num;
      num = 0;
      Serial.println(val);
    }
  }
  
  analogWrite(9,val);
}

負の数も扱いたいときは以下のようにする。 -32767~32767までの整数値を読み取る。

int sign = 1;
int num = 0;
int val = 0;
int input = -1;

void setup(){
  pinMode(9,OUTPUT);
  Serial.begin(9600);
}

void loop(){
  input = Serial.read();
  
  if(input!=-1){
    switch (input) {
      case 45:
        sign = -1;
        break;
      case 10:
        val = num*sign;
        num = 0;
        sign = 1;
        Serial.println(val);
        break;
      default:
        num = num*10+(input - 48);
    }
  }
  
  analogWrite(9,val);
}

コメント

  1. こいち より:

    マイコンにキーパッドを接続し、数字を3もしくは4桁打ち込んで、シリアルデータを作り、例えばデータA 1134、データB 455としたら、A+Bの値を、
    データC 847, データDを打ち込みC-Dの値をつくり シリアル>パラレル変換できればいいなあと思っております。

    何ができるか? AMやFMのラジオの周波数表示をしたいわけです。
    ラジオはスーパヘテロダイン方式を利用しており、受信周波数に対し中間周波数分を下限したものを局発として発振させて、ラジオの受信周波数に混合させれば、中間周波数に変換され、その後の復調・検波をしていくものでございます。