home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


sketch arduino aiuto + Mitt app inventor 2
     
Autore Messaggio opzioni
gironico




una ogni 100 livelli


postato il:
24.02.2017, alle ore 09:32
picmicro675:
Col rispetto dei 3,3 Volts
Alcuni moduli sono tolleranti, ma non tutti.
Prima di fare tutto il programma hai provato le cose più elementari come scrivere quello che ricevi alla seriale ed usare BT serial per Android ?


Anche qui è normale che nascono confusioni a chi non esamina bene la situazione:

Il modulo bT hc-06 (andando a memoria) te lo garantiscono che lo puoi alimentare a 5V. Sbirciando il modulo a bordo trovi il regolatore in cascata all'alimentazione e il tutto lavora a 3.3V.
Quindi occorre adattare i livelli.... con partitori o transistor....in questo caso ritengo sia più idoneo un partitore che tante altre cose.

Ognuno ha le sue abitudini per incominciare a far qualcosa.

Se ho tra le mani un modulo nuovo cerco di testarlo nella maniera più semplice in assoluto....meno cose ci sono è più facile individuare un problema.

Tatone è già partito in quinta con la sua prima esperienza ed è normale che naviga in alto mare quando qualcosa non funziona.

1)Non sa se dare la colpa allo sketch su ardu
2)collegamenti Hardware
3)Modulo BT
4) app per inviare i dati...
5) necessariamente occorre una sintesi vocale per aumentare la difficolta....

per risolvere questo problema prima assicurati con un dialogo banale tra ardu e modulo.

Come lo fai:

Prendi l'esempio e provi ad inviare tramite un app semplice e minimalista come BlueSerial un carattere. Il monitor seriale te lo deve stampare su monitor pc.

Con questa prova hai testato molte cose che ora stai dando per scontato che funzionano correttamente....

Dopo si passa al resto. Questo è il mio consiglio, poi è libero di far come vuoi ma si rischia di perdere tempo inutilmente cercando il problema n100 quando potrebbe essere il numero 3.




La vita è troppo breve per bere vini mediocri
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
24.02.2017, alle ore 11:58
rcc.roberto:
non andrebbe scritto:
while (mySerial.available()>0)  
?

Piu' che 'sintetico' il C e' un linguaggio 'ermetico' e sarebbe piaciuto a Montale.....
Quando si richiama l'espressione
 mySerial.available() 
essa stessa assume il valore true o false quindi la si puo' testare direttamente con un while o un if

fa il paio con
 x/=y;   // equivalent to the expression x = x / y;  

ed altre raffinatezze appunto 'ermetiche'....





"se peso cado, ma se cado non peso"
adamatj.altervista.org
rcc.roberto



[pagine pubblicate]

postato il:
24.02.2017, alle ore 13:19
grazie double_wrap
picmicro675




una ogni 10 livelli


postato il:
24.02.2017, alle ore 15:18
Caro tatone,
Le cose che fai non le vede nessuno. Quindi assumere la richiesta "Non va, cosa ho sbagliato ?" è priva di informazioni e come qualche migliaio di topici del forum si comincia l' inquisizione. Come puoi capire si cerca di aiutare, ma è un metodo Montecarlo. https://it.wikipedia.org/wiki/Metodo_Monte_Carlo, Dove si buttano tante supposizioni fino a cominciare a delineare qualcosa del tuo fare.
Consiglio un altro metodo.
Descrivi il progetto, in alcuni casi è necessario anche lo schema e/o le foto. Con le foto si aiuta a controllare se ci sono collegamenti che non rispettano lo schema. Poi le procedure intentate ed i risultati ottenuti, con il minimo di documentazione, sia che abbia avuto esito positivo oppure negativo.
Nel tuo caso si comincia dalle fasi di assemblaggio, vedere il risultato. Provare ogni componente aggiunto con le semplici operazioni, vedere il risultato. Fino al punto che anche l' applicativo Android dia un risultato, ancora prima che raggiunga la seriale e vedere i risultati.



Anno nuovo, forum nuovo.
Mi sa che lascio.
tatone





postato il:
24.02.2017, alle ore 21:00
ho trovato un altro sketch che fa al caso mio, ma ho dovuto fare qualche aggiunta del codice (copia incolla) per aggiungere piu rele, funziona tramite app, ma se mando il segnale con la voce si impalla tutto, cioe' i tasti non mi rispondono piu' e devo resettare arduino.
Parto in quinta per cercare di raggiungere il mio obiettivo, ovviamente con mille ostacoli a volte.

#include <SoftwareSerial.h>
 
int rxPin = 10;
int txPin = 11;
SoftwareSerial bluetooth(rxPin, txPin);
 
String message; //string that stores the incoming message
const int Led2 = 2;
const int Led3 = 3;
const int Led4 = 4;
const int Led5 = 5;
const int Led6 = 6;
const int Led7 = 7;
 
void setup()
{
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
  pinMode(Led2,OUTPUT);
  pinMode(Led3,OUTPUT);
  pinMode(Led4,OUTPUT);
  pinMode(Led5,OUTPUT);
  pinMode(Led6,OUTPUT);
  pinMode(Led7,OUTPUT);
}
 
