Aide WiFi - Drone terrestre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Aide WiFi - Drone terrestre

Message par Dumli »

Salut tout le monde :D

Vu que mon dernier topic s'égarait un peu du sujet initial, j'ai décider d'en créer un nouveau, tout beau, tout propre :P

Le problème se trouve au niveau du contrôle à distance (WiFi voir ci-dessous) :wink:

Je suis en classe de Terminale et j'ai un PPE (Projet Personnel Encadré) à réaliser d'ici la fin de l'année donc dans très peu de temps ... Mon projet est de "retapé" une vieille voiture RC pour en faire une sorte de drone. Nous avons désossé le bolide et avons gardé seulement le moteur et l'électro-aimant qui sert à contrôler la direction.
Image

Nous avons étudier le moteur ainsi que le fonctionnement de la voiture pour pouvoir acheter les bons composants. En voici la liste : Contrôle à distance :

C'est la que les choses se corsent ! :lol: D'après mes recherches, notre shield WiFi (semblable au WiShield d'asynclabs) pourrait nous permettre de dialoguer avec le PC branché sur le même réseau. Pour cela, il faudrait que l'on développe une SocketApp mais je ne mis connais pas assez pour y arriver seul ... :? Donc si quelqu'un connait ou comprends son fonctionnement, merci de m'éclairer sur le sujet :roll:

Contrôle de la direction :

La direction de la voiture est contrôlée par un électro-aimant qui va sous l'effet d'une tension créer un champ magnétique et ainsi braquer les roues :
Le sens de "braquage" dépend du sens du courant. Il suffit d'inverser les bornes pour qu'il braque dans l'autre sens. Nous avons donc fabriquer un Pont en H qui va permettre d'inverser le sens du courant via la carte arduino.
Schéma :
Image

Circuit :
Image


Contrôle de la vitesse :

Nous avons acheter une carte de puissance pour pouvoir contrôler un moteur 1-2A. Rien de bien compliquer ensuite, il nous a suffit de coder un petit programme pour pouvoir contrôler la vitesse et le sens de rotation du moteur.
Dernière modification par Dumli le dim. 29/avr./2012 10:08, modifié 4 fois.
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Drone terrestre

Message par lepiaf31 »

J'ai pas vraiment eu le temps de regarder tout ca mais j'ai converti le code qu'il y avait dans le le lien que tu as laissé en PB:

Code : Tout sélectionner

EnableExplicit

#PORT = 1000        ;port d'ecoute
#MAXDATASIZE = 100  ;taille maximale que WiShield peut envoyer en une seule fois

Procedure main()
  Protected sockfd.i, nbBytes.i, *buffer, srv.SOCKADDR_IN, buffer_len.i, name.s
  
  OpenConsole()
  *buffer = AllocateMemory(#MAXDATASIZE)
  
  srv\sin_family = #AF_INET
  srv\sin_port = htons_(#PORT)
  srv\sin_addr = MakeIPAddress(192, 168, 1, 2)  ;ip 192.168.1.2
  
  sockfd = SOCKET_(#PF_INET, #SOCK_STREAM, #IPPROTO_TCP)
  If sockfd = -1
    PrintN("Erreur lors de la creation du socket")
    ProcedureReturn 1
  EndIf
  
  If connect_(sockfd, @srv, SizeOf(SOCKADDR_IN)) = -1
    PrintN("Erreur lors de la connexion")
    ProcedureReturn 2
  EndIf
  PrintN("Connecté au WiShield")
  
  ;Attente du message d'accueil
  If (nbBytes = recv_(sockfd, *buffer, #MAXDATASIZE, 0)) = -1
    PrintN("Erreur lors de la reception du message d'accueil")
    ProcedureReturn 3
  EndIf
  PrintN(PeekS(*buffer, nbBytes))
  
  ;récupération du nom
  name = Input()
  name + #LF$
  
  ;Envoi de la réponse
  If send_(sockfd, @name, Len(name)+1, 0) = -1
    PrintN("Erreur lors de l'envoi de la réponse")
    closesocket_(sockfd)
    ProcedureReturn 4
  EndIf
  
  ;Récuperation de la réponse
  Repeat
    If (nbBytes = recv_(sockfd, *buffer, #MAXDATASIZE, 0)) = -1
      PrintN("Erreur lors de la reception")
      ProcedureReturn 5
    EndIf
    PrintN(PeekS(*buffer, nbBytes))
    
    If PeekS(*buffer+nbBytes-1, 1) = #LF$
      Break
    EndIf
  ForEver
  
  ;fermeture de la connexion
  closesocket_(sockfd)
  
  ProcedureReturn 0
EndProcedure
  
  
main()
Input()
End
En espérant que ca puisse t'aider.
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Drone terrestre

Message par Dumli »

Merci beaucoup lepiaf ! 8O Ça me sera forcément utile, en plus je m'en suis servit pour comprendre le principe de fonctionnement car je trouve le langage BASIC plus clair que le langage Arduino :lol:
Dernière modification par Dumli le dim. 29/avr./2012 10:02, modifié 1 fois.
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

Quand j'execute le code de lepiaf j'obtiens constamment le message d'erreur : "Erreur lors de la creation du socket" donc le programme renvoi -1 ici :

Code : Tout sélectionner

sockfd = SOCKET_(#PF_INET, #SOCK_STREAM, #IPPROTO_TCP)
  If sockfd = -1
    PrintN("Erreur lors de la creation du socket")
    ProcedureReturn 1
  EndIf
:?
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Aide WiFi - Drone terrestre

Message par Ar-S »

Peut être faut il mettre un initnetwork() en début de code si ce n'est pas fait non ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

Merci Ar-S, c'était bien ça :wink:

Je suis parvenu à envoyer des valeurs à la Arduino via le WiFi ! :mrgreen: Merci à toutes les personnes qui m'ont aidé

Pour ceux qui veulent, je laisse le CODE SOURCE :wink:

Pour y arriver j'ai du passer par Python :? Voici le programme en Python, coté PC :

Code : Tout sélectionner

#!/usr/bin/python

import socket
import time

HOST = '192.168.0.100'     # The remote host
PORT = 1000               # The same port as used by the server

def sendValue(value):
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((HOST, PORT))
   s.send(str(value) + '\n')
   s.close()

sendValue(1)
time.sleep(1)
sendValue("1")

sendValue(2)
time.sleep(1)
sendValue("2")

sendValue(3)
time.sleep(1)
sendValue("3")

sendValue(4)
time.sleep(1)
sendValue("4")

sendValue(5)
time.sleep(1)
sendValue("5")

sendValue(6)
time.sleep(1)
sendValue("6")
Il se contente d'envoyer des valeurs de 1 à 6

Voici les codes pour l'Arduino qui interprètent ces valeurs :
Socket.pde

Code : Tout sélectionner

/*
* Socket App
 *
 * A simple socket application example using the WiShield 1.0
 */

#include <WiShield.h>

//Wireless configuration defines ----------------------------------------
#define WIRELESS_MODE_INFRA   1
#define WIRELESS_MODE_ADHOC   2

//Wireless configuration parameters ----------------------------------------
unsigned char local_ip[]       = {
  192,168,0,100};  // IP address of WiShield
unsigned char gateway_ip[]     = {
  192,168,0,47};     // router or gateway IP address
unsigned char subnet_mask[]    = {
  255,255,255,0}; // subnet mask for the local network
const prog_char ssid[] PROGMEM = {
  "JPPW"};    // max 32 bytes
unsigned char security_type    = 2;               // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {
  "0123456789"};   // max 64 characters
// WEP 128-bit keys
prog_uchar wep_keys[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Key 0
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Key 1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Key 2
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Key 3
// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------

char recvChar;

void setup()
{
  //set up serial communications
  Serial.begin(9600);
  pinMode(4, OUTPUT);

  //set up global recvChar to indicate nothing received
  recvChar = NULL;
  WiFi.init();
}

void loop()
{
  if(NULL != recvChar) {
    Serial.print("Received: ");
    Serial.print(recvChar);
    Serial.print(" [");

    switch(recvChar) {
    case '1':
      Serial.println("forward]");
      digitalWrite(4, HIGH); //-------------------------------------------------- ICI commande du PIN 4 -------------------------------------------------------------
      Serial.println("Commande envoyée");
      delay(300);
      break;
    case '2':
      Serial.println("backward]");
      break;
    case '3':
      Serial.println("turn right]");
      break;
    case '4':
      Serial.println("turn left]");
      //your control code goes here...
      break;
    case '5':
      Serial.println("stop]");
      break;
    default:
      Serial.println("unexpected value received]");
      break;
    }

    //we have handled the last data receive so clear recvChar so that we don't handle the same data again.
    recvChar = NULL;
  }

  WiFi.run();
}
Socket.c

Code : Tout sélectionner

/******************************************************************************

  Filename:      socketapp.c
  Description:   Simple socket programming example for the WiShield 1.0

******************************************************************************

  TCP/IP stack and driver for the WiShield 1.0 wireless devices

  Copyright(c) 2009 Async Labs Inc. All rights reserved.

  This program is free software; you can redistribute it and/or modify it
  under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  more details.

  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.

  Contact Information:
  <asynclabs@asynclabs.com>

   Author               Date        Comment
  ---------------------------------------------------------------
   AsyncLabs         06/06/2009   Initial version

*****************************************************************************/

/*
* This is a short example of how to write uIP applications using
* protosockets.
*/

/*
* We define the application state (struct socket_app_state) in the
* socketapp.h file, so we need to include it here. We also include
* uip.h (since this cannot be included in socketapp.h) and
* <string.h>, since we use the memcpy() function in the code.
*/
#include "socketapp.h"
#include "uip.h"
#include <string.h>

extern char recvChar;

/*
* Declaration of the protosocket function that handles the connection
* (defined at the end of the code).
*/
static int handle_connection(struct socket_app_state *s);
/*---------------------------------------------------------------------------*/
/*
* The initialization function. We must explicitly call this function
* from the system initialization code, some time after uip_init() is
* called.
*/
void socket_app_init(void)
{
   /* We start to listen for connections on TCP port 1000. */
   uip_listen(HTONS(1000));
}
/*---------------------------------------------------------------------------*/
/*
* In socketapp.h we have defined the UIP_APPCALL macro to
* socket_app_appcall so that this function is uIP's application
* function. This function is called whenever an uIP event occurs
* (e.g. when a new connection is established, new data arrives, sent
* data is acknowledged, data needs to be retransmitted, etc.).
*/
void socket_app_appcall(void)
{
   /*
    * The uip_conn structure has a field called "appstate" that holds
    * the application state of the connection. We make a pointer to
    * this to access it easier.
    */
   struct socket_app_state *s = &(uip_conn->appstate);

   /*
    * If a new connection was just established, we should initialize
    * the protosocket in our applications' state structure.
    */
   if(uip_connected()) {
      PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
   }

   /*
    * Finally, we run the protosocket function that actually handles
   * the communication. We pass it a pointer to the application state
   * of the current connection.
   */
   handle_connection(s);
}
/*---------------------------------------------------------------------------*/
/*
* This is the protosocket function that handles the communication. A
* protosocket function must always return an int, but must never
* explicitly return - all return statements are hidden in the PSOCK
* macros.
*/
static int handle_connection(struct socket_app_state *s)
{
   if(uip_newdata()) {
      PSOCK_BEGIN(&s->p);
      PSOCK_READTO(&s->p, '\n');
      recvChar = s->inputbuffer[0];
      PSOCK_CLOSE(&s->p);
      PSOCK_END(&s->p);
   }
   else {
      //if no new data is received set our global into to 0 to indicate no new data
      recvChar = NULL;
   }
}
/*---------------------------------------------------------------------------*/
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

C'est bon tout fonctionne ! :D J'ai juste un petit bug de temps en temps sur mon Serveur. Je pense qu'il est très mal optimisé et en plus, je voudrais mettre une tempo pour éviter de surcharger la Arduino d'information.

Voici le code en Python :

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: cp1252 -*-

import socket
import time
import pythoncom, pyHook

HOST = '192.168.0.100'     # IP du WiShield
PORT = 1000                # Port du serveur ET du WiShield utilisé
delay = 1                 # Délai d'attente pour la Arduino
key = ""

print("Mise en place des définitions ...")

def sendValue(value):
   print("En attente de création du socket ...")
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   print("Socket créé avec succés")
   print("En attente de connexion ...")
   s.connect((HOST, PORT))
   print("Serveur connecté au WiShield [" + str(HOST) + "] et écoute le port : " + str(PORT))
   s.send(value + '\n')
   s.close()

print("sendValue : OK")

def OnKeyboardEvent(event):
   key = event.GetKey()
   print("En attente d'envoi du message ...") 
   sendValue(key)
   print("Message envoyé : " + key + " !")

print("OnKeyboardEvent : OK")

def key() :
   # create a hook manager
   hm = pyHook.HookManager()
   # watch for all keyboard events
   hm.KeyDown = OnKeyboardEvent
   # set the hook
   hm.HookKeyboard()
   # wait forever
   pythoncom.PumpMessages()

print("key : OK")

while 1:
   print("Mise en route de l'essai ...")
   print("Saisie des touches opérationnel !")
   key()
Vous en pensez quoi ?   :|
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide WiFi - Drone terrestre

Message par Backup »

Dumli a écrit :
Vous en pensez quoi ?   :|
que ça a l'air bien sympath , mais que c'est pas du Purebasic
mais du Python , et du C :lol:
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

Voila, j'ai modifié le code de lepiaf pour faire un serveur semblable à celui fait en python (voir code ci-dessous) Content le Dobro ? :lol: Non mais je comprends que sur un forum PB un code en python n'a pas grand-chose à faire là :mrgreen:

Par contre, je ne comprends pas pourquoi je ne peux envoyer qu'une seule fois un message ? La boucle se fait une première fois sans problème puis se bloque à "Début de la procédure d'envoi !" :|

Code : Tout sélectionner

EnableExplicit
InitNetwork()

#PORT = 1000        ;Port d'ecoute
#MAXDATASIZE = 100  ;Taille maxiamale d'envoi

Procedure main()
  Protected sockfd.i, nbBytes.i, *buffer, srv.SOCKADDR_IN, buffer_len.i, name.s
  
  OpenConsole()
  *buffer = AllocateMemory(#MAXDATASIZE)
  
  srv\sin_family = #AF_INET
  srv\sin_port = htons_(#PORT)
  srv\sin_addr = MakeIPAddress(192, 168, 0, 100)  ;IP Adresse du WiShield
  
  PrintN("Connection en cours ...")
  
  sockfd = SOCKET_(#PF_INET, #SOCK_STREAM, 0)
  If sockfd = -1
    PrintN("Erreur lors de la creation du socket")
    ProcedureReturn 1
  EndIf
  
  If connect_(sockfd, @srv, SizeOf(SOCKADDR_IN)) = -1
    PrintN("Erreur lors de la connexion")
    ProcedureReturn 2
  EndIf
  PrintN("Connection au Wishield etablie !")
  PrintN("Deconnexion et lancement de la procedure ...")
  closesocket_(sockfd)
  
  Repeat
    
    PrintN("Début de la procédure d'envoi !") ;--------------------------------------Bloque au 2nd passage ici---------------------------------------
    
    sockfd = SOCKET_(#PF_INET, #SOCK_STREAM, 0)
    If sockfd = -1
      PrintN("Erreur lors de la creation du socket")
      ProcedureReturn 1
    EndIf
    
    If connect_(sockfd, @srv, SizeOf(SOCKADDR_IN)) = -1
      PrintN("Erreur lors de la connexion")
      ProcedureReturn 2
    EndIf
    
    PrintN("Commande à envoyer (L/R/U/D) : ")
    name = Input()
    name + #LF$
    
    ;Envoi de la réponse
    If send_(sockfd, @name, Len(name)+1, 0) = -1
      PrintN("Erreur lors de l'envoi de la reponse")
      closesocket_(sockfd)
      ProcedureReturn 4
    EndIf
    
  ForEver
  
  ;fermeture de la connexion
  closesocket_(sockfd)
  
  ProcedureReturn 0
EndProcedure

main()
Input()
End
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Aide WiFi - Drone terrestre

Message par G-Rom »

pourquoi tu n'utilises tu pas la lib network de pb ? 8O
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

Tout simplement parce que je n'y comprends rien :lol: Lepiaf avait traduit ce bout de code et il fonctionnait, voila tout. Par exemple, dans la lib PB ils mettent : SendNetworkData(Connexion, *BufferMemoire, Longueur) mais je ne sais pas comment définir ce qu'il faut mettre dans le Buffer

Code : Tout sélectionner

*Buffer = Input()
:| et idem dans la partie "Connexion"

De toute façon, je ne pense pas que ce soit l'équivalent d'une SocketApp si je fais avec la lib PB
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Aide WiFi - Drone terrestre

Message par lepiaf31 »

Dumli a écrit : Par contre, je ne comprends pas pourquoi je ne peux envoyer qu'une seule fois un message ? La boucle se fait une première fois sans problème puis se bloque à "Début de la procédure d'envoi !" :|
Je pense que tu dois fermer la connexion avant d'en faire une nouvelle. Donc mets ceci à l'interieur de la boucle (et pas à l'exterieur):

Code : Tout sélectionner

  ;fermeture de la connexion
  closesocket_(sockfd)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Aide WiFi - Drone terrestre

Message par G-Rom »

si , pb utilise les sockets aussi, mais de façon transparente.
je ne sais pas comment définir ce qu'il faut mettre dans le Buffer
il attends quoi ton drone comme donnée ?

Code : Tout sélectionner

*BufferMemoire = allocatememory(4) ; 4 car un float fait 4 octets
pokef(*BufferMemoire, #pi) // stock
debug peekf(*BufferMemoire)// lecture 
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Aide WiFi - Drone terrestre

Message par Dumli »

@Lepiaf Biensur ! :oops:

@G-Rom Le drone attend de recevoir z,q,s ou d. Mon but serait de le faire avancer quand je maintiens z enfoncé. Cependant, il faudrait que constamment je test la connection entre le serveur et la arduino pour éviter de perdre le contrôle du drone ! Ainsi, si se test échoue le drone s'arrete (ça evite qu'il fonce contre un mur quand la liaison WiFi se coupe :mrgreen: )
Que signifie #pi ?
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Aide WiFi - Drone terrestre

Message par G-Rom »

#pi bas c'est une constante mathématique :roll: 3.1415... etc


et ca ? ca ne marche pas ?

Code : Tout sélectionner

IPDRONE$    = "192.168.0.100"
PORTDRONE.i = 1000

InitNetwork()

Connection = OpenNetworkConnection(IPDRONE$,PORTDRONE,#PB_Network_TCP)


*FORWARD_CMD  = AllocateMemory(1)
*BACKWARD_CMD = AllocateMemory(1)
*LEFT_CMD     = AllocateMemory(1)
*RIGHT_CMD    = AllocateMemory(1)

; ATTENTION A LA CASE !   Z != z
PokeC(*FORWARD_CMD,  Asc("z"))
PokeC(*BACKWARD_CMD, Asc("s"))
PokeC(*LEFT_CMD,     Asc("q"))
PokeC(*RIGHT_CMD,    Asc("d"))


If Connection
  
  
  ; On avance
  SendNetworkData(Connection, *FORWARD_CMD , SizeOf(*FORWARD_CMD) )
  
  ; on attend une seconde
  Delay(1000)
  
  ; on va à droite
  SendNetworkData(Connection, *RIGHT_CMD , SizeOf(*RIGHT_CMD) )
  
    
  
EndIf 
Répondre