See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: Arduino Uno + Orbiter  (Read 100262 times)

0 Members and 1 Guest are viewing this topic.

Offline NLS le pingouin

  • Legend
  • ******
  • Posts: 826
  • Karma: 1
Reply #50 - 04 December 2013, 08:01:01

Sur Arduino, le compilateur indique 1076 octets sur 32256  :eek: ... c'est peu crédible, car il ne serait possible que de faire 32 fois plus, c'est à dire absolument rien.
Sauf si on ne peut écrire que par granules de cette taille.
Qu'en est-il ? Un Arduinaute aurait-il la réponse ?

C'est normal. Arduino est une carte de prototypage, et non une carte de mise en prod. En plus, c'est une carte d'apprentissage.

Chaque fonction que tu utilise est en fait une réécriture simplifiée de ce que tu aurais fais sur un AVR (le microcontrolleur de l'arduino).
Parfois, c'est juste une fonction dont ils ont changé le nom (déclaration d'input par exemple).

Les créateurs d'Arduino n'ont pas dû se dire que de grandes choses allaient être faites à partir de leur carte, donc ils n'ont tout simplement pas optimisé la compilation des programmes. Lorsque tu compile un simple blink, c'est l'intégralité des libs d'arduino qui est compilée et transférée dans le microcontrolleur.

Il faut aussi prendre en compte le bootstrap qui est assez conséquent si je me souviens bien.

Gagner quelques bytes par-ci par-là sur arduino demande de connaître un minimum le langage C et surtout de détecter les mauvais exemples (qui sont légions) dans la doc arduino.

Le plus flagrant est l'utilisation de variables pour définir les pins au lieu de directives de préprocesseurs #define. Ca ne fait pas gagner plus d'un byte, mais les lib de bases sont bourrées d'erreurs du genre et les exemples de la doc t'en font perdre pas mal si tu les suis bêtement à la lettre.

En tout cas, c'est amusant ce projet. J'ai ressorti une vieille carte qui trainait, je me suis dit que j'allais y brancher quelques joystick de cadavre de gamepad que j'ai un peu partout dans mon appart'. De fil en aiguille je repasse sous orbiter après des années d'absence et je tombe là-dessus.

Bon courage :)


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #51 - 04 December 2013, 09:05:13
Bonjour les copains,
Effectivement, dès que l'on installe un compilateur entre le langage machine et un langage évolué les octets sont gaspillés à la pelle. Par contre charger l'intégralité d'une bibliothèque systématiquement n'est vraiment pas une bonne idée. Ceci dit, cette petite carte ARDUINO est très séduisante par bien des aspects.

La sagesse est un trésor ... tellement bien caché.

Offline Jim Lovell

  • Global Moderator
  • Legend
  • *****
  • Posts: 1529
  • Country: Belgium be
  • Karma: 31
    • Mon site
Reply #52 - 04 December 2013, 10:08:06
Petite astuce également, utiliser des "unsigned char" au lieu de "int" pour les variables de type compteur par exemple.. Les int prennent une grande place mémoire, a ne réserver qu'en cas d'absolue nécessité ! ;)

Jim Love:love:LL
C'est en se plantant que l'on construit ses racines....


ConneXion

Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #53 - 04 December 2013, 18:49:22
Coucou les copains, j'ai un problème avec l'Ardu NO !
Vla le truc :
Je cherche à faire afficher un texte sur un module LCD de deux lignes de 16 caractères.
Voici mon programme :

//test de la librairie "LiquidCrystal"
#include <LiquidCrystal.h>
//*****************************
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Bonjour.");
}
void loop()
{    }


Le compilateur râle dès la ligne rouge ce qui m'amène à vous poser deux questions :
La déclaration de la librairie est-elle suffisante ?
Comment s'assurer qu'elle est bien compilée ?

A bientôt les copains ...

La sagesse est un trésor ... tellement bien caché.

