je dispose d'un codeur heidenhain dont je souhaite récupérer la valeur afficher via le port série.
je "part" d'un programme labview qui fait ce travail mais j'ai besoin de le faire sur un Arduino afin d'effectuer une conversion valeur numérique vers un tension analogique.
après plusieurs essais j'arrive a envoyer correctement le commande mais ses sur le stockage de la chaîne de retour ou je n'arrive pas a comprendre la façon de faire.
voici le programme que j'ai fait en dernier
char recu[17];
String reponse;
int i;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600, SERIAL_7E2);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print("\02\r\n");
delay(100); // delay in between reads for stability
i=0;
while(Serial.available()>0) {
recu[i]=Serial.read();
reponse +=recu[i];
i++;
delay(200);
}
if (i>0){
Serial.println(reponse + ".");
}
delay(1000);
}
je vous joint le programme labview face avant et diagramme et en 3.png la face avant mais avec l'affichage avec les code héxa
Sur ce forum un lien vers la notice du codeur serait beaucoup plus 'productif' que des infos indirectes via Labview , logiciel qui pour plusieurs raisons ne dit rien a une bonne partie des habitués du forum.
Ceux ci se procurent eux mêmes les logiciels et privilégient l'open source, le multiplateforme et le gratuit, ... pas du tout le profil de Labview
Je ne comprends pas trop ton programme.
Tu initialises ton port série pour la liaison avec ton appareil heidenhain et à la fin du programme, tu essaies d'envoyer ce que tu espères avoir reçu vers le moniteur série ?
Pourriez vous décrire précisément (taille, format, structure, codage...) les trames :
_ que vous envoyez à l'Arduino
_ que vous voulez que l'Arduino renvoie
Egalement décrire ce qui vous gêne dans votre programme actuel.
On peut voir déjà qu'il y a un souci avec l'utilisation [modifié] de la String "reponse" qui n'est jamais réinitialisée.
Pourquoi une String et pas une chaine de caractères (un tableau)?
voici la commande qui demande a l’appareil de renvoyer la valeur afficher:
Serial.print("\02\r\n");
cette commande marche car avec un adaptateur rs232/usb et un terminal série, lorsque l'arduino envoi cette commande l'appareil renvoyer bien la valeur afficher
la chaîne renvoyer par l’appareil est "décrite" dans les image 1et 3 du 1er post la différence et le mode d'affichage en 1 se l'affichage normal et en 3 ses avec les "code héxa".
pour
Egalement décrire ce qui vous gêne dans votre programme actuel.
On peut voir déjà qu'il y a un souci avec l'utilisation [modifié] de la String "reponse" qui n'est jamais réinitialisée.
Pourquoi une String et pas une chaine de caractères (un tableau)?
j'avoue que je ne sais pas ce qui serai le mieux la je suis ouvert au proposition, sachant que j'aimerai pouvoir "traiter" la valeur reçut en numérique afin d'effectuer un calcul (mise a l'échelle) pour faire correspondre la valeur a 1 tension.
Alors c'est bien ce que je pensais, cela ne peut absolument pas fonctionner.
Tu essaies de communiquer avec 2 appareils sur le même port série : le nb280 et ton pc. Tu peux contourner le problème de 2 manières différentes : soit utiliser softwareserial , soit utiliser une carte possédant plusieurs ports série en natif : la méga par exemple.
Dans ton programme, ta demande paraît correctement effectuée . Vérifier tout de meme le parametrage de ton nd280 car 9600 baud n'est pas, me semble t'il, la valeur d'origine du paramétrage.
Pour la réception, tu as juste besoin de convertir les caractères significatifs en nombre. Je te donne une piste : le caractère de code ascii 48 est 0,le code 49 est 1 ....
Donc pour convertir un code ascii en nombre, il faut vérifier que le code est compris entre 48 et 57, ensuite, lui ôter 48, et tu te retrouves avec la valeur du nombre ascii reçu.
En espérant avoir été clair pour te mettre sur la bonne voie.
Re,
En relisant plus attentivement ton attente finale, il faut se rappeler que les cartes uno ne peuvent pas faire,sans ajout de cna externe,une véritable sortie analogique mais une sortie en PWM sur 256 niveaux (de 0 à 5 volts, soit une résolution de 0,0195 volts).
En fonction de l'utilisation finale, cela peut être rédhibitoire.
Alors c'est bien ce que je pensais, cela ne peut absolument pas fonctionner.
Tu essaies de communiquer avec 2 appareils sur le même port série : le nb280 et ton pc. Tu peux contourner le problème de 2 manières différentes : soit utiliser softwareserial , soit utiliser une carte possédant plusieurs ports série en natif : la méga par exemple.
non c'était un bricolage pour vérifier que l’appareil émettait bien la valeur après avoir reçut la commande, un bricolage pas safe du tout.
le nd280 ne communique qu’avec l'arduino.
je préfère utiliser le port série matériel a cause du buffer, jme sens pas trop a l'aise sur l’utilisation du softwareserial.
j'ai prit la vitesse la + basse le temps du développement, j'augmenterai cette vitesse et réduirai les delay a la fin.
pour le réception je vois un peu ce qu'il faut faire avec tes indication: réception des 17byte dans un tableau puis "écrémage" des parties non utile et enfin conversion.
pour la sortie analogique j'ai acheter un dac mpc4725 afin d’éviter ce problème car on va visualiser ce signal sur un ocsillo.