bluetooth e app inventor

Salve a tutti ragazzi ho realizzato una applicazione con arduino uno e modulo h05 ed una scheda rele per comandare tramite cellulare quest'ultima.Tutto funziona correttamente ma piccola domanda io riesco a far cambiare lo stato dei rele tramite cellulare ma se volessi acquisire input da arduino e passare al cellulare(e quindi ad appinventor) tramite il modulo bluetooth come si fa?quali funzioni servono?sapreste indirizzarmi?Grazie tante

Ciao,
quando la connessione tra il tuo smartp. e il modulo bluetooth è attiva, il canale di comunicazione è bidirezionale.
Quindi come invii da Android a BT, puoi inviare da BT ad Android.
Guardati le guide ufficiali:
http://appinventor.pevest.com/?p=520
o qualche tutorial che trovi anche su Instructables per qualcosa di già pronto!

Grazie tante corro a provare!!Poi ti sapro' dire.ciao

scusatemi tanto ma non riesco a trovare la strada giusta...posto il codice cosi' ci capiamo meglio:

SoftwareSerial mySerial =(10, 11);

// imposto i pin per la comunicazione seriale
// Collegare i pin: RX=>11 TX=>10

void setup()
{
pinMode(2, OUTPUT); //questi sono i pin di ciascun relè
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

mySerial.begin(9600); // setto la comunicazione seriale
Serial.println("ok go!"); //scrivo sul monitor seriale
delay(1000);
}

void loop()
{
while (mySerial.available())
{
char dato= mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
switch(dato)
{
case 'A': // Se ricevo la lettera A,
{
digitalWrite(2, HIGH); // attivo il relè collegato al pin12
mySerial.println("Relè 1 ON");
break;
}
case 'a': // Se ricevo la lettera a
{
digitalWrite(2, LOW); // Spengo il relè
mySerial.println("Relè 1 OFF");
break;
}
// E così anche di seguito...
case 'B':
{
digitalWrite(3, HIGH);
mySerial.println("Relè 2 ON");
break;
}
case 'b':
{
digitalWrite(3, LOW);
mySerial.println("Relè 2 OFF");
break;
}

case 'C':
{
digitalWrite(4, HIGH);
mySerial.println("Relè 3 ON");
break;
}
case 'c':
{
digitalWrite(4, LOW);
mySerial.println("Relè 3 OFF");
break;
}
case 'D':
{
digitalWrite(5, HIGH);
mySerial.println("Relè 4 ON");
break;
}
case 'd':
{
digitalWrite(5, LOW);
mySerial.println("Relè 4 OFF");
break;
}
case 'E':
{
digitalWrite(6, HIGH);
mySerial.println("Relè 5 ON");
break;
}
case 'e':
{
digitalWrite(6, LOW);
mySerial.println("Relè 5 OFF");
break;
}
case 'F':
{
digitalWrite(7, HIGH);
mySerial.println("Relè 6 ON");
break;
}
case 'f':
{
digitalWrite(7, LOW);
mySerial.println("Relè 6 OFF");
break;
}
case 'G':
{
digitalWrite(8, HIGH);
mySerial.println("Relè 7 ON");
break;
}
case 'g':
{
digitalWrite(8, LOW);
mySerial.println("Relè 7 OFF");
break;
}
case 'H':
{
digitalWrite(9, HIGH);
mySerial.println("Relè 8 ON");
break;
}
case 'h':
{
digitalWrite(9, LOW);
mySerial.println("Relè 8 OFF");
break;
}
}
}
}

...in base a questo codice che funziona ho pero' bisogno di ricevere da arduino un segnale digitale (ad arduino arriva un input e sul cellulare io lo rilevo tramite bluetooth e lo elaboro con app inventor)...avete del materiale sul quale posso lavorare/capire il funzionamento.
Grazie tante