Offline hysot

  • Full Member
  • ***
  • Posts: 120
  • Country: Canada ca
  • Karma: 8
Reply #54 - 04 December 2013, 18:52:16
Qu'est ce que te dit le compilateur?

Pour moi tu as oublie l'initialisation de la librairie:
Code: [Select]
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Regarde cet exemple

hysot

Offline NLS le pingouin

  • Legend
  • ******
  • Posts: 826
  • Karma: 1
Reply #55 - 04 December 2013, 21:19:43
Petite astuce également, utiliser des "unsigned char" au lieu de "int" pour les variables de type compteur par exemple.. Les int prennent une grande place mémoire, a ne réserver qu'en cas d'absolue nécessité ! ;)
Pas convaincu. Les compilo ont tendance à aligner les variables en stack sur 4 bytes. C'est du moins ce que j'ai pu observer sur x86, je sais pas trop ce qu'il en est sur AVR.

Je crois savoir qu'avr-gcc fait de même, mais je saurais pas dire d'où je tiens l'info. Peut-être que c'est juste une idée que je me fais.


Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #56 - 04 December 2013, 21:34:10
OK, c'était bien ça.
J'ai un peu cherché pour la signification des paramètres, mais j'y suis arrivé très rapidos.
Merci hysot, ça fonctionne.

La sagesse est un trésor ... tellement bien caché.

Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #57 - 28 December 2013, 23:28:31
Coucou les copains,
Bon, je bricole avec ARDUINO pour m'amuser un peu en programmation. J'ai trifouillé quelques programmes rigolos. Par exemple j'ai un petit programme qui mesure la distance d'un objet en utilisant deux piezzo à 43 KHz, un autre programme qui détecte la présence d'une personne ou d'un animal par infra-rouges, un truc qui mesure température et humidité, un joujou qui envoie SOS en morse avec une diode laser et plein d'autres trucs. Je suis en train de débrousailler la gestion d'un clavier de 16 boutons matricés 4 x 4 avec uniquement 4 sorties et une entrée. Bref, je m'amuse un peu à programmer ARDUINO.
QUESTION : On trouve une pelle de librairies, mais comment connaitre les procédures qu'elles mettent à notre disposition, ce que l'on nomme des "méthodes" en langage Arduino ?

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #58 - 28 December 2013, 23:37:50
Salut tout le monde,
J'ai fait les manips décrites en page 1 pour émuler un clavier avec la Uno.
Quelques sueurs froides pour les manips de retour que j'ai finies par réussir
complètement.
Par contre, j'ai des problèmes de librairie, moi aussi, car le sketch qui simule l'appui
d'une touche ne fonctionne pas pour l'instant
@nulentout:
 j'ai trouvé ça:http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Librairies
ça a l'air assez bien.

Bravo pour tes essais sur Arduino!

Mars Bleu


Offline hysot

  • Full Member
  • ***
  • Posts: 120
  • Country: Canada ca
  • Karma: 8
Reply #59 - 28 December 2013, 23:45:53
Pour ton probleme de librairie, fais bien attention de bien installer la librairie Keyboard. Essai les exemples fournis avec.
Peux-tu copier le sketch que tu as uploade sur ton arduino?
Peux-tu copier les messages d'erreurs que tu as eu?

hysot

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #60 - 29 December 2013, 08:21:37
Je n'ai pas eu de message d'erreur, juste pas de fonctionnement. Mais j'ai
fait ça à la volée. Il faut que je reprenne tout bien posément.
Pour le sketch de l'Arduino, je vais le faire, mais je suis sur le départ=>patience
pour quelques jours.


Offline hysot

  • Full Member
  • ***
  • Posts: 120
  • Country: Canada ca
  • Karma: 8
Reply #61 - 29 December 2013, 11:58:42
Si tu n'as pas eu de message d'erreur c'est que ce n'est pas la librairie mais simplement ton code.
A dans quelques jours

hysot

