Justement si je demande l'interet de faire une IHM sur la framboise (d'ailleur j'avais pas compris mais c'est apperement sur PC que tu essais) c'est pour eviter que tu utilises linux et le C mais une plateforme dans laquelle tu te sens a l'aise.
par exemple windows et visual basic
coté RPI un serveur socket , ca se code facilement y'a des tuto partout sur google pour faire ca sous linux :
Code: Select all
/* A simple server in the internet domain using TCP
The port number is passed as an argument */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
void error(const char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("message: %s\n",buffer);
n = write(newsockfd,"Hey Yves je suis ta framboise j'ai bien recu ton message",55);
if (n < 0) error("ERROR writing to socket");
close(newsockfd);
close(sockfd);
return 0;
}
a lancer comme ca : ./server 8888
voila coté framboise c'est reglé plus besoin d'y retourner (en fait si pour traiter les infos recues pour faire tourner les moteurs mais l'idée est la) pas besoin de GTK ou je sais pas quoi ni de "start
dux" , au revoir la surcharge ,
on oubli linux et le C
et coté Windows un client socket (pareil y'a des tutos partout)
la c'est en vb.net (visual basic express est gratuit) mais on peu le faire dans n'importe quel langage , celui qui te convient le mieux
juste changer l'ip par celle de la framboise dans la fonction Button2_Click a la place de 127.0.0.1:
Code: Select all
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim serverStream As NetworkStream
Dim readData As String
Dim infiniteCounter As Integer
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
End Sub
Private Sub msg()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf msg))
Else
TextBox1.Text = TextBox1.Text + _
Environment.NewLine + " >> " + readData
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
readData = "Conected to Chat Server ..."
msg()
clientSocket.Connect("127.0.0.1", 8888)
'Label1.Text = "Client Socket Program - Server Connected ..."
serverStream = clientSocket.GetStream()
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox3.Text + "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = _
New Threading.Thread(AddressOf getMessage)
ctThread.Start()
End Sub
Private Sub getMessage()
For infiniteCounter = 1 To 2
infiniteCounter = 1
serverStream = clientSocket.GetStream()
Dim buffSize As Integer
Dim inStream(1024) As Byte
buffSize = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0, buffSize)
Dim returndata As String = _
System.Text.Encoding.ASCII.GetString(inStream)
readData = "" + returndata
msg()
Next
End Sub
End Class
pour infiniteCounter c'est du n'importe quoi mais ca marche (surement trop simple de mettre un while)
ou a telecharger ici (comme ca y'a deja les boutons , textbox et tout le bordel visuel) :
http://vb.net-informations.com/communic ... client.zip
la ca envoie des chaines de caracteres des 2 cotés pour que ca soit plus visuel mais rien empeche (au contraire c'est mieux) d'envoyer des bytes a la place du genre :
0x01 = moteur
0x02 = gouvernail
et envoyer par paquet de 2 bytes (c'est plus rapide que d'envoyer une chaine de X caracteres et ca simplifie pour les boucles de reception car on sait qu'on va recevoir 2 bytes et pas X caracteres , en plus c'est cool pas besoin de chercher comment ca marche les chaines de caracteres) , le 2ieme etant la vitesse ou l'angle pour donner un truc comme ca :
0x01 0xFF // moteur pleine vitesse
0x01 0x80 // moteur a l'arret
0x01 0x40 // moteur a mi vitesse en marche arriere
0x02 0x80 // gouvernail tout droit
0x02 0xFF // gouvernail a fond a droite
0x02 0x00 // gouvernail a fond a gauche
0x02 0x40 // gouvernail a moitié a gauche
etc
bon allez meme un 3ieme byte qui serait un checksum histoire de verifier que y'a pas un bit de perdu en route
la c'est un serveur socket (parceque j'aime mieux , y'a rien a configurer) mais on peu tres bien appliquer le meme principe avec un serveur web (plutot php) histoire que ca marche avec le dernier iphone 8 gts turbo sans a avoir a le jailbreaker pour installer une appli client socket home made (parceque apple c'est des vilains qui bloquent tout mais ils ont raison , leurs clients adorent ca jusque dormir dans des tentes 3 jours avant la sortie de la pomme empoisonnée , peu etre que je m'egare un peu la)