Show Posts
Pages: 1 [2] 3 4
16  International / Français / Re: FTP on: September 26, 2013, 06:08:58 am
Bonjour refsmmat,

Essaie d'ajouter
Code:
client.println(F("TYPE I"));
  if(!eRcv())
  {
    dclient.stop();
    return 0;
  }

juste avant
Code:
client.print(F("STOR "));



Hi refsmmat,

Try adding

Code:
client.println(F("TYPE I"));
  if(!eRcv())
  {
    dclient.stop();
    return 0;
  }

just before
Code:
client.print(F("STOR "));
17  International / Français / Re: FTP on: September 26, 2013, 03:37:34 am
Simplfie FTPclose() comme suit et ça devrait aller:

Code:
byte FTPclose()
{
  Serial.println(F("Close FTP -----------------------"));

  client.stop();
  Serial.println(F("Command disconnected"));

  Serial.println(F("--------------------------------"));
}

d'ailleurs en regardant eRecv() je me dis que c'est un coup de bol que ça marche… le code d'exemple ftp qui t'a servi de base (et issu du site arduino) est bien crade…  smiley-cry
parce que le jour où le serveur répondra plus lentement (genre via une connexion gsm) ou de façon irrégulière, ça ira droit dans le mur…
il aurait fallu que l'auteur initial ait parsé correctement la réponse du serveur plutôt que de tout lire en vrac en espérant que ça arrive en continu sans à-coups…
18  International / Français / Re: [Automatisme] Portail et arduino on: September 25, 2013, 03:01:15 am
ce que j'ai fait pour mon portail Somfy:

achat d'une télécommande supplémentaire et soudage de quelques fils au niveau du bouton poussoir, relié à l'arduino via un optopcoupleur et je le commande via une pin digitale.

ça doit marcher pour à peu près toutes les marques je pense ?
19  International / Français / Re: FTP on: September 25, 2013, 12:35:23 am
- est-ce que "command disconnected" apparaît dans la console ?

- retire le serial.print(c) dans la boucle de ftpdownload()
20  International / Français / Re: FTP on: September 24, 2013, 03:31:11 pm
Tu n'as pas le retour "226 transfer complete" après ton upload car tu ne le lis pas dans ftpupload() puisqu'il y manque un eRecv()...

Je le repère encore une fois:

tu as bien mis
Code:
  if(!eRcv())
    return 0;
à la fin de FTPUpload, juste avant "return 1" ?

Et tant que tu y es, fais pareil pour ftpdownload()...
21  International / Français / Re: FTP on: September 24, 2013, 05:00:15 am
tu as bien mis
Code:
  if(!eRcv())
    return 0;
à la fin de FTPUpload, juste avant "return 1" ?
22  International / Français / Re: FTP on: September 23, 2013, 03:37:44 pm
1. Dans ftpopen () tu n'as pas mis de return avec une valeur différente de zéro en cas de succès, du coup tu l'appelle à nouveau... D'ailleurs quand tu ouvre le serial, le sketch repart du début avec setup(), il vaudrait mieux mettre tout le contenu de loop() à la fin du setup() et rien dans loop(). Donc ton test bizarre avec ftpopen() peut être retiré.
2. À la fin du ftpuload () tu dois lire la réponse du serveur (habituellement "226 transfer complete") avant de passer à la suite - comme tu ne le fais pas, tu es décalé et tu l'analyse après l'envoi de la command PASV dans ftpdownload().
3. De même il faut lire la réponse du serveur à la fin du ftpdownload ().
4. En cas d'erreur, Quand tu fais un dclient.close() suivi de return 0, il manque le fh.close() dans certains cas.

La suite demain, il est tard smiley
23  International / Français / Re: FTP on: September 23, 2013, 11:08:20 am
Quote
Du coup, la fonction FTPopen(), ce n'est que ça, on est d'accord?

Oui, tout à fait smiley
Supprime quand même le fh.close() (dans ftpopen()).
D'ailleurs fh aussi devrait être une variable locale à ftpuload() et ftpdownload().
24  International / Français / Re: FTP on: September 23, 2013, 10:14:25 am
oui, fermer proprement la socket de data (et pour le upload ça indique au serveur que le fichier que tu envoie est complet), mais aussi rouvrir la socket de données à chaque fois: la partie du FTPOpen () qui envoie la command PASV devrait être à la fois au début de FTPUpload () et de FTPDownload ().


Code:

  client.println(F("PASV"));

  if(!eRcv()) return 0;

  char *tStr = strtok(outBuf,"(,");
  int array_pasv[6];
  for ( int i = 0; i < 6; i++) {
    tStr = strtok(NULL,"(,");
    array_pasv = atoi(tStr);
    if(tStr == NULL)
    {
      Serial.println(F("Bad PASV Answer"));    

    }
  }

  unsigned int hiPort,loPort;

  hiPort = array_pasv[4] << 8;
  loPort = array_pasv[5] & 255;

  Serial.print(F("Data port: "));
  hiPort = hiPort | loPort;
  Serial.println(hiPort);

  if (dclient.connect(server,hiPort)) {
    Serial.println(F("Data connected"));
  }
  else {
    Serial.println(F("Data connection failed"));
    client.stop();
    fh.close();
    return 0;
  }


d'ailleurs du coup la variable dclient pourrait être locale à FTPUpload () et FTPDownload (), de même que outBuf et outCount, mais là c'est du chipotage smiley

edit: et il manque aussi fh.close () dans FTPUpload () et FTPDownload ()…
25  International / Français / Re: FTP on: September 23, 2013, 07:43:04 am
Ça ne marche pas parce que tu ne gère pas correctement le protocole FTP:
Tu devrais refermer la socket de données après l'upload du fichier et la rouvrir avant le download de l'autre fichier.
26  Using Arduino / Programming Questions / Re: Ethernet Shield Incorrectly Displays HTML Page from SD on: September 21, 2013, 03:10:41 am
Try replacing

Code:
 client.println("Content-Type: text/htm");

By

Code:
 client.println("Content-Type: text/html");
27  International / Français / Re: Explication methode Get on: September 20, 2013, 08:49:00 am
Bon en fait après relecture de la doc il n'y a peut-être pas de champ obligatoire dans l'entête... Peut-être que ça dépend aussi du serveur auquel tu te connectes...

Pour voir si ta requête est correcte tu peux tenter de l'envoyer au serveur depuis ton Mac ou Pc en telnet, ça sera plus simple pour la mise au point.
Quand ça marche en telnet tu continues avec l'arduino...
28  International / Français / Re: Explication methode Get on: September 20, 2013, 08:28:55 am
Google est ton ami: fais une recherche avec 'http rfc'
Comme ça tu verras que ta requête http est mal construite...

Il me semble qu'il y a des champs obligatoires dans l'entête...
29  International / Français / Re: Limite mémoire Mega2560 on: September 17, 2013, 08:17:29 am
pourquoi avoir changé l'appel à Tab.Mes(val) ?
remets-le comme avant et ne change que la déclaration de mes[1000][2] dans la classe Tab…

sinon remets tout le code suite à tes modifs
30  International / Français / Re: Limite mémoire Mega2560 on: September 17, 2013, 04:44:31 am
dans la class TAB, le tableau mes[][2] n'est pas alloué puisque pas de taille max définie

deux solutions:
- allocation statique: mes[1000][2] pour 1000 mesures par ex.
- allocation dynamique: utiliser malloc (plus compliqué)
Pages: 1 [2] 3 4