Auteur Sujet: ArduiEmulator  (Lu 24424 fois)

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : ArduiEmulator
« Réponse #15 le: avril 24, 2018, 04:48:27 pm »
Salut

Le problème c'est que la boite de test est développée en C++ managé dotNet, qui à ma connaissance n'est pas dispo sous Linux. Peut être que du côté de Mono, clone de dotNet pour Linux, c'est possible mais là je ne maîtrise pas... Il faudrait sans la refaire en Qt ou un autre framework portable du même acabit.
Je te joins le .zip des sources.

savignyexpress

  • Invité
Re : ArduiEmulator
« Réponse #16 le: avril 25, 2018, 07:57:29 am »
Bonjour Thierry,

Un tout grand merci pour les sources .Net dont je vais pouvoir m'inspirer.

Mon objectif est de pouvoir plus facilement mettre au point les machines d'états de l'application, éventuellement à l'aide d'un debugger. Pour cela, je vais probablement m'orienter vers une simulation en mode terminal à l'aide de la librairie stdio, ce que je fais déjà en développement natif C AVR sans Arduino et qui me suffit.

Je vais probablement procéder comme suit:
  • Ajouter un répertoire simulation PC dans l'arborescence Arduino.
  • Créer un main.cpp pour appeler setup et loop définis dans le sketch.
  • Créer des stubs pour les fonctions Arduino utilisées. Ces stubs feront soit des printf, soit des scanf pour simuler les entrées / sorties.
  • Créer un Makefile pour compiler le tout avec gcc.
  • Paramétrer mon éditeur sous Linux pour qu'il utilise la coloration syntaxique avec les fichiers .ino. Je pense en effet travailler hors de l'IDE pour cette simulation. Pour l'instant, j'ai tout fait avec gedit (éditeur du bureau Gnome de Linux) d'où je lance make avec les arguments qui vont bien, mais peut-être que je passerai à Eclipse.

Belle journée et meilleures salutations.

Marc-Henri

BrutDePomme

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
    • FabLabOrly
Re : ArduiEmulator
« Réponse #17 le: janvier 22, 2019, 11:34:33 am »
Bonjour Thierry,

J'essaye d'utiliser ArduiEmulator avec la solution AccessoriesTestExe.sln. J'arrive bien à générer ArduiEmulator et DIO2.
Par contre pour TestExe, j'ai le message suivant sur VS2017:
1>AccessoriesCircularBuffer.cpp
1>d:\documents\arduino\libraries\accessories\src\portservo.hpp(54): error C2039: 'detach' : n'est pas membre de 'Servo'
1>d:\documents\arduino\arduiemulator\arduiemulator\servo.h(1): note: voir la déclaration de 'Servo'

Pouvez-vous m'aider?

Cordialement,

Philippe
Adhérent du Cercle Aéronautique d'Orly avec une partie aéromodélisme, une partie modélisme naval,  une partie FabLab et une partie modélisme ferroviaire

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : ArduiEmulator
« Réponse #18 le: janvier 24, 2019, 09:42:07 am »
Oui effectivement, le detach était manquant à l'époque, je l'ai ajouté depuis. En pièce jointe, le nouveau fichier servo.h  .

BrutDePomme

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
    • FabLabOrly
Re : ArduiEmulator
« Réponse #19 le: janvier 24, 2019, 02:05:03 pm »
Bonjour Thierry,

Merci pour le fichier Servo.h, par contre, la compilation ne se fait toujours pas. J'ai ce message d'erreur:
3>d:\documents\arduino\libraries\commanders\src\eventssequencer.cpp(68): error C3861: 'memcpy_P' : identificateur introuvable


Cordialement,

Philippe
Adhérent du Cercle Aéronautique d'Orly avec une partie aéromodélisme, une partie modélisme naval,  une partie FabLab et une partie modélisme ferroviaire

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : ArduiEmulator
« Réponse #20 le: janvier 24, 2019, 03:06:46 pm »
De mon côté, la compilation passe très bien, avec l'IDE 1.8.7 pour un Nano.
« Modifié: juin 01, 2019, 03:21:04 pm par Thierry »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 748
    • Voir le profil
Re : ArduiEmulator
« Réponse #21 le: juin 01, 2019, 03:19:01 pm »
Bonjour à tous

