Imprimer fichier XML via Processing et Arduino

Bonjour,

L'opération que je cherche à faire me semble simple, mais je ne trouve rien sur les forums.

Je cherche à imprimer, sur une imprimante thermique via arduino, des données texte d'un fichier xml.

J'arrive à imprimer facilement des textes saisis manuellement (en suivant par exemple ce tuto : http://tronixstuff.wordpress.com/2011/07/08/tutorial-arduino-and-a-thermal-printer/).

J'arrive également à mettre en forme mon échange sous processing en utilisant l'objet XML Element.

Mais voilà je ne parviens pas à exporter ce que je réalise sous processing dans Arduino.

L'idéal serait d'arriver à mettre en forme sous processing, exporter dans le port virtuel de mon ordinateur via processing serial, puis de lire cette information sous arduino afin qu'il puisse imprimer.

C'est plus facile à dire qu'à faire, auriez vous une idée / exemple de la manière avec laquelle je pourrais réaliser cette opération ?

Merci d'avance pour vos retours !

Martin

Bonjour,

Et avec un sketch qui ferait le pont entre l'usb de l'arduino et l'imprimante ?

#include <NewSoftSerial.h>

NewSoftSerial thermal(2, 3); // RX to digital 2, TX to digital 3

#define  heatTime 80
#define  heatInterval 255
#define  printDensity 15
#define printBreakTime 15

void setup()
{
  Serial.begin(115200);
  thermal.begin(19200); 
  thermal.write(27);
  thermal.write(55);
  thermal.write(7);
  thermal.write(heatTime); //Default 80 or 800us
  thermal.write(heatInterval); //Default 2 or 20us
  thermal.write(18);
  thermal.write(35);
  thermal.write((printDensity<<4) | printBreakTime);
  Serial.println("READY");
}

void loop()
{
  if(Serial.available() > 0)
    thermal.write(Serial.read());
}

/*
Serial byte code :
underline - 1px : 27 45 1
underline - 2px : 27 45 2
underline - off : 27 45 0
text bold - on : 27 32 1
text bold - off : 27 32 0
advance paper : 10
height/width enlarge : 29 33 <size>
normal text size : 29 33 0
*/

Ensuite il suffit d'envoyer le texte avec les octets spéciaux (si besoin) directement avec processing via le port série.

Ok merci Skywodd pour ta réponse !

J'ai donc créé un petit sketch processing qui m'envoie des valeurs random au port COM6 qui correspond bien à celui où est branché mon arduino.

Lorsque j'essaie d'envoyer également ton sketch arduino, j'obtiens l'erreur : "COM6 is already in use".

Je me dis donc qu'il faut d'abord envoyer les valeurs dans le port via processing puis ensuite les imprimer. Lorsque je fais ça dans ce sens, l'imprimante m'imprime -1, signe qu'il ne trouve rien dans le port..

Tu aurais une idée pour contourner le problème ?

Je sens qu'on s'approche cela dit !

Merci encore,

Martin

Est ce qu'il est possible de stocker mes valeurs dans un autre port (par exemple COM 0) et dire à arduino d'aller me chercher mes valeurs dans ce port ? Je ne trouve pas ce cas là sur arduino.cc

Est ce qu'il est possible de stocker mes valeurs dans un autre port (par exemple COM 0) et dire à arduino d'aller me chercher mes valeurs dans ce port ? Je ne trouve pas ce cas là sur arduino.cc

martindaniel4:
Est ce qu'il est possible de stocker mes valeurs dans un autre port (par exemple COM 0) et dire à arduino d'aller me chercher mes valeurs dans ce port ? Je ne trouve pas ce cas là sur arduino.cc

7
Je crois que tu est en train de confondre port série et espace de stockage :wink:

Bien que les programmes arduino et processing se ressemblent énormément il sont radicalement différent.
Un port série correspond à un moyen de transfert d'octet entre deux périphérique, tu ne peut pas créer un port série virtuelle dans lequel stocker des données.
Pour utiliser mon code d'exemple il faut que tu utilise l'arduino ide pour compiler et "uploader" les sketch arduino sur ton arduino, une fois que c'est fait tout le texte qui sera envoyé sur le port série de l'arduino sera envoyé telle quelle à l'imprimante.

Le fait que tu est le message "COM6 is already in use" signifie que l'arduino ide est en train de communiquer avec l'arduino, un port série ne pouvant être utilisé que par un programme simultanément ton programme processing ne peut pas ouvrir une nouvelle communication avec l'arduino via ce même port d'ou l'erreur.

Pour tester mon code, upload le sketch arduino via l'arduino ide puis ouvre le "serial monitor", règle le sur la vitesse de 115200 bauds puis envoi du texte (hello world par exemple) normalement l'imprimante devrai l'imprimer.

Le fait que tu envoi des valeurs random à l'imprimante implique que tu peut envoyer par la même occasion des caractères spéciaux (il sont listé en bas de mon code) qui vont être suivie d'instructions erroné (l'aléatoire ne fait pas souvent les choses bien ;)) d'où le -1.

Ok je vais donc essayer avec le serial monitor.

Si je comprends bien, une fois le sketch uploadé sur le terminal arduino, celui -ci s'exécutera en boucle, imprimant le contenu que je lui transmet via le serial.

Ce qui m'étonne juste c'est que ça aurait dû marcher du coup lorsque j'ai essayé d'uploader le sketch sur arduino, puis d'envoyer des octets avec processing. Je vais reessayer et te tiens au courant.

Dernier truc : il semble que le thermal printer peut lire du bmp. En dernier recours, je peux toujours exporter mon sketch processing en bitmap puis l'importer dans Arduino pour l'imprimer.

Affaire à suivre, merci encore pour ton aide !

Martin

J'ai donc essayé avec ton code en entrant les valeurs directement dans le serial monitor.

L'imprimante imprime bien le texte que je lui envoie mais en transformant les strings en caractères AASCI. 'Hello World' devient donc la suite de nombre 104 101 108 108 111 32 119 111 114 198 100 13, chacun renvoyés à la ligne, ce qui n'est pas très pratique.

J'ai également essayé en envoyant dans le serial monitor d'autres valeurs telles que string = "a", mais rien n'y fait..

Quelqu'un a déjà rencontré un cas similaire ?

Merci d'avance,

Martin