Aller au contenu


- - - - -

communication android arduino


  • Veuillez vous connecter pour répondre
34 réponses à ce sujet

#21 Guest_flo_*

Guest_flo_*
  • Guests

Posté 25 décembre 2011 - 03:06

up??

#22 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 26 décembre 2011 - 04:19

up??



je ne vais pas te donner la solution ( car je ne l'ai pas ;) ) mais juste un petit conseil:
essaie de commenté ton code pour 2 raison


1er nous sa nous aide a comprendre

2eme cela permet parfois de comprendre d'ou vien le probleme




a mon avis c'est dans la gestion des thread que ca plante

++

#23 Guest_flo_*

Guest_flo_*
  • Guests

Posté 26 décembre 2011 - 10:55

d'accord je fais sa des que je peut

#24 Guest_flo_*

Guest_flo_*
  • Guests

Posté 26 décembre 2011 - 12:07

voila le code ou il y a l'erreur:

package Flo.reception;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.ToggleButton;

public class ReceptionActivity extends Activity 
{
	ToggleButton conn_but;
	ToggleButton dist_rec;
	TextView bt_state;
	TBlue tblue;
	TextView dist;
	String dist_recu;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        conn_but = (ToggleButton)findViewById(R.id.conn_bt);		//
        dist_rec = (ToggleButton)findViewById(R.id.toggleButton1);	//
        bt_state = (TextView)findViewById(R.id.bt_etat);			//initialise les objet
        dist = (TextView)findViewById(R.id.textView3);				//
 			
        	conn_but.setOnClickListener(new OnClickListener() {		//declanche une action au clique sur le togglebouton de connection
			
			@Override
			public void onClick(View v) {
				if(conn_but.isChecked())							//si le togglebutton et a l'etat haut: lance la connection
				{
					tblue = new TBlue("00:06:66:06:BF:3A");			//connecte le bluetooth
					if(tblue.streaming())							//
					{												//
						bt_state.setText("connecter");				//indique que la connection entre le telephone et la carte et ok						
					}												//
					else											//
					{												//indique qu'il y a ue une erreur de connection
						bt_state.setText("erreur!");				//
					}												//
				}
				else												//si togglebutton a etat bas
				{													//
					tblue.close();									//ferme la connection bluetooth
						bt_state.setText("deco");					//
				}													//
				
			}
		});	
        	
        	dist_recu = tblue.read();								//lis les donné envoyer sur le bluetooth (cette ligne pose problemme)
        	dist.setText(dist_recu);								//incrit les donné envoyer par la carte
    }
    
}

Ps: désoler j'oubli toujours de commenter mes code

#25 NooTe

NooTe

    Membre

  • Membres
  • 40 messages

Posté 27 décembre 2011 - 03:05

C'est normal, le code suivant ne peut pas etre utilisé car ton object tblue n'est pas encore connecté...

cette portion de code doit etre deplacé dans le bloque "if(tblue.streaming())"...
        	dist_recu = tblue.read();				                 //lis les donné envoyer sur le bluetooth (cette ligne pose problemme)
        	dist.setText(dist_recu);								//incrit les donné envoyer par la carte

Comme dans le code suivant
La connection est effectué, puis le click du bouton enverra tes données.

Idealement, tu devrais mettre ton code blutooth dans un thread a part et ajouter des handlers de message pour les receptions de données et les events de connections (ainsi qu'une pile de message pour l'envoi, avec des ID pour chaque message) pour pouvoir remapper les commandes et les reponses. (bon ok, je suis pas sur d'etre comprehensible sur ce coup là ^^)

Code fait a l'arrache et pas tester (mais dans l'esprit)
package Flo.reception;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.ToggleButton;

public class ReceptionActivity extends Activity 
{
	ToggleButton conn_but;
	ToggleButton dist_rec;
	TextView bt_state;
	TBlue tblue;
	TextView dist;
	String dist_recu;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        conn_but = (ToggleButton)findViewById(R.id.conn_bt);		//
        dist_rec = (ToggleButton)findViewById(R.id.toggleButton1);	//
        bt_state = (TextView)findViewById(R.id.bt_etat);			//initialise les objet
        dist = (TextView)findViewById(R.id.textView3);				//

 		tblue = new TBlue("00:06:66:06:BF:3A");			//connecte le bluetooth
 			
        	conn_but.setOnClickListener(new OnClickListener() {		//declanche une action au clique sur le togglebouton de connection
			
			@Override
			public void onClick(View v) {
					if(tblue.streaming())							//
					{												//
        	dist_recu = tblue.read();				                 //lis les donné envoyer sur le bluetooth (cette ligne pose problemme)
        	dist.setText(dist_recu);								//incrit les donné envoyer par la carte
					}												//
			}
		});	
   		
	}

void finalize()
{
   				tblue.close();									//ferme la connection bluetooth
}	
}


#26 Guest_flo_*

Guest_flo_*
  • Guests

Posté 27 décembre 2011 - 05:22

Merci de ton aide le code fonctionne mais il y a encore un petit détail je voudrais que le l'appli donne la distance pas seulement quand j'appui sur un bouton mais tout le temps.

cette action et telle possible??

#27 NooTe

NooTe

    Membre

  • Membres
  • 40 messages

Posté 27 décembre 2011 - 08:10

Merci de ton aide le code fonctionne mais il y a encore un petit détail je voudrais que le l'appli donne la distance pas seulement quand j'appui sur un bouton mais tout le temps.

cette action et telle possible??


