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...
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...
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 )
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
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)
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...
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é??
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 ?)
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)