Modification état de la sortie notifié par BT avec app inventor

Bonjour,

Je réalise une liaison BT entre arduino et mon téléphone avec une petite application créée avec app inventor.

Je peux par exemple actionner une led connectée à une sortie de l'arduino à partir du téléphone, on trouve bcp de ressource à ce sujet sur le net.

Par contre je ne trouve RIEN sur l'inverse c'est à dire comment faire pour indiquer sur le téléphone qu'une sortie à changer d'état.

Par exemple j'ai un carrée vert sur mon application téléphone lorsque la sortie est à l'état bas et il passe rouge lorsque que la sortie passe à l'état haut...

Merci de votre aide, je cherche depuis un petit moment mais sans succès...

bonjour
Il faut faire par timer un call bluetooth client

Merci Artouste pour ta réponse

Au moins cela semble possible...par contre j'ai pas tout compris, que veux tu dire par "timer". aurais tu un peut exemple stp ?

Merci encore de ton aide

hello
ici

Merci pour ta réponse dfgh (désolé d'avoir tardé à répondre mais j'étais absent).

Effectivement cela fonctionne j'arrive à récupérer l'état de ma sortie (1 ou 0), mais une solution amène un autre problème !

Il faut que je récupère l'état de plusieurs sorties mais comme la liaison se fait en série comment faire pour séparé les données ?

Au finale je souhaiterai allumer un voyant vert sur mon telephone lorsque la sortie 7 de l'arduino est active, allumer un un voyant jaune sur mon téléphone lorsque la sortie 8 de l'arduino est active, et un voyant rouge sur mon téléphone lorsque la sortie 7 de l'arduino est active...

Auriez vous des idées ?

Merci d'avance

J'ai avancé un peu...j'ai fait ce petit programme et le code app inventor ci joint

Le principe est simple, si j'ai la sortie 7, le fond de mon texte sur le telephone devient vert (led verte sur mon montage) car j'ai donné la valeur 1 à valeur BT. En changeant les valeurs BT à 2 puis 3 en fonction de la sortie activé je change la couleur du fond de texte sur le telephone.

Cela fonctionne SAUF que j'ai besoin d'un delay(1000) sur mon programme !! et cela me ralentit l'ensemble ! si je n'ai pas de delay ou si il est plus court j'ai trop de données sur mon port série et cela bloque...il faudrait lire qu'un bit ou octet à la volée (je ne sais pas trop ce qui est transmis :confused: )

Et là je ne sais pas comment faire ! d'ailleurs est ce la bonne méthode, ou mon "bricolage" n'est pas la solution ! merci de votre aide svp !

// Numéro de la pin du bouton et variable validation de l'appui(entree, borne 1,2,3))
 const int bouton2 =2;
 const int ledverte =7;
 const int ledjaune =8;
 const int ledrouge =9;
 boolean bouton2valide;
 boolean ledjaunevalide;
 boolean ledrougevalide;
  
// Initialisation tempo
unsigned long previousMillis2 = 0;
unsigned long currentMillis2 = 0;

// Inutile a terme permet juste de voir la valeur en entree

int valeurBT=0;
 
 
void setup() {
    Serial.begin(9600);
    pinMode(bouton2, INPUT);
    pinMode(ledverte, OUTPUT);
    pinMode(ledjaune, OUTPUT);
    pinMode(ledrouge, OUTPUT);
    bouton2valide=false;
             }
 
 void loop() {
   
     if (digitalRead(ledverte)==HIGH)
     {
      valeurBT=1;
      }
      if (digitalRead(ledjaune)==HIGH)
     {
      valeurBT=2;
      }
      if (digitalRead(ledrouge)==HIGH)
     {
      valeurBT=3;
      }
    
   Serial.print(valeurBT);
    delay(1000);

 // Si le bouton 2 est enfoncé, LED classiques, 3 led, verte, jaune, rouge
    if ( digitalRead(bouton2) == HIGH ) // bouton 2 valide 
     {
         // Alors on valide bouton 2 enfoncé
        bouton2valide=true;
      }
    else 
      {
        // Sinon on indique oeuf non détecté
        bouton2valide = false;
        previousMillis2 = millis();
      }
    
 
// BOUTON 2 :
if (bouton2valide==true) // enclenchement des 3 leds  : verte, jaune et rouge

      // alors on declenche les tempos
      {
        currentMillis2 = millis();

         
    
        ledjaunevalide=(bouton2valide) && (currentMillis2 - previousMillis2 >= 2000);
        ledrougevalide=(bouton2valide) && (currentMillis2 - previousMillis2 >= 5000); 
          
        digitalWrite(ledverte, bouton2valide);  //Sortie 7 la led verte s'allume des que le bouton2 est valide & suffisament de lumiere
                                                                                  // porte ouverte (lumiere environ 700, nuit environ 350 à confirmer)
        digitalWrite(ledjaune, ledjaunevalide);  //Sortie 8 attention valeur à modifier (noir plutot 300)
        digitalWrite(ledrouge, ledrougevalide);  //Sortie 9 il faut meix faire sur un seuil bas qui est tjs le meme plutot qu'un seuil haut 
                                                                                     // qui lui peu varier
       
      }
        else
      {
        digitalWrite(ledverte, LOW);
        digitalWrite(ledjaune, LOW);
        digitalWrite(ledrouge, LOW);
      }
                
 }

