Arduino 入門 番外編 18 【シリアルモニタで四則演算】

arduino-extra-edition-18-00 Arduino番外編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク

Arduino 入門
番外編 18
【シリアルモニタで四則演算】

こんにちは管理人のomoroyaです。

arduino 入門 番外編はarduinoの基本的なことを解説している記事です。

 

本記事は、Arduinoを使ってシリアルモニタで四則演算をするです。

Lesson 17 【map関数 まとめ】の解説でシリアルモニタから数値を入力して処理をすることでmap関数について理解しました。

 

その記事中でスケッチをかいた後にふと思ったんです。

シリアルモニタで送信されるデータは文字列。

数値に変換するためには、色々工夫が必要。

Lesson 17では、その辺の工夫に四苦八苦。

もっと簡単な方法が実はあるのでは?

 

シリアルポート用の関数ってどんなものがあるのか調べるか・・・。

テキスト、ネットなど色々調べてみると、Serial.xxxの関数は色々ありまして・・・。

その中の関数を使うことでシリアルモニタで送信した文字を数値に簡単に変換できそうです。

その関数を知らなかったので、Lesson17はプログラムで変換しましたが・・・。

Serial関数を調べてからスケッチ考えれば、もっと楽にできたなと。

まあ、関数使わなくても作れるぞっていうことでご了承ください。

 

管理人は、Lesson17のように関数を理解するときにシリアルモニタを使います。

結構、納得できるので便利です。

 

今回は、シリアルモニタに送信した文字をSerial関数を使って文字列に変換。

それだけだとつまらないので、ついでに四則演算もさせます。

 

管理人はプログラマーの専門家というわけではありません。

気が向いたときにテキストを開き、ネットを調べ自己学習。

管理人にとってはブログ記事が自己学習のノートです。

書くことによって頭の中が整理できる。

何よりも、忘れたときに見返せるってのが良い。

 

arduino自身のこと、スケッチ(コード、プログラム)を少しづつ理解して行きましょう。

いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

 

スポンサーリンク

Serial関数 文字列を数値に変換

Lesson17のような工夫をしなくても、簡単に文字列を数値に変換する関数がありました。

それが、こちら。

Serial.parseInt()
arduino.cc Reference ページ解説 → Serial.parseInt()

Referenceページは英語となります。
※arduino.ccのReferenceページですが一部日本語化されてきています。
そのうち日本語対応になるかも?

シリアルバッファから有効なlong型の整数値を戻す関数となります。

関数 説明
Serial.parseInt()
Serial.parseInt(lookahead)
Serial.parseInt(lookahead, ignore)
lookahead:下記3種指定可能
SKIP_ALL:数字、-符号以外全て無視(デフォルト)
SKIP_NONE:スキップされない
SKIP_WHITESPACE:タブ、スペース、改行、キャリッジリターンのみスキップ戻り値:整数値(long型)例 受信した文字列を数値に変換して変数に格納。
int val = Serial.patseInt();

 

Serial.parseInt() 関数 サンプルスケッチ1

まずは簡単に、文字列を数値に変換するのみのスケッチ。

Lesson 17では1文字ずつ、数字に変換し桁数をさらに認識させていました。

Serial.parseInt()を使うとたったこれだけです・・・。

しかも、「-」も認識してくれ至れり尽くせりです。

 

こちらがサンプルスケッチとなります。

//番外編 18-1 Serial.parseInt()関数
//文字列を数値に変換しシリアルモニタに表示するサンプルスケッチ
//https://omoroya.com/

void setup() {
  Serial.begin(9600); //データ転送レートを指定
}

void loop() {

  //受信データがある場合if内を処理
  if (Serial.available() > 0){
    long val = Serial.parseInt();    //文字列データを数値に変換
    Serial.print(val);               //valを表示
    Serial.println("");              //改行
  }
  
}

 

サンプルスケッチ1 実行結果

「ツール」 ⇒ 「シリアルモニタ」 を開きます。

適当な数値を入力してリターンもしくは送信ボタンを押せば結果が表示されます。

シリアルモニタは「改行なし」を選択してください。

改行なしを選択しないと改行も入力値として認識してしまいます。

 

下図は「12345」を入力後送信、「-12345」を入力後送信した結果です。

下図がシリアルモニタの実行結果。

arduino-extra-edition-18-01

 

プログラムとして工夫をしなくても、Serial.parseInt()関数で文字列を数字列に変換できています。

さらに、-も認識しているのがわかります。

 

Serial.parseInt() 関数 サンプルスケッチ2

続いて、四則演算させるサンプルスケッチです。
※2値の四則演算です。

 

Serial.parseInt()を使うと、これまた簡単にできてしまいます。

この関数、デフォルト設定で使うと数字と-符号以外は無視してくれるわけです。

例えば、123 + 23 と入力し送信。

上記の文字列を「123」と「+」と「23」と3つの塊として考えます。

上記の3つの塊をSerial.parseInt()と、Serial.read()で順番に変数に格納して計算させるだけです。

 

こちらがサンプルスケッチとなります。

//番外編 18-2 Serial.parseInt()関数
//シリアルモニタで四則演算するサンプルスケッチ
//https://omoroya.com/

long val1,val2,result;

void setup() {
  Serial.begin(9600); //データ転送レートを指定
}

void loop() {

  //受信データがある場合if内を処理
  if (Serial.available() > 0){
    
    val1 = Serial.parseInt();    //文字列データを数値に変換
    Serial.print(val1);          //一つ目の数字をシリアルモニタに表示
    
    char aop = Serial.read();    //四則演算用の文字の読み込み
    Serial.print(aop);           //四則演算の文字をシリアルモニタに表示
 
    val2 = Serial.parseInt();    //文字列データを数値に変換
    Serial.print(val2);          //2つ目の数字をシリアルモニタに表示
    Serial.println("=");         //"="表示後改行
    
    switch (aop){
      case '+' :
          result = val1 + val2;
          Serial.println(result ,DEC);   //加算と改行
          Serial.println("");            //改行
          break;
      
      case '-' :
          result = val1 - val2;
          Serial.println(result ,DEC);   //減算と改行
          Serial.println("");            //改行
          break;

      case '*' :
          result = val1 * val2;
          Serial.println(result ,DEC);   //乗算と改行
          Serial.println("");            //改行
          break;

      case '/' :
          result = val1 / val2;
          Serial.println(result ,DEC);   //除算と改行
          Serial.println("");            //改行
          break;
      }
      
  }
  
}

 

サンプルスケッチ2 実行結果

「ツール」 ⇒ 「シリアルモニタ」 を開きます。

適当な数値を入力してリターンもしくは送信ボタンを押せば結果が表示されます。

シリアルモニタは「改行なし」を選択してください。

改行なしを選択しないと改行も入力値として認識してしまいます。

 

結果は以下の計算をさせたものです。

「999+111]を入力後送信。

「999-111]を入力後送信。

「999*111]を入力後送信。

「999/111]を入力後送信。

下図がシリアルモニタの実行結果。

arduino-extra-edition-18-02

 

こちらもプログラムとして工夫をしなくても、Serial.parseInt()関数で文字列を数字列に変換。

変換後の数値を使って計算。

と上記2つの処理のみでスケッチができでしまいます。

 

まとめ

Arduino 入門 番外編 18 【シリアルモニタで四則演算】

いかがだったでしょうか?

 

シリアルモニタの文字列を関数を使うことで簡単に数値に変換。

その数値を使って処理をさせる。

番外編 17」のように、複雑なことをしなくても関数を使うことで簡単にできてしまいます。

プログラム初級者にとっては関数、とっても便利です。

 

次回「番外編 19」は【bit関数 まとめ】です。

Arduino 入門 番外編 19 【bit関数 まとめ】
本記事は、Arduinoで使用するbit関数についてです。bit関数はbitを操作する関数。例えば、2進数でb10000001(10進で129)という数値があったとします。この数値の3bit目を1にしたい。指定したbitを読み出したい。など…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編Arduino入門編2で使用しているUNOはAmazonにて購入可能です。

Arduino入門編では互換品を使用。

Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

Amazonでお得に買う方法

Amazonでお得に購入するならAmazon MastercardAmazonギフト券がおすすめです。

時期により異なりますが、様々なキャンペーンを実施しています。

\Amazonギフト券/
Amazonギフトカード キャンペーン

Amazon Mastercard お申込み
Amazon Mastercard 申し込み 

 

いずれの場合もプライム会員である方がお得!!

\Amazon Prime 30日間の無料会員を試す/
無料会員登録 

 

 

コメント

  1. ryo より:

    初arduinoで秋月のAE-ATMEGA-328 MINI買ったのですが、Lチカ用のLED周りは買い忘れて動作確認に困ってました。
    ちょうどいい方法がここにあったので感謝です。四則演算行けました

タイトルとURLをコピーしました