Offline Jim Lovell

  • Global Moderator
  • Legend
  • *****
  • Posts: 1529
  • Country: Belgium be
  • Karma: 31
    • Mon site
Reply #62 - 29 December 2013, 23:51:48
Salut Hysot,

Je fais quelques expérimentations aussi en électronique mais avec un PIC 18F46K22.
J'ai un port série USB soudé dessus et des boutons poussoirs, si j'appuye sur un bouton j'envoie le caractère 'g'.
Un petit logiciel "serial to keyboard" me permet de récupérer les données envoyées sur le port com pour le transcrire en tant que clavier.



Petite question :
Ca ne fonctionne pas avec Orbiter. Dans un éditeur de texte, je vois bien la lettre g qui s'imprime, mais orbiter ne reconnait pas cette touche pour activer le train d'atterrissage.
As-tu une idée de ce qu'il faudrait envoyer ? J'ai essayé avec et sans un '\0' après le 'g' mais sans succès.

Merci !


Jim Love:love:LL
C'est en se plantant que l'on construit ses racines....


ConneXion

Offline Fox-Terrier

  • League of
  • Legend
  • ******
  • Posts: 1426
  • Country: Switzerland ch
  • Karma: 28
  • :D
Reply #63 - 30 December 2013, 10:55:04
Il me semble qu'Orbiter ne regarde pas la lettre envoyé par la touche du clavier, mais plutôt le signal de la touche en elle-même, ce qui explique pourquoi il faut appuyer des combinaisons différentes, pour prograde, normal+ par ex, selon si on est sur un azerty ou un qwerty

Donc faudrait envoyer le signal correspondant à ce que le clavier envoie, avant le traitement de l'info par l'ordi ? :wonder:
Je ne sais pas vraiment comment ça marche ... mais peut-être que si tu cherches sur internet comment coder un jeu avec des contrôles clavier, tu trouveras quelque-chose ...


Offline hysot

  • Full Member
  • ***
  • Posts: 120
  • Country: Canada ca
  • Karma: 8
Reply #64 - 30 December 2013, 11:22:13
pour ce probleme, je bloque pour le moment...peut être parce que ta carte n'est pas reconnue comme un clavier?
As tu essayer dans un jeu?

hysot

Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #65 - 30 December 2013, 19:42:13
Quote from: Mars Bleu
@nulentout:
 j'ai trouvé ça:[url=http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Librairies[quote/
Bonjour les copains,
Merci du tyau Mars bleu, je suis un vrai dudule, car je l'avais trouvé ce lien, mais j'en ai un fouillis, du cour ... ils ne me servent à rien.  :)
Bon, j'avance avec Arduino. par contre, je me suis acheté le SIELD avec l'afficheur LCD. J'ai trouvé une faille électronique dans le pilotage du rétro éclairage. La broche de commande est directement branchée sur la base du transistor de commutation. Si vous faites passer la sortie d'Arduino qui s'y trouve branchée à "1", 85 mA vont aller dans le transistor. Arduino ne va pas aimer, et le transistor encore moins !  :trucdeouf:
Pour ma part j'ai coupé la broche pour l'isoler du connecteur. Pour piloter le rétro éclairage j'utilise la sortie binaire 13 par l'entremise d'une diode que j'ai soudé sur le circuit imprimé.
Bon, maintenant je vais tenter d'interfacer un module qui conserve la date et l'heure, histoire de m'amuser ...

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #66 - 09 January 2014, 17:47:23
De retour, j'ai pu continuer mes expériences.
La librairie HIDkeyboard étant enfin en place, et les câbles
au bon emplacement sur la Uno, j'ai enfin pu rentrer et sortir
le train d'atterrissage d'une Xr2 en orbite. :eek:

La suite des expérimentation est plus ardue. L'attaque d'une entrée analogique
se fait en suivant les instructions d'Hysot (milieu de la réponse 26). J'ai toutefois préféré
mettre les résistances en parallèle plutôt qu'en série. A l'exécution du sketch
Arduino AnalogReadSerial, on voit que ça marche bien pour un seul switch à la fois.
Si on met plus d'un switch, la valeur de la résistance va varier selon 1/R=1/R1+1/R2+1/R3.....

Ça risque d'embrouiller un peu les choses. Je regarde pour faire un algorithme de contre-décalage.
Voilà où j'en suis pour l'instant.


@Nulentout: Arduino devrait t'embaucher pour la mise au point de ses produits!

Mars Bleu


Offline hysot

  • Full Member
  • ***
  • Posts: 120
  • Country: Canada ca
  • Karma: 8
Reply #67 - 17 January 2014, 02:30:31
Salut Mars Bleu,

Un peu loin d'orbiter en ce moment...
Super cool que tu ais réussi a utiliser la librairie :)
Pour ton histoire de résistance en parallèle plutôt qu'en série, oui ça marche aussi mais ça t'obligera a ce que tout tes résistances est une valeur différente ce qui va te demander d'avoir un beau panel de composant. Si elle sont en série, elles s'additionneront ce qui fait qu'on peut utiliser plusieurs fois les mêmes valeurs de résistance.
Pour l'appuie de plusieurs switches en même temps, oui ça va vite devenir un casse tête car il va falloir intégrer toutes les possibilités dans le programme. Un gars avait fait ça d'ailleurs mais sur un assemblage de 5 switches je crois (une manette de jeu style nintendo). Ça représentait déjà pas mal de solution en plus (ex appuis de 1 + 2 = 212/245). Je pense que ce genre de montage est a réserver au MFD et P/A. Les MFD sont boutonvores et très adaptes a ce genre de montage ou l'on utilise pas d'appuis simultané.

Bon courage pour la suite

hysot

Offline vslash

  • Jr. Member
  • **
  • Posts: 12
  • Karma: 4
Reply #68 - 17 January 2014, 07:02:49
bjr, je n'ai pas eu le tps de lire tt le thread, mais si ça peut aider 2 archives web :
- http://vslash.com/resources/ocp-a_project.tar.gz : Orbiter Control Panel qui résumait le hack d'un orbinaute en 2006 qui avait créé son clavier perso pour Orb. (mais c'est sans Arduino, donc pê hors sujet ici, sorry) Il s'agit d'un kbd custom.
- http://vslash.com/resources/keyboard_hack.tar.gz : les références liés au projet ci-dessus (différentes matrices kbd dont on parle + haut il me semble ici si j'ai bien lu..)

Les mots clefs "keyboard scanning" sur gogol renvois pas mal d'infos sur la question (matrice, pgm de scan etc..)

autre réf. : http://hackaday.com/ qui regorge de pas mal de hack en tt genre et notamment avec l'Arduino (dont des kdb)

à ttes fins utiles ..
++


Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #69 - 17 January 2014, 21:09:29
J'ai continué mes investigations sur ces résistances en parallèle.
J'ai mis au point un algorithme qui calculait la résistance insérée(ou retirée)
en fonction de la variation de tension mesurée à A0. Ça marchait bien pour
3 switches différents, mais quand j'en ai mis 8, et que je les mettais tous
à 1, il y avait trop de dérive pour pouvoir faire des calculs précis. Donc, pour moi,
c'était une impasse technique.

J'ai remis le nez dans la doc, et j'ai vu qu'il y avait plusieurs types de registres à
décalage. Pour des switches, le registre qui convient est Parallel Input Serial Output (PISO),
tandis que pour l'affichage de LED, c'est du Serial Input Parallel Output (SIPO).
Le SN74HC165N est PISO, le M74HC595B1R est SIPO.
Il y a ce qu'il faut comme littérature chez Arduino:
http://www.arduino.cc/en/Tutorial/ShiftIn
http://arduino.cc/en/tutorial/ShiftOut

