Bonjour tout le monde,

Je suis nouveau sur le forum et débutant en programmation

J'ai besoin pour un projet de développer un oscilloscope logiciel pour afficher des signaux traités sur un arduino, les données sont envoyée sur le pc en rs232 à 9600bauds.

Ça fonctionne plutôt bien, mis a part le fait que j’obtiens une bonne dizaine de seconde de latence a partir de cinq secondes de fonctionnement ce qui rend son utilisation peu pratique.

J'aurai donc voulu savoir si ma méthode est bonne et si java est adapté à ce genre de contraintes (car le même code compilé sous processing en c++ est beaucoup plus reactif), merci d'avance.

j'ai simplifié le code au maximum pour simplifier la lecture

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
 
private void drawWave(){//affiche la courbe
 
        graph.setColor(Color.red);
 
 
        for(int i = 0 ; i<this.getWidth()-1 ; i++2){
 
            graph.drawLine(i, wave[i], i+1 , wave[i+1]);
 
        }
    }
 
 
    @Override
    protected void paintComponent(Graphics g){
 
        graph = (Graphics2D) g;
 
 
        graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
        graph.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
        graph.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
        graph.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);
        graph.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
        graph.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
 
        this.drawWave();
 
    }
 
 
 
    public void setWave(int data){//recois les donnees rs232
 
        for(int i=0 ; i<this.getWidth()-1 ; i++){//décale toutes les valeurs
                wave[i]=wave[i+1];    
        }
 
        wave[this.getWidth()-1]= data;//charge la derniere valeur
 
        this.repaint(); //actualise
    }