Purtroppo per agevolarvi non riesco ad aggiungere altri dettagli se non la schermata su appinventor.Se qualcuno fosse interessato ad aiutarmi la posso postare.Grazie

Cosa è che non funziona?

Ciao, come scrivevo prima funziona tutto, ovvero una volta che premo un pulsante sulla mia applicazione fatta con appinventor mi si eccita il rele(fin qui tutto bene).Ora vorrei pero' aggiungere anche una operazione in senso contrario ossia una volta che arriva un input ad arduino accendere una label sull'applicazione di appinventor il tutto tramite blutooth.Spero di essermi spiegato ma forse è piu' semplice di come la spiego io..

Salve, mi sono studiato le guide di pitusso ma non sono riuscito a capire.Qualcuno ha qualche idea?

Hai guardato qui?

Corro a vedere nel frattempo grazie!!!

Piccolo problemino: se premo sulla mia applicazione sul cellulare un pulsante eccito un rele e lo diseccito rilasciando il pulsante. Se stò premendo il pulsante e contemporaneamente perdo la connessione bluetooth il rele rimane eccitato.Domanda: devo intervenire sullo sketch di arduino oppure devo lavorare sull'applicazione appinventor per farsì che ciò non avvenga.Vorrei che una volta persa la connessione nessun rele sia high.Grazie tante

Invoco il dio @pitusso in mio aiuto

Secondo me basta che nello sketch di arduino dici che se la seriale non è disponibile spegni tutti gli output

ti chiedo una cortesia potresti postarmi quel brandello di sketch?scusa ma sono un neofito totale.Grazie

Il fatto è che non sono sicuro che la funzione if(Serial) vada bene... chiedo aiuto alle menti più brillanti :wink:

....e io con te.Ho postato anche il codice.Vediamo se qualcuno riesce a darmi una mano.

vediamo se riusciamo ad uscirne posto il codice ed ipotizzo....ricordo che il mio intento è mettere in low tutte le uscite una volta che la connessione blutooth viene persa.Il codice sotto non viene compilato ho sbagliato qualcosa.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);


// imposto i pin per la comunicazione seriale
// Collegare i pin: RX=>11 TX=>10

void setup()
{
  pinMode(2, OUTPUT); //questi sono i pin di ciascun relè
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  delay(2000);




  mySerial.begin(9600); // setto la comunicazione seriale
 Serial.println("ok go");  //scrivo sul monitor seriale
   delay(1000);
}