L'avantage est qu'on peut chaîner les registres=>la Uno peut gérer beaucoup de switches et de LED.
J'avais déjà des M74HC595B1R, donc j'ai pu me câbler un petit chenillard en suivant le tuto de chez
Arduino (pas de difficulté particulière). Donc, ça, ça va.
J'ai commandé des SN74HC165N pour la partie switches. En attendant, j'ai repris mes recherches
pour faire communiquer la Uno et la console LUA d'Orbiter. Là, c'est plus :sad:
j'ai beau fureter un peu partout, ya pas grand chose, et le peu que je trouve.... ne marche pas (j'arrive
pas à le faire marcher...)
Petite note optimiste: le script Lua
Code: [Select]
file=io.open("text.txt","w")
file:write("Hello world")
file:close()

écrit bien "Hello world" dans le fichier "text.txt". C'est bien des data qui sont sorties de l'unité centrale
et sont allées s'écrire dans le disque dur. Pour une carte Arduino branchée sur le port "COM4", il y a
sûrement moyen d'y envoyer quelque chose...

Voilà où j'en suis pour l'instant.

J'ai aussi fait un tour chez hackaday.com. Il y a des petits génies. Le truc que je préfère est le HUD goggles.
Le piddybot est pas mal non plus.

Mars Bleu


Offline vslash

  • Jr. Member
  • **
  • Posts: 12
  • Karma: 4
Reply #70 - 17 January 2014, 21:29:05
Quote
écrit bien "Hello world" dans le fichier "text.txt". C'est bien des data qui sont sorties de l'unité centrale
et sont allées s'écrire dans le disque dur. Pour une carte Arduino branchée sur le port "COM4", il y a
sûrement moyen d'y envoyer quelque chose...

bah .. c'est du serial (rs232) ; faut "juste" que Lua intègre des lib ou fonctions "serial" (genre comWrite, comRead etc..) , et évidemment t'assurer de la partie synchro (baud, parité, controle, etc..). Enfin, si j'ai tout capté de ta problématique. Je lirais le thread avec plus d'attention dès que.
Pour Lua, vu qu'on le retrouve en API sous Stellarium pour piloter les télescopes, je pense sans trop m'avancer que ça doit être prévu. A verif.
++
EDIT : je confirme : http://lua-users.org/wiki/SerialCommunication

« Last Edit: 17 January 2014, 21:41:06 by vslash »

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #71 - 18 January 2014, 12:04:18
Mmm..
j'ai essayé avec la librairie luars232.dll
Dans la console, j'ai entré:
Code: [Select]
rs232=("luars232")et ça me renvoie execution error
Code: [Select]
rs232=("Chemin de fichier complet\luars232")et ça me renvoie encore execution error

La lecture de http://www.lua.org/pil/8.1.html ne m'a pas tellement
éclairé.
@ vslash: Oui, oui, tu as bien capeté ma problématique. Mais pour envoyer
des données à la Uno par Lua (console ou script) doit on charger des libs, ou bien
le pack de commandes de bases suffirait-il?


Offline vslash

  • Jr. Member
  • **
  • Posts: 12
  • Karma: 4
Reply #72 - 18 January 2014, 14:06:44
@mars : je ne suis malheureusement pas du tout compétent sur lua, et encore moins sur Win.
Mais comme pour ts les languages, la proc. à suivre est la suivante :
1. verif de l'environnement de dev (variable externe, PATH, etc..==> OS)
2. import/declaration des librairies externes utilisées (==> script)
3. utilisation des fonctions de la librairie (==> script)

