Merci d'avance pour l'intêret que vous allez portez à ce post.
Comme je l'ai déjà préciser sur mon premier post sur ce forum, je cherche à contrôler un LCD (muni d'un S1D13700) à distance. J'ai donc tout d'abord contrôllé au Minima le LCD avec un Arduino Uno. j'ai ensuite créé une liaison série entre l'Arduino et un Pi tout d'abord très simpliste. On m'a ensuite demandé (je suis en stage) de trouvé un moyen d'envoyer les donnée de contrôle du PC jusqu'à l'Arduino. J'ai donc créer un serveur python qui s'occupe de gérer toute cette partie. Le problème est que maintenant je dois modifier mon programme Arduino pour répondre totalement aux cahier des charges.
Je vous met tout d'abord mes codes:
code python:
import socket
import serial
hote = ''
port = 3001
connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_principale.bind((hote, port))
connexion_principale.listen(2)
print("Le serveur ecoute a present sur le port {}".format(port))
connexion_avec_client, infos_connexion = connexion_principale.accept()
msg_recu = b""
while msg_recu != b"fin":
ser = serial.Serial('/dev/ttyACM0', 9600)
print("La connection Arduino Pi est realise")
msg_recu = connexion_avec_client.recv(1024)
choix = msg_recu[0:2]
texte = msg_recu[2:]
if choix == ('H.'):
ser.write('H.')
print(msg_recu)
elif choix == ('B.'):
ser.write('B.')
print(msg_recu)
elif choix == ('G.'):
ser.write('G.')
print(msg_recu)
elif choix == ('D.'):
ser.write('D.')
print(msg_recu)
elif choix == ('R.'):
ser.write('R.')
print(msg_recu)
elif choix == ('Q.'):
sys.exit(6)
print(msg_recu)
elif choix == ('T.'):
ser.write(texte)
print(msg_recu)
print(msg_recu.decode())
connexion_avec_client.send(b"connection reussi")
print("Fermeture de la connexion")
connexion_avec_client.close()
connexion_principale.close()
Ce code marche car je l'avais tester avant la modification du programme Arduino mais je le met quand même.
Le problème est que je cherche à isoler dans un premier cas les deux premier caractère d'octetReception pour pouvoir donner des ordres du LCD (ce qui pour le moment ne marche pas) et de récuperer les caractères d'octetReception allant du 3ème (après le ".") jusqu'aux "\n\r" pour le traiter et faire qu'après le curseur saute une ligne. Voilà je pense avoir tout expliqué, si besoin je peux répondre aux questions.
Merci d'avance.
Comme tu reçois les caractères un par un tu peux parcourir ta réception et placer les éléments dans tes variables au fur et à mesure en utilisant suivant le cas les IF/FOR/WHILE ?
Peux tu donner le masque de la chaine que tu reçois?
Tu extrais 2 caractères d'une chaîne avant même de t'être assuré que tu as une chaîne assez longue.
Il faudrait peut être attendre d'avoir reçu la chaîne complète avant de l'interpréter.
Bonjour,
Si l'on s'en référe à ça : toCharArray() - Arduino Reference
Il semblerai qu'il faille stocker la conversion dans un buffer, ce qui n'ai pas le cas ici :
Maintenant j'ai l'impression qu'on me demande l'impossible .
Je dois trouver un moyen de faire une rotation de l'affichage et un moyen de mettre en place plusieurs taille de police (sachant que c'est un S1D13700) je dois me taper S1D13700.cpp =(
avec la doc du S1D13700 que voilà: http://www.lcd-module.de/eng/pdf/zubehoer/s1d13700.pdf
J'ai donc trouvé Fx et Fy qui correspond au nombre de pixel en X et en Y mais je ne trouve pas MOD qui débloque le mod 16pixel(la taille la plus grande si j'ai bien compris).
Voilà peut être que si j'ai de la chance quelqu'un pourra m'aider sinon bah tant pis
Merci d'avance.