Appel d'une méthode bluetooth dans une autre classe
Fermé
alex04_06
-
19 juin 2021 à 22:41
BunoCS
Messages postés15495Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 octobre 2024
-
22 juin 2021 à 12:45
Bonjour,
Je vais essayer de faire court, je souhaite faire une application android en java avec android studio. Pour ce faire, mon but est d'envoyer 4 bytes en bluetooth à une carte arduino dont 2 sont obtenues avec l'accéléromètre du téléphone.
Les bytes bverticale et brotation sont obtenue via des boutons dans l'application et je pense ne pas avoir de problèmes avec eux.
Là où c'est plus compliqué, c'est pour les deux autres. J'ai fais une classe MouvementView en dehors du MainActivity où se trouve ma classe MyBluetoothClass avec sa method qui m'intéresse, la writebyte(byte b) et mes 4 variables en bytes
La classe MouvementView me servait à la base pour afficher une image qui se déplace sur l'écran quand je bouge le téléphone. Le problème c'est que je n'arrivai plus à faire un onSensorChanged dans mon MainActivity. J'essaye donc d'envoyer mes 4 variables dans la classe MouvementView ainsi que ma méthode writebyte(byte b) et mes 4 setText (car oui, je souhaite aussi afficher les valeurs que j'envoies).
Sauf que voilà, j'ai assez peu d'expérience en java et malgré pas mal d'heures de recherche, je n'ai pas réussi à faire fonctionner mon writebyte(byte b) ou mon setText.
package fr.alexandre.xzurucontroller20;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MouvementView extends View implements SensorEventListener {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Bitmap droneBitmap;
private Bitmap centreBitmap;
private int imageWidth;
private int imageHeight;
private int currentX;
private int currentY;
private int centreX;
private int centreY;
private TextView textTransversale;
private TextView textLongitudinale;
private TextView textVerticale;
private TextView textRotation;
byte btransversale = 50;
byte blongitudinale = 50;
byte bverticale = 0;
byte brotation = 50;
public MouvementView(Context context){
super(context);
}
public MouvementView(Context context, AttributeSet attrSet){
super(context, attrSet);
}
@Override
public void onSizeChanged(int width, int height, int oldw, int oldh) {
super.onSizeChanged(width, height, oldw, oldh);
droneBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.drone);
centreBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.centre);
imageWidth = droneBitmap.getWidth();
imageHeight = droneBitmap.getHeight();
int imageCentreWidth = centreBitmap.getWidth();
int imageCentreHeight = centreBitmap.getHeight();
currentX = (width - imageWidth) / 2;
currentY = (height - imageHeight) / 2;
centreX = (width - imageCentreWidth) / 2;
centreY = (height - imageCentreHeight) / 2;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(droneBitmap, currentX, currentY, paint);
canvas.drawBitmap(centreBitmap, centreX, centreY, paint);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x = sensorEvent.values[0]-4;
if(x>5){
x = 5;
}else if (x<-5){
x = -5;
}
double dlongitudinale = 10 * x + 50;
blongitudinale = (byte) Math.floor(dlongitudinale);
float y = sensorEvent.values[1];
if(y>5){
y = 5;
}else if (y<-5){
y = -5;
}
double dtransversale = 10 * x + 50;
btransversale = (byte) Math.floor(dtransversale);
Log.i("DEBUG",x + " - " + y);
MainActivity.mybluetooth.writebyte(blongitudinale);
MainActivity.mybluetooth.writebyte(btransversale);
MainActivity.mybluetooth.writebyte(bverticale);
MainActivity.mybluetooth.writebyte(brotation);
this.moveImage( y*6,x*6);
}
public void moveImage(float x, float y){
currentX = (int) x*6 + (getWidth() - imageWidth)/ 2;
currentY = (int) y*6 + (getHeight() - imageHeight)/ 2;
this.invalidate();
}
public static void main(String[] args){
}
}
mise à part ce problème tout semble marcher correctement, bien que je ne peux pas encore tester le bluetooth (les setText sont aussi là pour vérifier ce que j'enverrai du coup)
Je suis conscient que c'est peut être un peu beaucoup demander mais bon, en tout cas merci à ceux qui essayent de m'aider.
Configuration: Windows / Chrome 91.0.4472.106
A voir également:
Appel d'une méthode bluetooth dans une autre classe
C'est cracra... Si tu veux utiliser des méthodes d'une classe parente, passes plutôt par le système de listener
Au niveau de l'écoute du Sensor, y'a du cafouillage il me semble : tu register la MainActivity mais tu veux traiter les changement dans la vue ? Il faut que tout soit au même endroit.
Essaies déjà de clarifier ces petites choses, tu y verras sûrement plus clair pour la suite.