Gestire 2 Shield

Salve,
Sto cercando di creare una sorta di assistente vocale ma con risposte programmate per le domande che saranno fisse. In questo progetto sto utilizzando DFPlayer Mini e un HC-05. Vorrei capire come farli utilizzare assieme perché dopo l'intera stesura dello sketch a dato comando vocale, il suono non lo riesco a setire.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial MP3(10,11);
DFRobotDFPlayerMini mp3;
SoftwareSerial HC(8,9);

String messaggio;

void setup() {
  Serial.begin(9600);
  MP3.begin(9600);
  HC.begin(9600);
  Serial.println("running");
  if(!mp3.begin(MP3)){
    Serial.println("controlla cablatura");
    while(true);
  }
}

void loop() {
  int i=0;
  char ch;
  messaggio="";
  while(HC.available()>0){
    ch=HC.read();
    if(ch=='#')
    break;
    messaggio+=ch;
  }
  messaggio.toLowerCase();
  if(messaggio!="")
  Serial.println(messaggio);

  if(messaggio=="ok")
  mp3.play(1);
}

Buonasera e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Presentazione fatta!!!

Senza avere i link alle schede che stai utilizzando e quindi quali pin di Arduino stai impegnado, difficile rispondere e capire se ci sono conflitti.

Guglielmo

https://drive.google.com/file/d/14QlR3P9E7pVB8n1NiSbstxDfVz3r_SiJ/view?usp=sharing

in questo link c'è lo schema da me ideato per il progetto

Immagino tu stia usando DUE istanze della SoftwareSerial per comunicare sulle due seriali che vedo ...
... hai studiato bene il reference di tale libreria? Perché, non so se è il tuo caso poiché non hai messo il codice, comunque è chiaramente indicato che solo UNA SoftwareSerial per volta può essere abilitata in ricezione. Non so se questo può essere la causa dei tuoi problemi, comunque verifica ... ::slight_smile:

Guglielmo

Ok. Nel primo post ho inserito il codice come detto.

Da una parte ci sei tu che usi la SoftwareSerial HC, dall'altra c'è la libreria che usa sempre una SoftwareSerial (la MP3).

Come ti ho scritto già scritto, DUE SoftwareSerial assieme hanno problemi perché UNA SOLA può essere in ricezione e occorre usare un apposito metodo per passare da una all'altra ... listen().

DEVI quindi modificare il codice, studiandoti bene come funziona la SoftwareSerial e vedere come fare per attivare la ricezione di HC quando ti serve e la ricezione di MP3 (che usa la libreria al suo interno) quando ad essa serve.

Probabilmente occorre rivedere la logica del programma e, forse, anche mettere le mani nella libreria ... ::slight_smile:

Guglielmo

Ok, perfetto grazie.

Così potrebbe andare forse...

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial MP3(10,11);
DFRobotDFPlayerMini mp3;
SoftwareSerial HC(8,9);

String messaggio;

void setup() {
  Serial.begin(9600);
  MP3.begin(9600);
  HC.begin(9600);
}

void loop() {
  HC.listen();

  if(HC.isListening()){
    int i=0;
    char ch;
    messaggio="";
    while(HC.available()>0){
      ch=HC.read();
      if(ch=='#')
      break;
      messaggio+=ch;
    }
    messaggio.toLowerCase();
    if(messaggio!="")
    Serial.println(messaggio);
  }
  MP3.listen();
  
  if(MP3.isListening()){
    if (messaggio=="Ciao")
    mp3.play(1);
  }
}

Purtroppo non funziona ancora mi da svariati problemi...

... che problemi ? ... e comunque è ovvio che se la libreria ha bisogno di usare la seriale durante la riproduzione, va in conflitto, se il HC invia informazioni durente l'uso del MP3, va in conflitto, ecc. ecc.

Onestamnete ... sarebbe meglio passare ad una scheda che ha più seriali fisiche che non doverle creare virtualmente ... che già una sola da i suoi problemi, due poi ... ::slight_smile:

Guglielmo

quale scheda mi consiglierebbe?

Beh ... con Arduino MEGA hai ben 4 porte seriali VERE ... quindi ce ne è per far di tutto e di più :slight_smile:

Inoltre ha moooolta più memoria flash (per i programmi) e più memoria SRAM, oltre a tante altre belle cosette :wink:

Guglielmo

Ok perfetto grazie mille del supporto, comunque credo di aver risolto i problemi che avevo e adesso va quasi tutto.
Grazie ancora

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.