Ainsi,
1. une petite lecture sur ton lien indique de déclarer un LUA_PATH sous windows en respectant le pattern : LUA_PATH=?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua
(ici tu peux te passer de /usr/local... qui sent bon l'unix .. ; tu ajoutes selon le(s) répertoire(s) où tu as installé Lua et où se trouve tes .dll. Assure toi d'avoir la luars232.dll qque part en phase avec ton LUA_PATH)
2. Ton script doit donc comporter une section d'import ; bas de page du lien sur lequel j'étais tombé comporte un exemple : sous Lua, les import de lib se font via 'require' (si j'ai tout capté de Lua) :
local com=require "serial"
(mais dans ton cas remplace "serial" par "luars232" je pense ; la "serial" en question c'est le contenu du lien lui-même). Zieut un coup sur le forum Lua, c'est mieux vu mon niveau sur ce language.
3. pour l'utilisation des fonctions, soit le wiki/doc de Lua, soit des exemples sur le net.

Dans ts les cas, assure toi d'avoir ton port com actif ou opérationnel sous Windows, soit avec un matos qui fonctionne en rs232, soit via l'OS de windows. Tu peux aussi simplement mesurer la tension aux pin de sortie de ton com avec un vmètre (txd pin 3 et masse par ex..).
L'Arduino va délivrer une tension également (rs232 c'est du 3/12V il me semble, avec une logique négative), faudra te mettre en accord sur ton ordi avec les baud/parité/bitDeControle, sinon ça marche pô. :o)
la meilleure ref. sur la question est ici :
http://www.cmrr.umn.edu/~strupp/serial.html
++

« Last Edit: 18 January 2014, 15:54:28 by vslash »

Offline nulentout

  • Legend
  • ******
  • Posts: 3356
  • Country: France fr
  • Karma: 242
Reply #73 - 18 January 2014, 18:21:18
Coucou les copains,
Ben môamôa je continue à faire des "trucs" pour m'amuser avec Arduino.
J'ai effectué une transmission entre deux Arduinos avec un module VHF à 433MHz. C'est le système le plus délicat à utiliser, car sur cette fréquence il y a plein plein plein de petits matériels électroniques. Par exemple ici j'ai une petite station météo pile sur cette fréquence. Ces transmetteurs ne sont donc pas fiables du tout.
Ensuite j'ai testé un lecteur de carte SD de 16Go d'appareil photo. J'arrive à en sortir la liste des fichiers, à y inscrire un fichier texte et à y écrire des caractères. Ainsi Arduino peut disposer d'une mémoire de masse et y stocker plein de données.
Puis je me suis attaqué à l'utilisation d'un circuit Dallas DS1302. J'ai réalisé un petit projet qui affiche la date et l'heure sur le module LCD. j'utilise les boutons disponibles sur le module LCD pour affiner les minutes et les secondes. Une pile au lithyum permet au DS1302 de continuer à fonctionner quand on n'alimente plus Arduino.
Toutes ces petites expériences qui pour le moment ne me sont pas très vitale pour interfacer Orbiter m'amusent bien.
Maintenant je vais tester d'autres modules et faire d'autres expériences.  :music:

La sagesse est un trésor ... tellement bien caché.

Offline Mars Bleu

  • Hero Member
  • *****
  • Posts: 638
  • Karma: 33
Reply #74 - 18 January 2014, 19:46:51
Les déclarations de path sous Lua me semblent exotiques, avec ces points d'interrogation.
J'avais indiqué H:\Programmes\Orbiter 2010\Script\luars232.dll comme path pour le require.
C'est en tout cas là que la dll se trouve.
Je ne sais pas si c'est bon comme ça.

Le com doit être actif, car il est vu sur la console Arduino (COM4), et j'y ai déjà téléversé ceci:
Code: [Select]
int incomingByte=0;
void setup(){
  Serial.begin(9600);
}

void loop(){
  if (Serial.available()>0{
    incomingByte=Serial.read();
    Serial.print("I received ")
    Serial.println(incomingByte, DEC);
  }
}
La Uno est prête à lire ce que j'enverrai par la console Lua.

Si on paramètre le COM par l'invite de commande DOS, doit on le faire avec Lua?
Je continue les investigations.

Nulentout, bravo à tôatôa pour tes trucs sur les Arduino!
Mettre 16Go en disque dur virtuel ne permettrait-il pas de suppléer à la petite taille de RAM dispo?