Caractère illisible sur une sortie standard

Lire la sortie /dev/ttyACM0 dans un programme Java

Le problème exposé dans ce sujet a été résolu.

Salut à tous !

Laissez-moi vous expliquer mon problème. J’ai fait un petit programme Arduino dans lequel je lui fais écrire dans la sortie standard des informations basiques (Via le port USB).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// Rien de très compliqué
void setup() {
 Serial.begin(9600);
}
void loop() {
 Serial.println(1);
 //Serial.write(5);
 delay(100);       
 //Serial.flush();
}

Mais lorsque j’essaie de récupérer ces informations, j’obtiens à la place des caractères illisibles, que ce soit en Java :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Lecture de la sortie avec RXTX
/dev/ttyACM0 - Serial
/dev/ttyS80 - Serial
/dev/ttyS0 - Serial
�

�
�

��
�
# etc...

Ou même dans une simple console

1
2
3
4
5
6
7
hichbra@Opti:~$ cat /dev/ttyS80
�hichbra@Opti:~$ cat /dev/ttyS80
����hichbra@Opti:~$ cat /dev/ttyS80
�����hichbra@Opti:~$ cat /dev/ttyS80
�����hichbra@Opti:~$ cat /dev/ttyS80
����hichbra@Opti:~$ cat /dev/ttyS80
�hichbra@Opti:~$ 

J’ai l’impression d’oublier quelque chose d’évident, mais rien à faire ça ne marche pas :( Auriez-vous des idées ?

+0 -0

Attention, écrire 1 est différent d’écrire '1' ou "1"

Eskimon

J’en ai conscience. J’ai essayé divers formats comme des entiers ou des chaînes, mais il y a toujours le même problème.

+0 -0

Pourquoi tu lis ttyS80 plutot que ACM0 comme marqué dans ton sous-titre ?

J’ai fait un lien symbolique avec la commande ln entre les deux sorties pour régler un autre problème et j’ai fini par oublier, désolé pour le manque de clarté ^^ .

TU peux tenter un picocom -b 9600 /dev/ttyACM0 ?

Eskimon
Pico
+0 -0

Raah c’est rageant, je ne comprends pas pourquoi picocom ou le moniteur du software Arduino parviennent à obtenir des choses correctes, mais que les lectures simples ne fonctionnent pas.

D’ailleurs picocom semble avoir le même problème au début de sa lecture, du coup j’ai pensé que c’était peut-être simplement des résidus qui compromettaient le début des données. Mais ça n’en a pas l’air :(

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
hichbra@Opti:~$ while(true) do
> cat /dev/ttyACM0
> done
�������������������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������������
+0 -0

Ok c’est résolu !

Exit Java et autres joyeusetés, je me reconvertis dans la Saint-Pythonerie. Pour ceux que ça intéresse :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import serial

ser = serial.Serial("/dev/ttyACM0",timeout=1)
print (ser)

capteur = -1
while 1:
    donnee=str(ser.readline())
    try:
        capteur = int(donnee)
    except ValueError:
        print("Error value ")

    ser.flush()
    print(capteur)
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte