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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

Arduino

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

Q&A

解決済

2回答

1521閲覧

Seeeduino XIAOとDFPlayerを接続し、タクトスイッチを鳴らしたときに音声を再生させたい。

ksskyakcnnrk

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

Arduino

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

0グッド

0クリップ

投稿2023/02/17 02:47

編集2023/02/17 02:50

実現したいこと

Seeeduino XIAOとDFPlayerを接続し、タクトスイッチを鳴らしたときに音声を再生させたいです。

前提

実現したいことに向け、少しずつプログラムを書いている途中なのですが、よくわからない現象になっています。

【Seeeduino】
1…DFPlayer BUSYピン
2…タクトスイッチ
8…DFplayer TXピン
9…DFPlayer RXピン
5V…DFPlayer VCC
GND…GND
【DFPlayer】
SPK+、SPKー

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

Arduino IDEでプログラムを書き込み、
『DFPlayerが再生中かどうかをBUSYピンで読み取る』
『タクトスイッチが押されたときにHIGH/LOWが切り替わっているか読み取る』
この2つをシリアルモニタで確認することはできています。

いざLoop関数を書くぞ!となり、
Serial.Println以外にDigitalReadを書くと、シリアルモニタの数値が0/1だったのが急に文字化けしており、HIGH/LOWを読み取ってDFPlayerを再生することができません。

言葉足らずでしたら申し訳ありません。スクリーンショットをご覧ください。
そもそものコード記載ミスがあれば申し訳ありませんが教えてください…。

イメージ説明

該当のソースコード

#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(8, 9); // DFRobotDFPlayerMini myDFPlayer; // busyピンが1、スイッチが2 const int States = 1; const int Switch = 2; void setup() { Serial.begin(115200); mySoftwareSerial.begin(9600); delay(1000); if (!myDFPlayer.begin(Serial, false)) { //エラーは無視する } delay(2000); // ボリュームを15に設定 myDFPlayer.volume(15); //Set volume value. From 0 to 30 // busyピン、スイッチ信号を読み取り状態に pinMode(States, INPUT); pinMode(Switch, INPUT_PULLUP); } void loop(){ ** if(digitalRead(Switch) == LOW){ myDFPlayer.playMp3Folder(1); delay(1000); }** Serial.println(digitalRead(Switch)); }

試したこと

if(digitalRead(Switch) == LOW){の文章を書かなければ、シリアルモニタは通常に戻ります。

Serial.begin();の数値を変えると文字化けが直るという記事を見かけて試してみたのですが、治りませんでした。

最終的なゴール

一つのタクトスイッチを使うだけで『再生』→『一時停止』→『再開』(60秒再開されなければ停止)というプログラムを書きたいと思っています。
併せてご助言頂ければ幸いです。

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

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

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

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

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

guest

回答2

0

解決済にはなっていますが、
質問のプログラムでは

Arduino

1void setup() 2{ 3... 4 if (!myDFPlayer.begin(Serial, false)) { 5... 6}

となっていますが、これは
if (!myDFPlayer.begin(mySoftwareSerial, false)) {
の誤りでしょう。つまり、DFPlayer向けのコマンド(バイナリデータ)がコンソール側に流れているということかと思われます。動いているという現状と見比べてみてください。

それと、プログラムの構造?として

Arduino

1... 2 if(digitalRead(Switch) == LOW){ 3... 4 } 5... 6 Serial.println(digitalRead(Switch)); 7...

のニ箇所のdigitalRead(Switch)は、絶妙のタイミングでスイッチのON/OFFが行われると値が異なる場合があることには注意してください(レアケースでしょうけど)。
特に事情がなければ、
int swStat=digitalRead(Switch);
などとサンプリング結果を変数にとって、一貫した値で関数内の処理を行うべきかと思います。

投稿2023/02/17 22:04

編集2023/02/17 22:15
thkana

総合スコア7703

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

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

0

自己解決

なぜ解決したかはわかりませんが、ライブラリのGetStartのsetup関数を再度コピーしてから書き換えると文字化けせずに動かすことができました。
自己解決で申し訳ありません。

投稿2023/02/17 07:03

ksskyakcnnrk

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問