Salut les Makers.
Aujourd'hui j'ouvre ce sujet qui peut surement aider d'autres personnes sur la communication en Bluetooth entre une application Android et un Arduino.
Pour mon projet de Bras Robotique (http://www.robot-maker.com/forum/topic/11216-bras-robot-bcn3d-moveo/) j'ai conçu une application grâce à MIT App inventor 2.
J'ai réussi à faire quelque chose qui fonctionne facilement mais que dans un seul sens.
En faite, j'aimerai pour éviter d'avoir des erreurs, transmettre des trames de l'application à l'arduino mais je voudrais que le robot envoi un message pour signaler qu'il veut une nouvelle trame.
En gros : l'application envoi la trame --> le robot applique cette trame --> le robot envoi ensuite un "c'est bon j'ai fini" --> une fois le "c'est bon j'ai fini" reçu par l'application, celle-ci envoi une nouvelle trame.
Pour l'instant j'essaye de cette manière en "demandant" d'abord avec l'application en envoyant "1" pour savoir si c'est bon ou pas. Si c'est le cas, il met transmission en true et entre dans une boucle pour recevoir la vraie trame :
void Bluetooth(){ String trame = ""; boolean transmission = false; if (Serial1.available()){ // regarde si il y a une trame disponible trame = Serial1.read();Serial.print(trame);} if (trame == "1") {Serial1.write("Go");Serial.println(" Go");transmission = true;trame ="";delay(200);} else if (trame == "2"){Serial1.write("Attend un peut");Serial.println(" Attend!");trame ="";delay(200);} while(transmission = true){ trame = Serial1.readStringUntil(','); // Découpe une trame sous la forme : 25,18,10,56,47,90f (interprétée par le robot comme ceci, rotation 1 : 25°, bras 1 : 18°, bras 2 : 10°, etc... et le f pour la fin de la trame) nouvelles_positions[0] = trame.toFloat(); trame = Serial1.readStringUntil(','); nouvelles_positions[1] = trame.toFloat(); trame = Serial1.readStringUntil(','); nouvelles_positions[2] = trame.toFloat(); trame = Serial1.readStringUntil(','); nouvelles_positions[3] = trame.toFloat(); trame = Serial1.readStringUntil(','); nouvelles_positions[4] = trame.toFloat(); trame = Serial1.readStringUntil('f'); nouvelle_position_pince = trame.toFloat(); if ((position_moteur[0] != nouvelles_positions[0]) || (position_moteur[1] != nouvelles_positions[1]) || (position_moteur[2] != nouvelles_positions[2]) || (position_moteur[3] != nouvelles_positions[3]) || (position_moteur[4] != nouvelles_positions[4]) || (nouvelle_position_pince != position_pince)){ Mouvements_moteurs(nouvelles_positions[0], nouvelles_positions[1], nouvelles_positions[2], nouvelles_positions[3], nouvelles_positions[4]); position_pince = nouvelle_position_pince; servo_pince.write(position_pince); } transmission = false; delay(100); } }
Je ne détail pas (sauf si vous voulez) comment l'application fonctionne dans MIT App inventor car je ne sais pas si beaucoup l'utilise ici. De toute manière, je pense pouvoir recréer facilement dans l'application un fonctionnement similaire à l'Arduino.
Beaucoup de tutos expliquent comment faire pour avoir une communication entre une appli et un android mais que dans un sens pas dans les deux sens.
Merci pour votre aide