Deux ans après la première version de ArduiEmulator, je reviens vous présenter la version 2.0.0.
J'avais deux problèmes avec la version 1 : l'utilisation de C++ managé que je maîtrise assez peu, et la structure de la bibliothèque qui m'obligeait à passer par des macros pour les fonctions de base comme pinMode ou digitalWrite... Ce qui a été fatal lorsqu'une amélioration de Accessories a proposé de nommer des méthodes de classe avec ces mêmes noms. Impossible tant que les macros chercheraient à remplacer les nouvelles fonctions par des macros sans aucun rapport.
J'ai essayé de solutionner les deux problèmes simultanément.

Première partie de la solution, un exécutable Window en véritable C# beaucoup plus facile à manipuler (pour moi en tout cas) que le C++ managé. Ce programme, ArduiEmulatorWin, que nous appellerons l'émulateur, ne contient que l'émulation proprement dite. Un fois compilé, cet exécutable n'a pas besoin de changer à chaque projet...
L'allure générale et les capacités sont globalement les mêmes que la version 1, mais des nouveautés sont apparues :
  • Il est devenu possible de choisir le type d'Arduino émulé, ceci afin de mieux gérer les erreurs de numéro de broche... Le code est prévu pour vérifier les fonctionnalités des broches (PWM ou pas ? Interruption ou pas ? Analogique ou Digital ?), mais ce n'est pas encore exploité. Trois types sont disponibles : Uno R3, Nano R3 et Mega2560. Ajouter de nouveaux types n'est pas compliqué...
  • Les nouveaux multiplicateurs de port sont gérés. Ces broches qui ne sont pas directement issues de l'Arduino émulé sont donc affichées. Aujourd'hui il est possible, même sans Accessories, de voir l'état de broches d'un 74HC595 ou d'un SX1509. Là encore, d'autres expanders peuvent être ajoutés. C'est un peu plus compliqué que pour un type d'Arduino, mais ce n'est pas insurmontable
  • Il est possible de faire faire des choses à l'émulateur comme si un programme Arduino lui demandait, via le ligne des messages série et le bouton 'Pins'. Les commandes possibles sont lisibles dans le readme.md du répertoire.

Seconde partie : la librairie qu'il faut lier au ino utilisateur pour créer l'exécutable Arduino. On se retrouve avec deux exécutables qui vont discuter et échanger des informations.

Comment ça marche : chacun des deux exécutables est à la fois un émetteur et un récepteur de messages texte. La discussion passe par des 'NamedPipes'. Chaque exécutable dispose d'un NamedPipe en émission, et d'un autre en réception. Les deux programmes échangent continuellement des messages pour maintenir la connexion active. L'émulateur dispose en bas à gauche d'une icône rouge lorsque rien n'est connecté qui passe au vert lorsqu'un programme utilisant la librairie se met en route. Dès que ce programme s’arrête, l'icone de l'émulateur redevient rouge. L'émulateur peut rester ouvert en permanence, à chaque lancement de l'exécutable Arduino, un premier message de 'Reset' est envoyé à l'émulateur qui va tout vider pour revenir à un état de démarrage. L'exécutable Arduino est un simple programme 'Console'.

L'avenir de ce programme passe par Linux. Microsoft a développé .Net Core, version de .Net multiplate-forme en Open Source. La version 3.0 permet de construire des boites de dialogue mais reste dans ce cas un programme Windows. D'autres framework de dialogue vont émerger, peut être parmi ceux déjà connus pour être aussi multiplate-forme comme WX ou Qt (les Unixiens sont fainéants des doigts...) . Cela permettra à terme de faire en sorte que ArduiEmulatorWin devienne lui aussi multiplate-forme ! Les NamedPipes utilisés pour discuter entre les programmes existent sous Linux, et en fait viennent d'Unix. Donc pas de problème de ce côté. Il faudra en outre adapter la librairie pour travailler par exemple avec Gcc. Bref, encore du boulot en perspective. Peut être que des Linuxiens pourraient m'aider dans cette partie ? Je n'ai jamais été à l'aise avec ce système... Idem pour Mac, je ne doute pas que l'on trouve des solutions pour adapter tout ça.

Cette fois, c'est bien d'un bon projet collaboratif qui est présent sur le locogit : https://github.com/Locoduino/ArduiEmulatorWin. Le répertoire ArduinoEmulatorWin contient  les sources de l'émulateur, tandis que ArduiEmulatorLib contient la librairie.
Les projets DIO2, Accessories, Commanders et LcdUi ont été mis à jour dans le Locogit pour prendre en compte de nouvel émulateur. Ceux qui ont utilisé la version 1 constateront que ces bibliothèques disposent maintenant de projets locaux à inclure dans une nouvelle solution pour bénéficier de leur comportement. Il n'est plus besoin d'ajouter manuellement au projet principal tous les sources d'une bibliothèque pour les utiliser.