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

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

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

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

C++

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

Leap Motion

Leap Motionは、Leap Motionによって開発、販売している、手のジェスチャーでパソコンを操作できるデバイスです。

Arduino

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

Q&A

解決済

1回答

3160閲覧

LeapMotionから読み取ったデータをシリアルで送信したい

tetolist

総合スコア13

Visual Studio

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

C++

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

Leap Motion

Leap Motionは、Leap Motionによって開発、販売している、手のジェスチャーでパソコンを操作できるデバイスです。

Arduino

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

0グッド

0クリップ

投稿2018/10/15 11:28

LeapMotionから読み取ったデータをシリアルで送信したい

Visual Studio Express 2017で、こちらのサイト(http://sssignal.web.fc2.com/column/column17.html)を参考に、LeapMotionで読み取った手の座標位置データをシリアル通信でArduinoへ送信するプログラムを作っています。
現在、コーディングしたプログラムを実行した結果、2つのエラーが生じています。
発生しているエラーメッセージは以下の2つです。
C++初心者のため初歩的なエラーかもしれませんが、
どのように対処すればいいか教えていただけると幸いです。
お手数をおかけしますが、よろしくお願いします。

発生している問題・エラーメッセージ

E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません。 LeapSample01\Sample.cpp 64 C2664 'int sendmessage(HANDLE,char *,char *)': 引数 2 を 'const char [2]' から 'char *' へ変換できません。 leapsample01\sample.cpp 64

該当のソースコード

C++

1#include <iostream> 2#include "Leap.h" 3using namespace Leap; 4#include <stdio.h> 5#include <stdlib.h> 6#include <windows.h> 7#include <tchar.h> 8 9//通信ポート番号の設定。PCの環境に合わせて、最後の数値を書き換える 10#define TARGET_PORT _T("\\.\COM3") 11//送受信バッファのサイズ 12#define BUFF_SZ (64) 13 14HANDLE hCom; 15 16int sendmessage(HANDLE hCom, char *wbuf, char *rbuf); 17HANDLE make_handle(); 18 19class SampleListener : public Listener { 20private: 21 char rbuf[BUFF_SZ]; 22 char wbuf[BUFF_SZ]; 23public: 24 virtual void onInit(const Controller&); 25 virtual void onConnect(const Controller&); 26 virtual void onDisconnect(const Controller&); 27 virtual void onExit(const Controller&); 28 virtual void onFrame(const Controller&); 29 virtual void onFocusGained(const Controller&); 30 virtual void onFocusLost(const Controller&); 31 virtual void onDeviceChange(const Controller&); 32 virtual void onServiceConnect(const Controller&); 33 virtual void onServiceDisconnect(const Controller&); 34}; 35 36void SampleListener::onInit(const Controller& controller) { 37 std::cout << "Initialized" << std::endl; 38} 39 40void SampleListener::onConnect(const Controller& controller) { 41 std::cout << "Connected" << std::endl; 42} 43 44void SampleListener::onDisconnect(const Controller& controller) { 45 // Note: not dispatched when running in a debugger. 46 std::cout << "Disconnected" << std::endl; 47} 48 49void SampleListener::onExit(const Controller& controller) { 50 std::cout << "Exited" << std::endl; 51} 52 53void SampleListener::onFrame(const Controller& controller) { 54 // Get the most recent frame and report some basic information 55 const Frame frame = controller.frame(); 56 if (!frame.hands().isEmpty()) { 57 // Get the first hand 58 const Hand hand = frame.hands()[0]; 59 60 // Get the hand's sphere radius and palm position 61 // std::cout << hand.palmPosition()[0] << std::endl; 62 sprintf_s(wbuf, "%d", (int)hand.palmPosition()[0]); 63 sendmessage(hCom, wbuf, rbuf); 64 sendmessage(hCom, "e", rbuf); 65 //std::cout << "wbuf:"; 66 std::cout << wbuf << std::endl; 67 //std::cout << "rbuf:"; 68 //std::cout << rbuf << std::endl; 69 } 70} 71 72void SampleListener::onFocusGained(const Controller& controller) { 73 std::cout << "Focus Gained" << std::endl; 74} 75 76void SampleListener::onFocusLost(const Controller& controller) { 77 std::cout << "Focus Lost" << std::endl; 78} 79 80void SampleListener::onDeviceChange(const Controller& controller) { 81 std::cout << "Device Changed" << std::endl; 82 const DeviceList devices = controller.devices(); 83} 84 85void SampleListener::onServiceConnect(const Controller& controller) { 86 std::cout << "Service Connected" << std::endl; 87} 88 89void SampleListener::onServiceDisconnect(const Controller& controller) { 90 std::cout << "Service Disconnected" << std::endl; 91} 92 93//////////////////////////////////////////////////////////////// 94// ・VS-RC003/HVによるシリアル通信プログラムサンプル 'SerialSample.cpp' 95// (c)Vstone 96// 97// 本ソースはMicrosoft Visual C++(VC6.0以降)用です。 98// それ以外の開発環境をご利用の場合は、通信処理部分等をお使いの環境に応じて書き換えてください。 99// 100// また、'TARGET_PORT'で定義されたシリアルポート番号を、お使いのPCの環境に応じて書き換えてください。 101// 102//////////////////////////////////////////////////////////////// 103 104 105//////////////////////////////////////////////////////////////// 106// main関数 107//////////////////////////////////////////////////////////////// 108 109int main() 110{ 111 hCom = make_handle(); 112 char rbuf[BUFF_SZ], wbuf[BUFF_SZ]; 113 // Create a sample listener and controller 114 SampleListener listener; 115 Controller controller; 116 117 // Have the sample listener receive events from the controller 118 controller.addListener(listener); 119 120 //通信ハンドルの取得・設定に失敗していたらプログラムを終了する 121 if (hCom == INVALID_HANDLE_VALUE) return 0; 122 123 //VS-RC003の制御をコントローラからシリアル通信に切り替える 124 printf("VS-RC003をシリアル通信より制御します。\n\n"); 125 sprintf_s(wbuf, "e"); 126 127 //メッセージの送受信。通信が成功しなかったらプログラムを終了 128 if (sendmessage(hCom, wbuf, rbuf)) { 129 CloseHandle(hCom); 130 return 0; 131 } 132 133 // Keep this process running until Enter is pressed 134 std::cout << "Press Enter to quit..." << std::endl; 135 std::cin.get(); 136 137 //取得したハンドルを閉じる 138 CloseHandle(hCom); 139 140 // Remove the sample listener when done 141 controller.removeListener(listener); 142 143 return 0; 144} 145 146//////////////////////////////////////////////////////////////// 147// sendmessage関数 148// メッセージを送受信する関数。 149// 150// ・引数 151// HANDLE hCom 通信に使用するハンドル 152// char *wbuf 送信メッセージバッファへのポインタ 153// char *rbuf 受信メッセージバッファへのポインタ 154// 155// ・戻り値 156// 0 メッセージの送受信に成功 157// 1 メッセージの送信に失敗 158// 2 メッセージの受信に失敗 159// 3 メッセージの送受信に失敗 160//////////////////////////////////////////////////////////////// 161 162int sendmessage(HANDLE hCom, char *wbuf, char *rbuf) 163{ 164 165 BOOL werr = FALSE, rerr = FALSE; 166 DWORD wn = 0, rn = 1; 167 int i = 0, cr_num = 0; 168 169 //メッセージの送信 170 if (!WriteFile(hCom, wbuf, (int)strlen(wbuf), &wn, NULL)) werr = TRUE; 171 172 return (werr << 1) | rerr; 173 174} 175 176 177//////////////////////////////////////////////////////////////// 178// make_handle関数 179// 通信ハンドルを取得する関数。 180// 181// ・戻り値 182// INVALID_HANDLE_VALUE 通信ハンドルの取得・設定に失敗 183// INVALID_HANDLE_VALUE以外 取得したハンドル 184//////////////////////////////////////////////////////////////// 185 186HANDLE make_handle() 187{ 188 HANDLE hCom = INVALID_HANDLE_VALUE; 189 DCB stDcb; 190 COMMTIMEOUTS cto; 191 192 //シリアルポートのハンドルを取得 193 hCom = CreateFile(TARGET_PORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, 194 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL); 195 196 //シリアルポートのハンドルの取得に失敗したら戻る 197 if (hCom == INVALID_HANDLE_VALUE) return INVALID_HANDLE_VALUE; 198 199 200 //シリアルポートの通信設定の作成 201 //VS-RC003/HVの場合、ボーレートは115200bps、バイトサイズは8、パリティビット無し、ストップビットは1となる 202 memset(&stDcb, 0, sizeof(DCB)); 203 204 stDcb.BaudRate = CBR_115200; 205 stDcb.fParity = 1; 206 stDcb.ByteSize = 8; 207 stDcb.Parity = NOPARITY; 208 stDcb.StopBits = ONESTOPBIT; 209 stDcb.EofChar = 26; 210 211 //シリアルポートの通信設定の更新 212 if (SetCommState(hCom, &stDcb) == FALSE) { 213 CloseHandle(hCom); 214 return INVALID_HANDLE_VALUE; 215 } 216 217 //タイムアウトの設定の作成 218 memset(&cto, 0, sizeof(COMMTIMEOUTS)); 219 cto.ReadTotalTimeoutConstant = 100; 220 cto.WriteTotalTimeoutConstant = 200; 221 222 //タイムアウトの設定の更新 223 if (SetCommTimeouts(hCom, &cto) == FALSE) { 224 CloseHandle(hCom); 225 return INVALID_HANDLE_VALUE; 226 } 227 228 return hCom; 229}

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず、
sendmessage(hCom, (char*)"e", rbuf);
としとけばエラーはなくなるかと

投稿2018/10/15 11:57

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問