hello :slight_smile:
je me suis intéressé au prob en meme temps que toi
ou plutot après avoir lu ton post.

je me suis donc interressé à mit app inventor2
et après l'étude de qq exemples j'ai pu faire ma petite application qui communique avec ma platine bluetooth (étant montée sur DUE)

voici un bout de code qui est dans DUE

Serial3.print(++counter);
if(counter==3){counter=0;}

edit: nos posts se sont croisés
regarde la copie d'écran ci jointe, c'est le bout de code appinventor2 qui traite le code dans la tablette

sur ma tablette, la case "texte3" affiche 1 sur fond vert, puis la seconde suivante, elle affiche 2 sur fond jaune, et pour finir, une seconde après elle affiche 3 sur fond violet.
puis on boucle en recevant à nouveau 1, etc...

lpg79:
J'ai avancé un peu...j'ai fait ce petit programme et le code app inventor ci joint

bonsoir
ce n'est pas du code app inventor, mais une "photo" qui n'expose pas tout les parametres
poste ton .AIA

as tu testé en modifiant le paramètrage de "clock1" (timerInterval=1000)

je viens de tester
due émet toutes les 300ms et la tablette affiche toutes les 10ms
je vois bien mes 3changements de couleur par seconde

j'ai testé avec 20ms dans DUE et 10 ms dans la tablette, ça suivait bien mais c'était "illisible"

dfgh:
as tu testé en modifiant le paramètrage de "clock1" (timerInterval=1000)

je viens de tester

:grin:
le .AIA ça vaut aussi pour toi dfgh

Merci bcp pour votre aide, je regarde tout cela...et je vous dis

euh comment joindre un .aia ? l'extension est refusée !

J'ai essayé artouste de changer "timerinterval" en le passant à 10 et en mettant un delay de 100 sur le programme arduino.

Cela fonctionne mais j'ai toujours un delay...petit certes mais toujours là. Si je le supprime, j'ai une suite de point d'interrogation sur mon écran de téléphone !

Si je met un delay de 500 et un "timerinterval" de 1000 je lis 11 ou 22 ou 33, ce qui me fait dire qu'on lit plusieurs données du port séries qui arrivent, il faudrait juste en lire une au vol (enfin je crois !)

euh autre question à quoi sert le code app "receivedSign1ByteNumber", je comprend pas trop son utilité??

Merci encore de votre aide

c'est bon. :slight_smile:

pas l'habitude de ces manips.

extension .aia refusée

passée en zip

j'espère que c'est bon

ON_OFF_MOT_VIT_v9.zip (6.18 KB)

:slight_smile: le code .ino

soyons d'accord, c'était juste pour des tests perso et aider notre ami.
donc code sans prétention et perfectible :slight_smile:

Due_bluetooth_complet_ok_v9.ino (1.04 KB)

Ah oui bonne idée voici, le mien !!

BTapp.zip (2.42 KB)

:slight_smile: cool, j'ai testé ton code après avoir changer "timerInterval" ( de 1000 ==> 300)
et tu as le meme fonctionnement que moi

Merci dfgh,

Par contre lorsque je compile ton .ino, il ne prend pas Serial3 ??

D'ailleurs ta différence de transmission permet de lire à la fois sur le moniteur série et sur ton téléphone ?

Merci en tout cas !! si vous voyez ou cela bug (ou plutôt comment enlever le delay) sur mon .ino ou mon .aia, se sera avec plaisir !!

regardes mon dernier post, j'ai remplacé 1000 par 300 dans ton clock1 paramètre "timerInterval"

mon code est pour DUE. j'utilise serial 3 pour le bluetooth et le serial pour le moniteur

tu peux virer mes serial.print qui pour l'instant affichent sur moniteur

sans oublier de modifier la vitesse dans le setup

et remplacer les serial3.print par des serial.print ( je suppose que ton bluetooth est sur d0et d1 de uno)

ton .aia modifié :slight_smile:

BTapp_v1.zip (3.36 KB)

Merci dfgh,

Euh par contre, je suis obligé de garder le delay dans le .ino, non ? ou y a un truc que je ne comprend pas ?

J'ai une autre question lié à mon projet, comment lancer un chronomètre sous app inventor, (ça ca va...) mais qui continu de tourner si l'application et la connexion BT est coupé ? (je sais c'est pas arduino, il existe des forum francais app ?)

Merci encore

le "clock1" qui est dans ton application doit cesser lorsque tu la "quitte", non?
as tu regardé ton prg aia modifié. j'ai rajouté un BP "QUITTER" qui ferme l'application

dans DUE, si tu vires le delay ( fait par milli() ), ta boucle s'exécutant très vite ne cessera pas d'envoyer des infos par le bluetooth

avec le tempo, tu n'envoies par le bluetooth que toutes les 300ms (selon ce que tu veux)