Oui, tu places ta comm bluetooth dans un thread ou tu temporises un evenement regulier (pour eviter de saturer ton CPU, ta bande passante Bluetooth et ton Arduino).
Et là, ca se complique un peu : le thread principal (ton "Main") qui fait la mise a jour du GUI (ton "TextView")ne peux pas être mis a jour depuis un autre thread. Il faut donc que tu ajoutes un Handler entre les deux threads qui permet de lancer des messages (du thread qui boucle pour la distance) vers le thread principal pour qu'il puisse mettre a jour le TextView (je te laisse chercher un peu sur google ca ne devrait pas etre trop compliquer a trouver ;))

#28 Guest_flo_*

Guest_flo_*
  • Guests

Posté 27 décembre 2011 - 09:42

En gros si j'ai bien compris il faut que je créer une autre classe qui s’exécute toute les seconde par exemple pour lire les info transmisse par le bluetooth et les Ecrire sur un TextView ??

c'est bien sa??

en tout cas merci de ta reponse :)

#29 Guest_flo_*

Guest_flo_*
  • Guests

Posté 29 décembre 2011 - 11:19

Cela fait plusieur jour que je cherche mais je ne trouve pas :'(

Serait il possible d'avoir des info en plus svp??

Merci d'avance :)

#30 NooTe

NooTe

    Membre

  • Membres
  • 40 messages

Posté 29 décembre 2011 - 07:01

Cela fait plusieur jour que je cherche mais je ne trouve pas :'(

Serait il possible d'avoir des info en plus svp??

Merci d'avance :)


Si l'anglais ne te fait pas peur :)
http://android-codes...-ui-thread.html

ou sinon en francais (ca cause des progressbars mais c'est le meme esprit : Une Activity, un Thread, un Handler)
http://www.ace-art.f...de-progression/

#31 Guest_flo_*

Guest_flo_*
  • Guests

Posté 30 décembre 2011 - 11:18

Merci de ta réponse j’avais trouver le site français mais j’avais du mal a comprendre a cause de la boucle for mais la c'est bon.

Je test l'appli et si elle fonctionne je poste le code :)

#32 Guest_flo_*

Guest_flo_*
  • Guests

Posté 30 décembre 2011 - 12:06

Le code fonctionne je poste sa en début d'aprem :)

#33 Guest_flo_*

Guest_flo_*
  • Guests

Posté 30 décembre 2011 - 01:35

un dernier probleme sur le code arduino que voici:


#include <Servo.h>

#define SERVO_PIN 9
#define Analog_pin A0

Servo serv;
static int pos = 0;
char ch;
int distance;
long milliref;

const int E1 = 7;
const int E2 = 4;
const int M1 = 6;
const int M2 = 5;

void setup()
{
  pinMode(M1, OUTPUT);
  pinMode(M2, OUTPUT);
  pinMode(E1, OUTPUT);
  pinMode(E2, OUTPUT);
  pinMode(Analog_pin, INPUT);
  pinMode(SERVO_PIN, OUTPUT);
  serv.attach(SERVO_PIN);
  serv.write(90);
  Serial.begin(115200); 
}

void loop()
{
  if (Serial.available())
  {;}
    char ch = Serial.read();
    switch(ch)
    {
    case '0'...'9':
      pos = pos * 10 + ch - '0';
      break;
    case 's':
      serv.write(pos);
      pos = 0;
      break;
      case 'a':
       avance();
       break;
       case 'r':
       recule();
       break;
       case 'd':
       droite();
       break;
       case 'g':
       gauche();
       break;
       case 'w':
       arret();
       break;
    }
    if(millis()>(milliref+1000))
    {
      milliref = milliref +1000;
    distance = analogRead(Analog_pin);
   distance = (distance * 10) / 241;//converti la val analogique en val numerique
    Serial.print(distance);
    }
}

void avance()
{
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  digitalWrite(M1, HIGH);
  digitalWrite(M2, HIGH);
}

void recule()
{
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  digitalWrite(M1, LOW);
  digitalWrite(M2, LOW);
}

void droite()
{
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  digitalWrite(M1, LOW);
  digitalWrite(M2, HIGH);
}

void gauche()
{
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  digitalWrite(M1, HIGH);
  digitalWrite(M2, LOW);
}

void arret()
{
  digitalWrite(E1, LOW);
  digitalWrite(E2, LOW);
  digitalWrite(M1, HIGH);
  digitalWrite(M2, HIGH);
}

le probleme est qu'il me revoi une valeur inverser plus je suis prés plus la valeur et grande le capteur et un capteur Sharp

Pouvez vous m'aidé??

#34 swolf

swolf

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 626 messages
  • Gender:Male

Posté 30 décembre 2011 - 02:58

c'est normal, c'est comme ça que ton capteur est fait: www.robotroom.com/DistanceSensor/Results.gif
tu dois donc inverser tes conditions.

par contre, pour ta conversion, je ne comprends pas trop (*10/241): tu veux convertir en quoi?
si tu veux convertir ta valeur en tension tu dois multiplier par 5 puis diviser par 1024 (si ton capteur est alimenté en 5V)
ensuite si tu veux le convertir en distance, il faut utiliser un tableau de valeurs (car la tension n'est pas proportionelle à la distance)
tu as un code d'exemple ici: arduino103.blogspot.com/2011/06/detecteur-de-proximite-infrarouge-sharp.html
Notre blog, à FJprod et moi: http://2froblog.wordpress.com/

#35 Guest_flo_*

Guest_flo_*
  • Guests

Posté 30 décembre 2011 - 08:10

Merci de toute vos reponse :D

le code et disponible sur le sujet androdroid




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users