質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

2回答

1291閲覧

カンマ区切りの文字データを数値に変更したい

tsu_ka

総合スコア0

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2022/12/17 23:42

前提

エクセルのdata streamerを利用してarduinoにシリアル値が送られて
来て,文字データを取得して,エクセルの入力へ文字を出力する所までは
確認できました。
その文字データを利用して3つのLEDをanalogWriteで
光らせたいのです。

例としてエクセルのdata streamerの出力
CH1 5 CH2 90 CH3 250 をそれぞれ入力すると
送られて来たシリアル値は,以下のように配列に入ります。
最後は\nが送られるようです。

dat[0]='5' dat[1]=',' dat[2]='9' dat[3]='0'
dat[4]=',' dat[5]='2' dat[6]='5' dat[7]='0'
dat[8]=',' dat[9]=',' dat[10]=',' dat[11]=','
dat[12]=',' dat[13]=',' dat[14]=',' dat[15]=','
dat[16]='\n'

実現したいこと

カンマで区切られて送られてきた文字を
整数に変換して配列に入れたいのですが
やり方が分からないので教えて頂きたい
です。

d[0]=5 d[1]=90 d[2]=250

analogWrite( 9,d[0]);
analogWrite(10,d[1]);
analogWrite(11,d[2]);

該当のソースコード

Arduino

1ソースコード 2```// ----------------------------------------- 3// EXCEL Arduino SERIAL 4// ----------------------------------------- 5const int Max=60; 6char data[Max]; 7char num=0; 8int dataIn=0; 9 10void setup(){ 11 Serial.begin(9600); 12 pinMode(9,OUTPUT); 13 pinMode(10,OUTPUT); 14 pinMode(11,OUTPUT); 15} 16 17void loop(){ 18 if(Serial.available()>0){ 19 dataIn = Serial.read(); 20 data[num] = dataIn; 21 num++; 22 if(dataIn == 10){ // 10 == "\n" 23 for(int i=0; i<=num-1; i++){ 24 Serial.print(data[i]); 25 } 26 num = 0; 27 dataIn = 0; 28 for(int i=0; i<=Max-1; i++){ 29 data[i] = 0; 30 } 31 } 32 } 33} 34 35 36

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsu_ka

2022/12/18 00:07

初めての投稿で申し訳ありませでした。 いろいろと調べてカンマをif文で判断して文字を結合することができないのかやってみたのですが, 分からなかったので投稿しました。 ご指摘ありがとうございます。以降気を付けたいと思います。
guest

回答2

0

お勉強のためには自分で一文字ずつ処理というのをやってみることも大事ですが、
それはそれとして目的を達成するためにはどんな方法があるか、調べてとりあえずなんとかする、というチカラも大事です。

例えばGoogleで'arduinoのシリアル受信でカンマ区切りの数値を受信する'をキーに検索すれば、今日の時点ではhttps://kougaku-navi.hatenablog.com/entry/2021/10/04/155038 のようなサイトがトップでヒットしたりするわけですよ。

投稿2022/12/18 12:35

編集2022/12/18 12:37
thkana

総合スコア7610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  1. 送られてきた文字列を改行コードを区切りとして文字列として取り出す
  2. その文字列をコンマで区切って、そこまでの文字列を取り出す
  3. 取り出した文字列を数値変換、配列に格納
  4. 文字列が尽きるまで2までループ
  5. 送られるデータが尽きるまで1までループ

という手順となります。がんばってコードを組んでみてください

投稿2022/12/18 00:03

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問