Lire une variable sans la réinitialisation de l'IDE

Bonjour à tous. J’ai un souci. Je voudrais surveiller mes variables. Oui mais l’ide réinitialise à chaque branchement l’arduino… C’est donc embêtant. Une solution consisterait à enregistrer sur une carte SD mes variables pour les relire à posteriori mais ça fonctionne en SPI et j’ai déjà un module de transmission dessus.

Ma question: Peut-on brancher 2 modules en SPI sur le même arduino ? Sinon y a t-il d’autres solutions ?

Bonjour

SPI est un bus , il est conçu pour qu’un microncontrolleur communique à plusieurs périphériques.

Chacun d’eux étant sélectionné par un signal SS particulier, SCLK MOSI ET MISO étant communs.

source Serial Peripheral Interface — Wikipédia

Si vous pouvez brancher un ordinateur sur le port série de votre Arduino, vous pouvez aussi imprimer de temps en temps les variables ➜ sur l’ordinateur, ouvrez un terminal série et laissez défiler les valeurs.

Certains logiciels de terminal série peuvent même les enregistrer directement dans un fichier sur votre ordinateur. ça évite de rajouter la SD si c'est ponctuel / pour le debug.

Si c'est pour faire une sauvegarde de contexte, il y a l'EEPROM pour faire ça aussi.

Explique un peu plus en détail ton besoin et la quantité de données à sauvegarder.

En fait j’ai des variables initialisées la nuit et au milieu de la nuit. Je voudrais suivre le bon travail de la bête. Quand tu parles de l’EEPROM je pense que c’est la memoire flash. Sinon si je pouvais mettre mes variables périodiquement dans un tableau, je pourrais éditer des statistiques. Pour cette raison, je pensais à la carte SD. Mais comme je dispose de raspberry à la maison; ce serait bien de s’en servir… Mais il n’existe pas d’editeur arduino pour raspberry. En bref, j’ai encore bien des lacunes à combler.

J’ai des PC sous linux exclusivement. en ouvrant les TTY disponibles, rien ne s’affiche. Il y a surement une connexion que je ne sais pas faire. Je connais le PHP et la gestion de tableau, mais je ne sais pas comment lire les données entrantes.

Merci de ce schéma. C’est très parlant. Me voici donc avec une solution .

Il est possible de désactiver la réserve en plaçant un condensateur de 10 µF entre la masse et le RST.
Une autre option consiste à utiliser un convertisseur USB vers TTL séparé, connecté aux broches Tx et Rx. La réinitialisation depuis l'IDE, ouvrant le moniteur série, est effectuée par le convertisseur USB vers TTL intégré (le 16u2).

La meilleure solution reste d'utiliser l'EEPROM, une mémoire interne non volatile. Elle vous protégera également contre la perte de données en cas de réinitialisation accidentelle de l'Arduino et est beaucoup plus simple à mettre en œuvre qu'une carte SD.

Non je parle de l'EEPROM, comme tu n'as pas précisé quellle carte tu utilises j'ai supposé que c'était une UNO.
Par contre si tu dois y écrire souvent ce n'est peut-être pas une bonne solution.

Pas dans la version 2.x.x mais si tu choisis Legacy IDE il y a des versions 1.8.x pour ARM

Si tu arrives à télécharger c'est que tu disposes déjà des droits sur dialout. Donc tu as accès aux ports série.
Tu peux faire un ls /dev/tty* pour voir quel port est associé à ta carte. Généralement ttyUSBx ou ttyACMx.
Il suffit que tu installes minicom par exemple et que tu l'ouvres sur le port sur lequel ton Arduino est connecté. Pour ce faire il faut que l'IDE soit fermé ou à minima que le volet du moniteur série soit fermé, sinon la connexion est refusée puisqu'il ne peut y avoir qu'un seul utilisateur sur le port série.

Je fais un test car je ne maitrise pas les TTY:

ls /dev/ttyUSB0  2 ✘
/dev/ttyUSB0

Apparemment le PC trouve bien l’arduino.

Maintenant je voudrais lire sur le port serie:

read X < /dev/ttyUSB0
Rien ne se passe. Est ce du à mon PC qui tourne avec wayland?

read W < /dev/ttyUSB0

read Wayland < /dev/ttyUSB0

Rien . Je cherche sur le net mais peu de choses existent.

C'est-à-dire?
Le fichier n'est pas créé, le fichier est vide, quel programme utilises-tu pour le test?

Wayland n'a rien à voir là-dedans.

Pourquoi ne pas utiliser minicom.
Tu peux visualiser en directe ce qui arrive, ce qui permet de s'assurer de la validité de la connexion, et faire un fichier de log des transferts, pour consulter ultérieurement. Tu peux même faire un horodatage des lignes si tu le désires.

Pratique en effet pour éviter un reboot, mais pas pratique pour recompiler un schéma modifié. Ce n’est pas la solution idéale tout en restant une solution.

Si je prends un truc tout simple:

const int pinout = 13 ;
void setup() {
pinMode(pinout,OUTPUT);
Serial.begin(9600);

}

void loop() {
digitalWrite(pinout,HIGH);
Serial.print("Sortie N° "); Serial.print(pinout); Serial.print(" etat: "); Serial.println(digitalRead(pinout));
delay(1000);

digitalWrite(pinout,LOW);
Serial.print("Sortie N° "); Serial.print(pinout); Serial.print(" etat: "); Serial.println(digitalRead(pinout));
delay(1000);
}

comment on peut simplement lire la sortie sans recompiler, car l’ide recompile systématiquement ?

Si je prends l’ide je vois les messages défiler dans la console.

Si je prends une konsole et que je démarre minicom:

Je parametre ma sortie arduino /dev/ttyUSB0

( Minicom ne fonctionne qu’en root ! ) mais comme je ne l’ai jamais utilisé c’est sans doute normal. Elle m’affiche ceci: Sre�et1Sre� a Sre�et1Sre

Si je prends un raspberry, j’aurai surement le même résultat. Il y a surement un paramétrage correct à faire.

N’ayant plus mes petits enfants à la maison, je vais pouvoir m’atteler un peu mieux à ce sujet.

Non, l'IDE ne recompile pas systématiquement.
Si on démarre l'IDE, que l'on branche l'Arduino et qu'on ouvre le moniteur série ou voit les print envoyés par le code.
Si tu fermes l'IDE le code continue à tourner. Si tu rouvres l'IDE et relances le moniteur série, il ne va pas recompiler mais simplement faire un reset de l'Arduino.

Si tu utilises minicom, il faut que tu fasses partie du groupe dialout pour pouvoir ouvrir le port série. Mais cela doit être le cas si tu as déjà chargé un programme dans ta carte. Si ce n'est pas le cas il faut t'ajouter au groupe dialout par la commande suivante:
sudo usermod -a -G dialout $USER
Il faut fermer la session puis la rouvrir pour que ce soit pris en compte.

Lorsque tu ouvres minicom tu peux passer en argument la configuration.
Sinon, tu fais minicom -s qui va lancer minicom et lui demander d'ouvrir le setup.
Là tu choisis le nom de ton device, le format de la liaison série, etc. Lorsque c'est bon tu fais esc et tu sélectionnes "Enregister config. sous dfl" cela va créer un fichier .minicom.dfl dans ton home et c'est ce que minicom utilisera par défaut lorsque tu ne passes aucun argument.

A tout moment, dans minicom, tu peux faire Ctrl+A puis Z pour ouvrir la fenêtre de paramètrage.

Oui effectivement, ça correspond à tout ce que j’ai fait, mais il semble que la console minicom lit de l’exa à en juger des caractères hétéroclites qu’elle m’affiche.

Et ça marche

Tout les échanges se font en binaire. L'hexadécimal c'est juste une façon de présenter l'information.
Ce que l'on voit donne plus à penser à une mauvaise configuration de la ligne série.
Baudrate (9600) et/ou format des mots échangés (8 bits, 1 stop, pas de parité, pas de contrôle de flux)

effectivement c’est ennuyeux ce qui t’arrive. Tout fonctionne.

Et ta ligne rouge en bas elle dit ça :slight_smile:

Tu es peut être sous windows ?

CTRL-A Z pour l'aide | 9600 8N1 | NOR | Minicom 2.10 | VT102 | Déconnecté | ttyUSB0

Bonjour thierryr51

Je n'ai pas tout lu le sujet :wink:
Mais si tu veux éviter que ton Arduino redémarre à l'établissement de la communication, il y a le pont RSET-EN à couper:

C'est expliqué ici, sous Communication

Je n'ai pas essayé.

Cordialement
jpbbricole

Merci pour ton aide, mais chez moi, ce pont n’existe pas.

Cordialement.

Trouvé. Il fallait rebooter le PC