Show Posts
Pages: 1 ... 3 4 [5] 6 7
61  International / Français / Re: linux: script pour ouvrir un fichier.pde avec arduino on: March 04, 2012, 04:55:47 pm
Ah oui j'avais mal interprété la signification des ... smiley

Ça marche! Merci beaucoup!
Youp
62  International / Français / Re: linux: script pour ouvrir un fichier.pde avec arduino on: March 04, 2012, 11:53:38 am
Merci Zoroastre.

Après avoir fait la modif de ce fichier, j'obtiens ce message :

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel processing.app.Base "$SKETCH" &
Exception in thread "main" java.lang.NoClassDefFoundError: processing/app/Base
Caused by: java.lang.ClassNotFoundException: processing.app.Base
   at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: processing.app.Base. Program will exit.


Le fichier modifié en question:
Code:
#!/bin/sh
 
APPDIR=/usr/share/arduino

cd $APPDIR

if [ "$1" ]; then
  SKETCH=`readlink -f $1`
else
  SKETCH=
fi
63  International / Français / [résolu] linux: script pour ouvrir un fichier.pde avec arduino on: March 04, 2012, 10:19:36 am
Bonjour!!
Comme l'indique le titre j'essaie de me faire un petit script bash pour lancer plusieurs programmes en même temps (Processing, Arduino et quelques fichiers textes).

Je ne parviens pas à ouvrir mon fichier .pde avec Arduino.
La commande suivante m'ouvre Arduino sans ouvrir le fichier:
Code:
arduino [chemin]/fichier.pde
Alors que ça marche très bien avec les .pde de Processing.

Une idée?
64  International / Français / Re: RXTX Version mismatch Processing on: February 27, 2012, 06:04:20 pm
Quote
J'ai retrouvé le lien qui va bien dans mes bookmarks :
http://wiki.processing.org/w/Serial_Issues

Oui je suis également tombé sur cette page et suivi les consignes, en vain.

Quote
Suivant la plateforme il faut ajouter/modifier les droits d'accès aux port série et/ou faire un lien symbolique.

C'était effectivement le problème.

J'ai pu résoudre mon problème après avoir trouvé ce magnifique how-to qui permet de faire une install parfaite smiley

http://www.edwards.je/2011/11/11/processing-arduino/

Il est pour Fédora mais ça change presque rien.
Il faut juste faire gaffe au répertoire de rxtx qui (chez moi) est: /usr/lib/jni/librxtxSerial.so

Donc c'était la ligne avec le chmod qui me manquait.
En passant, on nous propose de remplaçer les 2 fichiers rxtx de Processing par des liens symboliques vers les fichiers systèmes.
Je trouve cette solution bien plus "propre", mieux que de les copier et avoir les fichiers en double sur sa machine avec des versions différentes (voir le how-to en question si je ne me fais pas très bien comprendre).

Et voila!!
Promblem solved!
65  International / Français / Re: RXTX Version mismatch Processing on: February 25, 2012, 10:20:58 am
Ubuntu 11.10
Processing 1.5.1
Arduino 0022

En effet ça compile mais sans communiquer avec arduino.
Au début je pensais que c'était mon code mais même avec un programme tout simple ça ne marche pas:

Arduino:
Code:
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("coucou");
}

Processing:
Code:
import processing.serial.*;
Serial myPort;  // The serial port

void setup() {
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
  while (myPort.available() > 0) {
    int inByte = myPort.read();
    println(inByte);
  }
}
66  International / Français / [résolu] RXTX Version mismatch Processing on: February 24, 2012, 11:18:55 pm
Bonsoir!
Ça fait un bout de temps que je ne suis pas venu sur le forum! Je suis content d'être de retour smiley
J'ai du arrêter de bidouiller mon arduino pendant quelques semaines (partiels oblige smiley-wink )

Depuis j'ai ré-installé mon Linux, j'ai donc perdu toutes les config que j'avais réalisées pour utiliser Processing.
Je bute sur un problème que j'ai résolu par le passé, impossible de me rappeler ce que j'avais fait...  smiley-cry

C'est tout bête, donc, j'ai l'erreur WARNING:  RXTX Version mismatch à la compil.
J'ai téléchargé rxtx-2.2pre2, j'ai remplacé tous les fichiers librxtxSerial.so et les RXTXcomm.jar par leur nouvelles versions.

J'ai toujours la même erreur.
Il faut faire autre chose après?

Merci pour l'aide
Youp
67  International / Français / Re: arduino, eclipse et le C on: January 07, 2012, 08:30:09 am
Je n'ai toujours pas réussi à configurer Eclipse smiley-sad
J'ai cette fois-ci suivi un tuto qui n'a rien à voir avec arduino, et toujours la même erreur.
Je ne vois pas d'où peut provenir cette erreur.
Je suis sous ubuntu 11, j'ai installé les paquets nécessaires à avrdude en ligne commande, ainsi que le plugin AVR eclipse.
68  International / Français / Re: Serial.begin() dans une biliothèque on: January 01, 2012, 07:34:01 pm
Quote
Ne rien faire dans le constructeur.
Pourquoi? :p
Je débute un peu en poo, en fait le constructeur est réservé à quel usage?

Skywodd, décidément t'es partout smiley
Je n'ai pas mon pc sur place pour tester exactement ton code, mais il me semblait que dans ce cas le port série était accessible uniquement dans le constructeur, donc inutilisable dans mehode1.
Je suppose qu'il n'est pas obligatoire de mettre la vitesse du port série en entrée du constructeur, on peut écrire directement Serial.begin(9600) ?
Ceci dit si ça marche c'est cool car cela m'intéresse de ne pas avoir à faire le serial.begin() dans mon fichier pde.
Je vous tiens au courant, je pourrais faire les tests demain soir.

Youp.
69  International / Français / Serial.begin() dans une biliothèque on: December 29, 2011, 08:32:01 pm
Salut à tous, et encore une fois bonnes fêtes smiley

Je suis en train de réaliser une biblio qui doit communiquer via le port série.
J'ai fait un Serial.begin(); dans le setup de mon .pde et jusque là tout va bien.
J'aimerais maintenant utiliser le port série dans le constructeur de ma fonction.
Seulement ça ne marche pas car j'appelle mon constructeur avant le Serial.begin();

Un joli exemple pour expliquer mes explications pas très explicites:

Biblio.h :
Code:
#include "WProgram.h"
#include "Biblio.h"
Bidule::Bidule() {
  Serial.println("bonne année");
}
Bidule::methode1() {
  Serial.println("joyeux nowel");
}

test.pde :
Code:
#include <Biblio.h>

Bidule toto();

void setup() {
  Serial.begin(9600);
  toto.methode1();
}
void loop() { while(1) {} }

J'ai pas testé ça, il manque peut-être des trucs mais globalement c'est le principe.
Cela affiche uniquement joyeux nowel.
70  International / Français / Re: naviguer dans une chaine de caractère (ou un fichier) on: December 28, 2011, 05:14:20 pm
Oh pardon, j'avais pas lu ton code...
C'est du abrégé dis donc smiley-grin
Que signifie if (!motDeb[++i]) ?
Pour le reste, on m'a appris a ne faire qu'un seul return en fin de fonction, donc je vais laisser comme tel.
Tant pis si ça prends un booléen en plus, pour la place que ça prends :p
71  International / Français / Re: naviguer dans une chaine de caractère (ou un fichier) on: December 28, 2011, 03:17:04 pm
Voici une version un peu modifiée.
J'ai donc renvoyé donc le int et -1 s'il n'arrive pas a ouvrir le fichier.
Le strcat(motDeb , "=\""); rajoute les caractères =" au mot cherché.

Exemple du fichier xml:
width="120mm"
Un recupSD(valeur, "width") va donc chercher width=" , puis récupérer les car. jusqu'au prochain " , ce qui renvoie ici 120mm .

Du coup je me suis aperçu d'une anomalie: je modifiais *motDeb, du coup la fonction est foireuse si on l'appelle plusieurs fois de suite.
Bug rectifié sur la version ci-dessous : en-tête de fonction avec un const char *mot, pour être sur de ne rien toucher, et je copie son contenu dans une nouvelle chaîne: motDeb.

Code:
int recupSD(char *valeur, const char *mot)
{
  // crée une chaine de la meme taille que *valeur
  // +2 pour (=") + 1 pour le \0
  char motDeb[strlen(mot)+3];
  strcpy(motDeb, mot);
  strcat(motDeb , "=\""); // ajoute le (=")
 
  char carFin = '\"'; // va récupérer les car. jusqu'aux guillemets

  File fichier = SD.open("test.txt"); // ouvre fichier
  fichier.seek(0); // se positionne en début de fichier

  byte i = 0;
  char car;
  boolean trouve = false;
  boolean valOk = false;

  if (fichier) // si aucune erreur sur le fichier
  {
    while(fichier.available() && !valOk)
    //tant qu'il y a qqch à lire et qu'on a pas trouvé la valeur
    {
      car = fichier.read();
      if (!trouve) // si on a pas encore trouvé le mot
      {
        if (car == motDeb[i]) // si le caractère correspond, passe au suivant
        {
          i++;
          if(motDeb[i] == '\0') // si fin du mot (mot trouvé)
          {
            i=0;
            // avance d'un caractère pour ne pas choper le "
            //fichier.read();
            trouve = true;
          }
        }
        else
          // si un des car. n'est pas bon on reprends depuis le debut
          i=0;
      }
      else // si on a trouvé le mot:
      {
        if (car != carFin) // si ce n'est pas ("), stocke dans valeur
        {
          valeur[i] = car;
          i++;
        }
        else
        {
          valeur[i] = '\0';
          valOk = true; // on a fini
        }
      }
    }
  }
  else
  {
    Serial.println("erreur d'ouverture du fichier");
    i=-1;
  }
   
  return i;
}

Il me reste plus qu'à coder une autre fonction pour convertir le résultat en flottant en tenant compte de l'unité de mesure (cm, mm,...).
72  International / Français / Re: naviguer dans une chaine de caractère (ou un fichier) on: December 26, 2011, 08:57:29 pm
Merci à vous tous et bonnes fêtes!!

C'est vraiment cool cet esprit d'entraide, je m’attendais limite a me faire remballer par ce qu'il me manquait quelques bases, au lieu de ça j'ai des explications qui m'ont bien éclairées sur l'utilisation des chaînes et pointeurs.

@skywodd:
Quote
(Ps: ce prototype de fonction est juste, mais d'un point de vue développeur il n'est pas des plus viable ...)
Qu'entends-tu par là? Celui de la fonction ci-dessous est-il mieux?

Quote
Le bon code serait p = input; ou plus simplement return p;
Je dirais même plus return input; :p Et en effet ça marche bien mieux sans ces dernières lignes.

Du coup j'ai pu finir ma fonction, que voici, si ça peut permettre d'aider d'autres codeurs:
Je l'ai allégée un peu puisque il y a en paramètres qu'une chaîne en entrée + une par référence.
Elle ne récupère pas les balises, mais renvoie directement les valeurs correspondantes aux mots clés spécifiés (cf exemple plus bas).

Code:
void recup(char *valeur, char *motDeb)
{
  strcat(motDeb , "=\""); // ajoute le (=")
  
  char carFin = '"'; // va récupérer les car. jusqu'aux guillemets

  File fichier = SD.open("test.txt"); // ouvre fichier

  int i = 0;
  char car;
  boolean trouve = false;
  boolean valOk = false;

  if (fichier) // si aucune erreur sur le fichier
  {
    while(fichier.available() && !valOk)
    //tant qu'il y a qqch à lire et qu'on a pas trouvé la valeur
    {
      car = fichier.read();
      if (!trouve) // si on a pas encore trouvé le mot
      {
        if (car == motDeb[i]) // si le caractère correspond, passe au suivant
        {
          i++;
          if(motDeb[i] == '\0') // si fin du mot (mot trouvé)
          {
            i=0;
            // avance d'un caractère pour ne pas choper le 1er (")
            fichier.read();
            trouve = true;
          }
        }
        else
          // si un des car. n'est pas bon on reprends depuis le début
          i=0;
      }
      else // si on a trouvé le mot:
      {
        if (car != carFin) // si ce n'est pas ("), stocke dans valeur
        {
          valeur[i] = car;
          i++;
        }
        else
          valOk = true; // on a fini
      }
    }
  }
  else
    Serial.println("erreur d'ouverture du fichier");
}

Pour l'appel:
 char chaine[7] = "";
  recup(chaine, "width");
  Serial.print(chaine);
73  International / Français / Re: naviguer dans une chaine de caractère (ou un fichier) on: December 23, 2011, 07:58:02 am
Merci skywodd!
Ta solution à semble bien convenir en effet.
Du coup je voudrais en faire une petite fonction mais je peine encore un peu...
C'est pas grand chose, j'en ai bientôt fini :p

fonction: cherche dans le fichier un mot debut(ex: "<balise"), jusqu'à un caractère fin (ex: '>') et qui renvoie une chaîne qui contient qu'il y a entre les 2, dans la limite de maxi caractères.
Voila l'entête de ma fonction:
char *chercher(char *debut, char fin, int maxi) { ... }

Puis dans mon loop, je déclare une chaîne, dans laquelle je vais stocker le résultat de la fonction et l'afficher:
char chaine[15];
chaine = chercher("<balise", '>', 15);
Serial.println(chaine);


Le compilo me dit que char* est pas compatible avec char[15], mais si j'init ma chaîne avec un char* , ça marche pas...
74  International / Français / Re: naviguer dans une chaine de caractère (ou un fichier) on: December 23, 2011, 04:24:26 am
Merci pour ta réponse osaka.

J'essaie de voir pour la lecture ligne par ligne.
J'ai remplacé mon tableau de chaîne par un string:
Code:
String chaine = String(taille);
et le contenu de ma boucle par des fonctions string:
Code:
chaine.setCharAt(i, fichier.read());
Serial.print(chaine.charAt(i));
i++;
Pour le coup la sortie n'est pas très bavarde, elle m'affiche qu'un seul caractère.
75  International / Français / [resolu] naviguer dans une chaine de caractère (ou un fichier) on: December 22, 2011, 08:23:21 pm
Bonjour!
J'essaie de naviguer dans un fichier sur ma carte sd mais je n'y arrive pas.
J'aimerais parcourir un fichier xml jusqu'à trouver une certaine balise.

Je n'ai pas réussi a le faire directement à la lecture du fichier car la fonction read() permet de lire un caractère et non pas une chaîne...
Bien sur ce serait le top smiley-cool Si il y a une solution je suis preneur.

Du coup j'ai copié le contenu du fichier dans une chaîne. (normalement il devrait faire quelques ko, ça ne devrait pas saturer la rom de l'Arduino)
J'ai donc pu faire un print() de ma chaîne sans mal, le pb c'est pour naviguer... voici mon code de test:

Code:
#include <SD.h>
#define cs 10

unsigned long taille;
File fichier;

void setup()
{
  Serial.begin(9600);
  pinMode(10, OUTPUT); // pour être sur qu'on n’écris pas sur le pin 10
  
  if (!SD.begin(cs)) { // test si la carte est présente et sans erreur
    Serial.println("Carte absente ou illisible");
    return;
  }
  
  fichier = SD.open("test.txt"); // ouvre le fichier
  
  if (!fichier) { // test si l'ouverture a foirée
    Serial.println("Erreur d'ouverture du fichier");
    return;
  }
  taille = fichier.size(); //enregistre la taille du fichier
}

void loop()
{
    char chaine[taille];
    // init de la chaine, de la taille de celle du fichier

    int i=0;
    while (fichier.available()) {
      chaine[i] = fichier.read();
      //Serial.print(chaine[i]);
      i++;
    }
    fichier.close();
    chaine[i] = '\0';
    
    // maintenant on peut commencer la recherche
  int index = chaine.indexOf("<balise>");
  Serial.println(chaine.substring(index));
}

Je me fais jeter par le compilo  smiley-cry :
request for member ‘substring’ in ‘chaine’, which is of non-class type ‘char [(((unsigned int)(((int)taille) + -0x000000001)) + 1)]’
Je ne vois pas trop ce que c'est...
Pages: 1 ... 3 4 [5] 6 7