Show Posts
Pages: 1 [2] 3 4 ... 7
16  International / Français / Re: Une pause avec une interruption on: September 06, 2013, 07:37:17 pm
Si tu avais seulement pris le temps de regarder la librairie en question, tu aurais vu qu'il y a le mode IDLE qui est une simple mise en pause du processeur soit pour un temps donné soit en l'attente d'une nouvelle interruption.


Ok, j'avoue avoir parcouru un peu trop vite la librairie.
Alors j'ai fait ceci :
Code:
#include <Sleep_n0m1.h>
Sleep sleep;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, onRelease, RISING); // Lance onRelease() lorsque on relache le bouton
}

void loop()
{
  for(int i=0; i<100; i++) { // Programme simple pour vérifier l’exécution du programme principal
    Serial.println(i);
    delay(500);
  }
}

void onRelease()
{
  sleep.pwrDownMode(); //set sleep mode
  sleep.sleepInterrupt(0, RISING);  // sleep until interrupt
}

Résultat : Le programme s’exécute,
on appuie/relâche le bouton, le programme se met en pause,
on appuie/relâche le bouton à nouveau, le programme reprends son exécution,
Et là (hélas!), quand on appuie/relâche le bouton ça ne fait rien.

J'ai essayé en mode idle mais là rien ne se passe du tout.

5_cylindre : Déjà merci pour l'explication sur l'anti-rebond, j'ai l'impression qu'il marche un peu mieux (mais pas tout a fait encore, certains appuis sont encore comptés 2 fois).

Sinon j'ai mis le changé en RISING et j'ai attendu les différents états mais on reste toujours bloqué dans la pause.
17  International / Français / Re: Une pause avec une interruption on: September 06, 2013, 11:35:20 am
Je ne sais pas comment est câblé ton BP mais j'imagine au GND avec une pull-up, en fait peu importe.

Oui, j'ai mis aussi un condo en // avec l'inter pour faire un anti-rebond, étant donné que je ne peux pas le faire dans le prgm puisque l'interruption désactive le timer.



En faisant ça, tu restes bloqué à vie dans l'ISR dès que state est à '1'
Oui, je peux confirmer smiley

==> il faut en fait, en entrant dans l'ISR, attendre de relâcher le BP, pour ensuite attendre un nouvel appui, puis encore un nouveau relâchement ...

Pourquoi ? L’interruption est déclenchée au moment où on relâche le bouton.
Comment faire alors?

fdunews, je vais d'abord voir si j'y arrive sans librairie, je ne sais pas de toute façon si elle me sera utile car je cherche pas a mettre en veille l'Arduino, la pause n'est jamais très longue (max 1min).
18  International / Français / Re: Une pause avec une interruption on: September 05, 2013, 02:24:05 pm
Mais le soucis c'est que avec ce que tu me propose, l'appui sur le bp n'a aucune action immédiate, vu que le test de state se fait en dehors de la boucle...

PS : Je suppose que pour changer l'état de la variable tu voulais écrire : state = !state ;
19  International / Français / Re: Une pause avec une interruption on: September 05, 2013, 11:56:49 am
Merci pour ta réponse J.F.

Quote
Code:
void loop()
{
  if(state){
  for(int i=0; i<100; i++) { // Programme simple pour vérifier l’exécution du programme principal
    Serial.println(i);
    delay(500);
  }
  }
}

Alors non ça ne va pas.
1. : Si on j'appuie sur le bouton, le programme se mettra en pause lors de la fin du for(), alors que je voudrais une pause immédiatement
Edit : En fait non après test, le programme ne se met pas en pause du tout, ça affiche "1" et reprend le comptage.
Il faut par contre modifier la 2eme ligne :
volatile boolean state = HIGH ;

2. : En réalité mon programme est beaucoup plus long que les quelques lignes ici, je ne peux pas me permettre de tout regrouper dans un if{}.
20  International / Français / [Résolu] Une pause avec une interruption on: September 05, 2013, 10:45:16 am
Bonjour.

Je souhaiterais que mon programme Arduino se mette en pause lors de l'appui sur un bouton, à n'importe-quel moment de l’exécution.
Le programme reprendrait lors d'un nouvel appui sur le bouton.

J'ai donc naturellement pensé aux interruptions, mais toutes mes tentatives pour faire cela ont échouées...

Voici mon dernier programme :

Code:
const int buttonPin = 2;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, onRelease, FALLING); // Lance onRelease() lorsque on relache le bouton
  pinMode(buttonPin, INPUT);
}

void loop()
{
  for(int i=0; i<100; i++) { // Programme simple pour vérifier l’exécution du programme principal
    Serial.println(i);
    delay(500);
  }
}

void onRelease()
{
  Serial.println("\nInterruption");
  state();
  
  while(digitalRead(buttonPin) == LOW) { // On attend le nouvel appui sur le bouton
    Serial.print(".");
  }
  
  state();
}