void loop()
{
  while(bluetooth.available()){
    message+=char(bluetooth.read());
  }
  if(!bluetooth.available())
  {
    if(message!="")
    {//if data is available
      if(message == "uno acceso"){
          digitalWrite(Led2, HIGH);
          Serial.println("led2 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "uno spento"){
          digitalWrite(Led2, LOW);
          Serial.println("Led2 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    if(message!="")
    {//if data is available
      if(message == "due acceso"){
          digitalWrite(Led3, HIGH);
          Serial.println("Led3 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "due spento"){
          digitalWrite(Led3, LOW);
          Serial.println("Led3 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    if(message!="")
    {//if data is available
      if(message == "tre acceso"){
          digitalWrite(Led4, HIGH);
          Serial.println("Led4 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "tre spento"){
          digitalWrite(Led4, LOW);
          Serial.println("Led4 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    if(message!="")
    {//if data is available
      if(message == "quattro acceso"){
          digitalWrite(Led5, HIGH);
          Serial.println("Led5 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "quattro spento"){
          digitalWrite(Led5, LOW);
          Serial.println("Led5 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    if(message!="")
    {//if data is available
      if(message == "cinque acceso"){
          digitalWrite(Led6, HIGH);
          Serial.println("Led6 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "cinque spento"){
          digitalWrite(Led6, LOW);
          Serial.println("Led6 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    if(message!="")
    {//if data is available
      if(message == "sei acceso"){
          digitalWrite(Led7, HIGH);
          Serial.println("Led7 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "sei spento"){
          digitalWrite(Led7, LOW);
          Serial.println("Led7 OFF"); //show the data
          delay(20);
          message=""; //clear the data
          }
    if(message!="")
    {//if data is available
      if(message == "tutti accesi"){
          digitalWrite(Led2, HIGH);
          digitalWrite(Led3, HIGH);
          digitalWrite(Led4, HIGH);
          digitalWrite(Led5, HIGH);
          digitalWrite(Led6, HIGH);
          digitalWrite(Led7, HIGH);
          Serial.println("Led2 ON"); //show the data
          Serial.println("Led3 ON"); //show the data
          Serial.println("Led4 ON"); //show the data
          Serial.println("Led5 ON"); //show the data
          Serial.println("Led6 ON"); //show the data
          Serial.println("Led7 ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "tutti spenti"){
          digitalWrite(Led2, LOW);
          digitalWrite(Led3, LOW);
          digitalWrite(Led4, LOW);
          digitalWrite(Led5, LOW);
          digitalWrite(Led6, LOW);
          digitalWrite(Led7, LOW);
          Serial.println("Led2 OFF"); //show the data
          Serial.println("Led3 OFF"); //show the data
          Serial.println("Led4 OFF"); //show the data
          Serial.println("Led5 OFF"); //show the data
          Serial.println("Led6 OFF"); //show the data
          Serial.println("Led7 OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
       }
        }
         }
        }
         }
          }
        }
         }
          }


qui posso scrivere le parole per accendere i led, ma con la voce si impalla e bisogna resettarlo.
Grazie a tutti per i consigli
gironico




una ogni 100 livelli


postato il:
25.02.2017, alle ore 09:32
ti si impalla perché vai a sapere cosa ti spara con il comando vocale....

se leggi nel monitor seriale cosa ti arriva dal bt quando invii dal comando vocale, probabile che risolvi....



La vita è troppo breve per bere vini mediocri
agric





postato il:
25.02.2017, alle ore 13:10
scusate la domanda
ma il comando vocale cosa sfrutta, l'adc di arduino?



meglio essere un granello di pepe che una cacca d'asino
picmicro675




una ogni 10 livelli


postato il:
25.02.2017, alle ore 15:41
Il problema è chiaramente che la seriale del bluetooth non è bloccante. Non aspetta che hai completato il messaggio e procede, quindi parte del messaggio è spalmato in tutto la loop() fino a che si riesce a capire se è quello che si vuole.
Vedi come l' esempio del mio progetto, succitato link, devi come primo caso aspettare che il comando sia completo, prova l' esempio qui di seguito.
In secondo caso devi studiare cosa ogni comando vuole fare.

#include <SoftwareSerial.h>

#define RXPIN  10
#define TXPIN  11
#define MSGLENGTH 30

SoftwareSerial bluetooth(RXPIN, TXPIN);
byte count = 0;
char character;
bool msgend;

char message[30];
void setup()
{
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
  for (byte i=2; i < 8; i++) {
    pinMode(i,OUTPUT);
  }
}
void readBuffer(){
    while(count < MSGLENGTH) {
        if (bluetooth.available() > 0) {
            character = bluetooth.read();
            message[count] = character;
            count++;
            if ((character == 10) || (character == 13)) {
                message[count] = 0;
                 break;
            }
        }
    }
    bluetooth.flush();
    count = 0;
    msgend = 1;
}

void loop(){
    readBuffer();
    if (msgend) {
        msgend = 0;
        Serial.println(message);
    }
}
 

Prova a capire come funziona questo, poi vai avanti poco alla volta. In particolare, usalo con il comando che riceve da App Inventor, così potrai capire cosa succede.
Per questo esempio si deve fare attenzione che ci vuole il fine linea per concludere il messaggio, quindi in App Inventor conviene che ci aggiungi il ritorno a capo CRLF (0x13,0x0d).



Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675




una ogni 10 livelli


postato il:
26.02.2017, alle ore 21:23
rcc.roberto:
non andrebbe scritto:
while (mySerial.available()>0)  
????


Hai ragione, perché se non ci sono caratteri ritorna -1.



Anno nuovo, forum nuovo.
Mi sa che lascio.
tatone





postato il:
02.03.2017, alle ore 00:03
grazie a tutti, sono riuscito a risolvere con un altro sketch che se non ricordo male usa il comando "voice".
Nel monitor seriale o notato che pronunciando: uno acceso, uno spento, due acceso, due spento me li segnava cosi:

I acceso
uno spento.
2 acceso
due spento
....


impostandolo come dice il monitor funziona perfettamente.
Una cosa non capisco
Vi capita anche a voi che se il bluetooth e collegato su RX e TX di arduino, non carica gli sketch?
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale