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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

Q&A

解決済

1回答

279閲覧

Arduinoからの通信は1文字ずつしか受信できないのか?

One_of_Arthur

総合スコア81

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

0グッド

0クリップ

投稿2024/04/30 03:38

実現したいこと

ArduinoとWindows10のVisualStudio C++で通信を試みています。
Arduinoから続けた文字(文字列)を送信してC++で受信したいです。

発生している問題・分からないこと

Arduino IDEのシリアルモニタには送信した通りの文字列が表示されます。
なので、Arduinoのスケッチ側は問題ないと思います。
先頭の一文字だけならC++で受信に成功しましたが、文字列を受信する場合、それをループさせて受け取るしかないのでしょうか?
あるいは、文字列として受信する方法があったら教えてください。

該当のソースコード

C++

1char init; 2 :省略 3Com = ReadFile(arduino, &init, sizeof(init) * 3, &dwReceptionSize, NULL); 4 :省略 5std::cout << "Arduinoから受信した文字列は、" << init << std::endl; 6

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

変数「init」の型をint、char*、string、に変更してみましたがうまく表示されませんでした。

補足

Microsoft Visual Studio Community 2022
Version 17.9.6
VisualStudio.17.Release/17.9.6+34728.123

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

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

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

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

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

setoppu

2024/04/30 03:52

>char init; >Com = ReadFile(arduino, &init, sizeof(init) * 3, &dwReceptionSize, NULL); まぁお約束ですが…。 char型変数1個(1Byte)に文字『列』をどうやって収めるのかを、まずは考えましょうか。 char init[20] = { 0 }; Com = ReadFile(arduino, &init[0], sizeof(init), &dwReceptionSize, NULL); なら、20Byte以内で受け取れるでしょう。
guest

回答1

0

ベストアンサー

本質的に

それをループさせて受け取るしかない

です。シリアル(UART)通信は物理的に「1byte単位」の通信なので。

シリアルモニタには送信した通りの文字列が表示されます。

きっとそれは文字列を表示しているのではなく、文字を次々と表示しているのだと思います。

もちろん、1byteずつ受信したデータを関数の中で適宜まとめて返す、ということは考えられます。

なお、C/C++の知識は前提となりますので、しっかり勉強してください。

投稿2024/04/30 10:46

thkana

総合スコア7659

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

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

One_of_Arthur

2024/05/03 01:06

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問