void state() // Imprime l'état actuel du bouton
{
  if (digitalRead(buttonPin) == HIGH)
    Serial.println("Hight");
  else
    Serial.println("Low");
}
21  International / Réalisations et Projets Finis / Re: Drawall - Le robot qui dessine on: July 10, 2013, 02:39:04 pm
Comme promis j'ai fait une petite doc, générée avec Doxygen : http://drawall.cc/
J'ai aussi pas mal modifié le code, résolu quelques bugs et je l'ai rendu plus facile à utiliser. Ça se peaufine petit à petit.
Il est aussi plus polyvalent et adapté à d'autres installations (compatibilité drivers pololu, etc.).

Je travaille en ce moment avec un artiste qui va réaliser une série de grands dessins, en se servant du robot comme crayonné, puis en remplissant les surfaces au pinceau fin. La partie mécanique est réalisée par une personne qui a un peu plus d'expérience dans le domaine et avec un tout autre budget. Cela me donne l'occasion de voir ce que ça donne avec un meilleur matos.
Pour le moment, après quelques tests, je suis assez satisfait : avec un entre-axe moteur de 4.8m, il est possible de faire le dessin "drawbot" sur 5cm de large sans grosse perte de qualité. La précision dépendant de la vitesse, il est malheureusement impossible d’obtenir une telle précision sur un dessin très large, ce serait beaucoup trop long.

Le 1er dessin de la série fait fait 4m de large pour environ 3m de haut. De quoi mettre mon programme à l'épreuve smiley-grin !
Je vous enverrais prochainement des photos/vidéo de tout ça.

À très bientôt!
Youp.
22  International / Réalisations et Projets Finis / Re: Drawall - Le robot qui dessine on: July 05, 2013, 07:23:27 am
Si il ressemble à celui de la photo, oui. Si il est plus grand, c'est un projet d'une autre personne, qui développe la partie matérielle mais qui utilise mon programme.

Edit : J'ai remarqué que Drawbot était un nom assez générique pour ce genre de robot. Pour personnaliser un peu mon projet je l'ai renommé en Drawall, j'ai donc changé le titre du post.
23  International / Français / Re: Utiliser une librairie dans une librairie on: June 26, 2013, 07:12:20 am
Oui l'erreur était dans le post.

Je pense que c'est parce que le compilateur Arduino se base sur les #include du scketch pour inclure les librairies, du coup vu que là je suis pas dans le sketch ça ne fonctionne pas.
Effectivement, il faut aussi inclure la bibliothèque dans le sketch. Spécificité d'Arduino smiley-roll-sweat

Arrr!

Du coup, pas moyen de créer des librairies de plusieurs classes, de manière à structurer un peu le code ?
Ex : malib.h requiert maclasse1.h : en en-tête de malib.h je devrais normalement avoir #include "maclasse1.h", mais impossible :/

Coment faire ?
Laisser tomber Arduino et compiler direct avec avr-gcc? smiley-grin
24  International / Français / Re: Utiliser une librairie dans une librairie on: June 25, 2013, 03:17:47 pm
 hem, oui smiley-mr-green smiley-mr-green smiley-mr-green
C'est corrigé.
25  International / Français / Utiliser une librairie dans une librairie on: June 25, 2013, 12:57:08 pm
Bonsoir.

Je voudrais développer une librairie qui requiert une librairie Arduino existante (SD).
J'aimerais inclure SD.h dans ma librairie, afin que l'utilisateur n'ait pas à taper le #include <SD.h>, en début de son sketch.

Avec un #include <SD.h> au début de ma librairie ça ne compile pas, même en copiant le dossier de la lib SD dans le dossier de ma lib.

Je pense que c'est parce que le compilateur Arduino se base sur les #include du scketch pour inclure les librairies, du coup vu que là je suis pas dans le sketch ça ne fonctionne pas.

Edit : J'imagine que ça doit être lié, je n'arrive pas non plus à décomposer une librairie en plusieurs classes (et plusieurs fichiers).

Merci pour votre aide.
26  International / Réalisations et Projets Finis / Re: Drawbot - Le robot qui dessine on: June 18, 2013, 09:14:17 am
Bonjour le forum et désolé pour cette longue période d'absence. Après tout ce temps pendant lequel j'ai mis un peu ce projet au placard, je pense reprendre le développement.
Et bonne nouvelle, vu que je vois que ça intéresse des gens, je vais faire en sorte qu'il sorte un peu de son trou pour que ça dépasse le stade de "bricolage", puis comme c'est les vacances je vais avoir un peu de temps devant moi.

La vidéo est maintenant dispo sur Youtube (toujours chez Google, donc smiley-razz ...mais peut-être plus adapté) :


L'ensemble du code-source est dispo sur un dépôt GitHub