void loop()
  

  if (mySerial.available()>0)
  
  {
  while (mySerial.available())
  {
    char dato = mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
    switch (dato)
    {
      case 'A': // Se ricevo la lettera A,
     
        {
          digitalWrite(2, LOW); // attivo il relè collegato al pin12
          mySerial.println("Relè 1 ON");
          break;
        }
      case 'a': // Se ricevo la lettera a
        {
          digitalWrite(2, HIGH); // Spengo il relè
          mySerial.println("Relè 1 OFF");
          break;
        }
      // E così anche di seguito...
      case 'B':
        {
          digitalWrite(3, LOW);
          mySerial.println("Relè 2 ON");
          break;
        }
      case 'b':
        {
          digitalWrite(3, HIGH);
          mySerial.println("Relè 2 OFF");
          break;
        }


      case 'C':
        {
          digitalWrite(4, LOW);
          mySerial.println("Relè 3 ON");
          break;
        }
      case 'c':
        {
          digitalWrite(4, HIGH);
          mySerial.println("Relè 3 OFF");
          break;
        }
      case 'D':
        {
          digitalWrite(5, LOW);
          mySerial.println("Relè 4 ON");
          break;
        }
      case 'd':
        {
          digitalWrite(5, HIGH);
          mySerial.println("Relè 4 OFF");
          break;
        }
      case 'E':
        {
          digitalWrite(6, LOW);
          mySerial.println("Relè 5 ON");
          break;
        }
      case 'e':
        {
          digitalWrite(6, HIGH);
          mySerial.println("Relè 5 OFF");
          break;
        }
      case 'F':
        {
          digitalWrite(7, LOW);
          mySerial.println("Relè 6 ON");
          break;
        }
      case 'f':
        {
          digitalWrite(7, HIGH);
          mySerial.println("Relè 6 OFF");
          break;
        }
      case 'G':
        {
          digitalWrite(8, LOW);
          mySerial.println("Relè 7 ON");
          break;
        }
      case 'g':
        {
          digitalWrite(8, HIGH);
          mySerial.println("Relè 7 OFF");
          break;
        }
      case 'H':
        {
          digitalWrite(9, LOW);
          mySerial.println("Relè 8 ON");
          break;
        }
      case 'h':
        {
          digitalWrite(9, HIGH);
          mySerial.println("Relè 8 OFF");
          break;
          
        }
            else
            {
               digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  delay(2000);
    }
  }
}

Ti ho sistemato un pò le graffe, vedi se fa quello che vuoi...

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
// imposto i pin per la comunicazione seriale
// Collegare i pin: RX=>11 TX=>10

void setup()
{
  pinMode(2, OUTPUT); //questi sono i pin di ciascun relè
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  delay(2000);
  mySerial.begin(9600); // setto la comunicazione seriale
  Serial.println("ok go");  //scrivo sul monitor seriale
  delay(1000);
}

void loop()
{
  if (mySerial.available() > 0)
  {
    while (mySerial.available())
    {
      char dato = mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
      switch (dato)
      {
        case 'A': // Se ricevo la lettera A,
          {
            digitalWrite(2, LOW); // attivo il relè collegato al pin12
            mySerial.println("Relè 1 ON");
            break;
          }
        case 'a': // Se ricevo la lettera a
          {
            digitalWrite(2, HIGH); // Spengo il relè
            mySerial.println("Relè 1 OFF");
            break;
          }
        // E così anche di seguito...
        case 'B':
          {
            digitalWrite(3, LOW);
            mySerial.println("Relè 2 ON");
            break;
          }
        case 'b':
          {
            digitalWrite(3, HIGH);
            mySerial.println("Relè 2 OFF");
            break;
          }
        case 'C':
          {
            digitalWrite(4, LOW);
            mySerial.println("Relè 3 ON");
            break;
          }
        case 'c':
          {
            digitalWrite(4, HIGH);
            mySerial.println("Relè 3 OFF");
            break;
          }
        case 'D':
          {
            digitalWrite(5, LOW);
            mySerial.println("Relè 4 ON");
            break;
          }
        case 'd':
          {
            digitalWrite(5, HIGH);
            mySerial.println("Relè 4 OFF");
            break;
          }
        case 'E':
          {
            digitalWrite(6, LOW);
            mySerial.println("Relè 5 ON");
            break;
          }
        case 'e':
          {
            digitalWrite(6, HIGH);
            mySerial.println("Relè 5 OFF");
            break;
          }
        case 'F':
          {
            digitalWrite(7, LOW);
            mySerial.println("Relè 6 ON");
            break;
          }
        case 'f':
          {
            digitalWrite(7, HIGH);
            mySerial.println("Relè 6 OFF");
            break;
          }
        case 'G':
          {
            digitalWrite(8, LOW);
            mySerial.println("Relè 7 ON");
            break;
          }
        case 'g':
          {
            digitalWrite(8, HIGH);
            mySerial.println("Relè 7 OFF");
            break;
          }
        case 'H':
          {
            digitalWrite(9, LOW);
            mySerial.println("Relè 8 ON");
            break;
          }
        case 'h':
          {
            digitalWrite(9, HIGH);
            mySerial.println("Relè 8 OFF");
            break;
          }
      }
    }
  }
  else
  {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    delay(2000);
  }
}

Ok grazie molte in giornata testo il tutto e ti dico.Sei stato molto gentile.Buona giornata