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

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

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

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

解決済

熱電対の値のBLE通信("Adafruit Feather 32u4 Bluefruit LE"使用)

hrtkkbys
hrtkkbys

総合スコア0

Arduino

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

1回答

1評価

0クリップ

14閲覧

投稿2019/04/16 07:47

前提・実現したいこと

タッチセンサーを長押しした際に、BT通信されていれば熱電対(2セット)の値をBLEで送信するシステムを試作しています。

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

BT通信をせず、シリアル通信だけの場合は値が上手く読み取れています。
が、BT通信をさせると熱電対の値が2つとも"0.00"になってしまいます。

■ハードウェア構成
・マイコンボード: Adafruit Feather 32u4 Bluefruit LE
・熱電対モジュール: MAX31856搭載 熱電対アンプモジュール
・タッチセンサー: AT42QT1011 静電容量式タッチセンサ

該当のソースコード

ArduinoIDE

#include <SPI.h> #include "Adafruit_BLE.h" #include "Adafruit_BluefruitLE_SPI.h" #include "Adafruit_MAX31855.h" #define BLUEFRUIT_SPI_CS 8 #define BLUEFRUIT_SPI_IRQ 7 #define BLUEFRUIT_SPI_RST 4 #define MAXDO 14 #define MAXCS1 5 #define MAXCS2 6 #define MAXCLK 15 // initialize the Thermocouple Adafruit_MAX31855 thermocouple_1(MAXCLK, MAXCS1, MAXDO); Adafruit_MAX31855 thermocouple_2(MAXCLK, MAXCS2, MAXDO); // Constants const int TOUCH_BUTTON_PIN = 9; // Input pin for touch state const int LED_PIN = 13; // Pin number for LED // Global Variables char inByte = 0; int buttonState = 0; // Variable for reading button int val = 0; int time = 0; int once = 0; int lastVal=LOW; int touch; double c1,c2; Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); void setup() { Serial.begin(115200); ble.begin(true); //true => debug on, you can see bluetooth in the serial monitor. ble.echo(false); ble.factoryReset(); //Optional ble.setMode(BLUEFRUIT_MODE_DATA); pinMode(TOUCH_BUTTON_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop(){ val = digitalRead(TOUCH_BUTTON_PIN); if (val == HIGH) { /* スイッチが押されている(押され続けている) */ time++; lastVal=HIGH; delay(1); } else { if(lastVal==HIGH && !once){ //直前はHIGHだった、つまりスイッチが離された。しかも、長押し処理されていない=長押し時間まで押され続けられなかった=短押しが完了したところである if(time > 50){ //接点のバタつき(チャタリング)時間を超えて安定して押されていた touch = 0; } } lastVal=LOW; time = 0; once = 0; //もう一度送信できるように } if (time > 400) { //長押しif文 time = 401; if (!once) { touch = 1; once = 1; //連続で送信されないように thermoCouple(); //BLE送信前に値が出ているか確認用 bleSend(); } } } void bleSend() { if(ble.isConnected()){ thermoCouple(); Serial.print("100");Serial.print(","); //データ確認用 Serial.print("1");Serial.print(",");  //データ確認用 Serial.print(c1);Serial.print(","); //データ確認用 Serial.println(c2);           //データ確認用 ble.print("100");ble.print(","); ble.print("1");ble.print(","); ble.print(c1);ble.print(","); ble.println(c2); } } void thermoCouple() { c1 = thermocouple_1.readCelsius(); c2 = thermocouple_2.readCelsius(); Serial.print(c1);Serial.print(","); //データ確認用 Serial.println(c2);           //データ確認用 }

試したこと

■Serial.printの"c1"、"c2"は全て"0.00"
■テキスト情報の"1"、"100"はシリアル通信、BLE通信ともに正常に送信出来ている
■"ble.begin"を停止するとシリアル通信での"c1"、"c2"は正常な値が見られる

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

■特記事項なし

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2019/04/16 08:19

thermoCouple関数の中でデータを出力させてますが、そこでも0になってしまうんでしょうか
hrtkkbys
hrtkkbys

2019/04/16 08:22

ご回答ありがとうございます。 ご指摘の通り、thermoCouple関数の中でも"0"になってしまいます。 こちらも"ble\.begin"をコメントアウトすると正常値が確認できます。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Arduino

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