J'ai apposé au projet une licence GPL3, ce qui implique que si vous utilisez le code, vous devez au moins citer la source (le lien vers github par exemple).

Il y a un mail de contact sur le ReadMe, n'hésitez pas, si vous avez des questions ou des idées.

À venir :
- Plus universel : meilleure compatibilité avec les shields industriels (SD et driver)
- Code mieux structuré : actuellement la librairie n'est composée que de 2 fichiers (le .h et le .cpp)
- Documentation du code-source (avec un générateur de doc)
- Documentation hardware : pour que vous puissiez faire vous aussi votre petit robot
- Pour les améliorations du code j'ai pleins d'idées, je vais pas tout déballer maintenant smiley

Edit : Et pour les toulousains, le robot est maintenant exposé au FabLab Artilect
27  International / Français / Compilation en ligne de commande (Scons, Makefile, CMake) on: May 12, 2013, 01:14:21 pm
Bonsoir à tous.

C'est peut-être un sujet qui a souvent été abordé, mais malgré les plusieurs solutions que j'ai trouvé il n'y en a aucune qui a marché pour moi.

Soft : arduino 1.0.1 -- Hard : arduino uno v3 -- OS : Linux Mint 14 Nadia

J'ai trouvé entre autres cette page qui répertorie plusieurs méthodes.

1. Scons : Cette solution me semble facile a mettre en œuvre, mais j'ai encore quelques soucis.
- J'ai téléchargé arscons et placé le fichier dans un sketch
- J'ai installé scons
- Dans un terminal, je me suis placé dans le dossier puis tapé 'scons'
J'ai l'erreur suivante :
Code:
[build/core.a] No such file or directory

2. Makefile : Ceux que j'ai trouvé ne sont pas à jour de la v1.0 (requiert des .pde et pas des .ino)
- J'ai téléchargé ce makefile, j'ai aussi testé celui-ci
- J'ai bidouillé un peu le fichier pour remplacer les .pde par des .ino, spécifié le répertoire d'arduino, etc.
J'ai cette erreur :
Code:
make: *** Pas de règle pour fabriquer la cible « /usr/share/arduino/hardware/arduino/cores/arduino/buffer.o », nécessaire pour « blink.elf ». Arrêt.
J'ai peut être corrigé cette erreur et buté sur une autre, je me souviens plus trop, j'y ai passé une partie de la nuit j'ai pas noté tout ce que j'ai fait...

3. CMake : https://github.com/queezythegreat/arduino-cmake
Après avoir téléchargé le dépôt, comme le dit le readme j'ai créé un dossier build, je me suis puis j'y ai ouvert un terminal et tapé 'cmake ..', puis 'make'.
J'ai malheureusement cette erreur :
Code:
libdiecimila_CORE.a(main.cpp.obj): In function `main':
/usr/share/arduino/hardware/arduino/cores/arduino/main.cpp:11: undefined reference to `setup'
/usr/share/arduino/hardware/arduino/cores/arduino/main.cpp:14: undefined reference to `loop'

Vous pouvez m'aider sur la solution avec laquelle vous êtes le plus à l'aise, pour moi essentiel c'est que ça marche smiley
J'ai juste une petite préférence pour scons car à première vue ça à l'air plus simple et il se base sur les configs du logiciel Arduino, on ne se les tape pas à la main.

Merci à vous.

Roipou.
28  International / Français / Re: 6 sorties analogiques on: December 12, 2012, 02:48:23 pm
si une profondeur de 8 bits est suffisante pourquoi pas
Oui c'est suffisant pour mon application.

Quant au mcp4728, je le laisse de coté, ça me semble plus compliqué de gérer les adresses en eeprom, puis en plus il m'en faudra 2, puis je redoute un peu le boitier msop.

Quote
Si tu veux convertir le pwm en valeur analogique une résistance et un condo devraient suffire !
Comme je l'ai précisé en début de message, le pwm ne me convient pas car je monte en fréquence (environ 1kHz)

Je partirais donc sur le TLC5628.
Merci à vous !
29  International / Français / Re: 6 sorties analogiques on: December 12, 2012, 01:49:36 pm
J'ai trouvé notamment le TLC5628CN sur radiospares.
8 bits, 8 canneaux, boitier DIP
30  International / Français / Re: 6 sorties analogiques on: December 12, 2012, 01:37:31 pm
En gros il y a 4 puces différentes, pour les 4 états de A1-A2, en revanche le A0 est externe, mais il n'est pas disponible sur la carte de Sparkfun (j'ai regardé leur schéma, le pin A0 est bien à la masse).

C'est pas un peu con ? Pourquoi Microchip ne l'a pas fait en boitier 8 pins ?
Il doit surement exister un équivalent de ce CNA avec A0-A1-A2 en externe non ?
Pages: 1 [2] 3 4 ... 7