Go Down

Topic: logiciel CNC pour arduino en java (Read 2 times) previous topic - next topic

Jean-François

Dans le fichier xyz_gcode_interpreter (à dézipper) il y a trois fichiers .pde:

-xyz_gcode_interpreter.pde

-linear_interpolation.pde

-notes.pde (pas de code, mais des notes)

Il faut prendre le premier et faire un nouveau sketch dans l'ide arduino, puis faire glisser par dessus le deuxième.
Le nom des deux dois se voir en haut de la fenêtre, lors de la compilation les deux sont pris en compte.

En faisant des essais à "blanc", la plaque Arduino branchée seulement sur l'usb et rien d'autre (pas de moteurs), les lumières TX/RX clignote à chaque fois que je clique sur "continue" dans l'appli java.
Je pensais que les lumières TX/RX clignoteraient en continu, mais je dois chaque fois cliquer sur "continue" pour passer au Step suivant.
Je me demande si l'appli java n'attend pas un message de confirmation de la plaque Arduino pour continuer, mais je ne vois pas où cela se trouve dans le .pde.  :-/
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#11
Jun 05, 2008, 09:24 am Last Edit: Jun 05, 2008, 09:41 am by jfs Reason: 1
Je fais des essais entre l'Arduino et le tableau de contrôle CNC, l'Arduino devrait renvoyer quelque chose en confirmation pour passer de Step en Step, mais ce n'est pas le cas, le programme en java se met en pause après chaque étape et il faut le relancer.
J'ai placé des led sur les pins 2,3,4,5,7,8,10.
la led 10 reste allumée en permanence (PWM chauffe fil) et décochant la case "Heater c" et en mettant la valeur à zéro, la led ne s'éteint pas. Les autres ne s'allument pas lors du passage à un autre step.

D'après ce que j'ai pu comprendre dans le fichier java, il envoie des paquets comme ça :

UX+000006Y+000003Z+000002E1*

U : début du string
X-Y-Z : paramètre des trois axes en +/-
* : fin de string

Il me semble avoir encore vu quelque part qu'après l'* il y a encore un "/0" (mais je ne suis pas sur).

Par contre le string "UX+000006Y+000003Z+000002E1" est converti en Ascii 0-9.

j'ai essayé d'envoyer des paquets directement avec le Serila monitor d'Arduino 0010, mais rien ne bouge

Est -ce que l'Arduino reçoit "UX+000006Y+000003Z+000002E1" car il l'aurait convertit à nouveau en caractères ou est-ce qu'il reçoit "858843484848484854..." ?

Est-ce qu'il y a un moyen de récupérer ce qu'il y a en sortie du panneau de contrôle et de l'afficher quelque part ?
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

J'y ai passé la journée et je pense avoir grillé un Atmega  :(

je n'arrive toujours pas à avoir cette confirmation de la part de l'Arduino.

J'ai déplacé un bout de code pour voir si j'arrive à envoyer des données au tableau de commande :

Cette partie qui se trouve à la fin de yxz_gcode_interpreter.pde :
Code: [Select]
int CheckTemp(boolean sendBack){
  // read adc pin and optionally send it back to Processing.
  thermistorValue = analogRead( thermistorPin );
  if(thermistorValue < MaxTempReading && thermistorValue > MinTempReading){ tempOK = true; }
  else{ tempOK = false;}
  int t = thermistorValue;
  if(sendBack){ // send temp back to processing if true or too hot/cold
     Serial.print("UT");
     Serial.print(t,DEC);// string representation
     Serial.print("*");
     Serial.print(10,BYTE);
  }
}


Légérement modifiée et placée au début :
Code: [Select]
void loop(){
  tempOK = false;
  int t = thermistorValue;

     Serial.print("UT");
     Serial.print(t,DEC);// string representation
     Serial.print("*");
     Serial.print(10,BYTE);


Au tableau je peux lire une valeur de température, valeur 341 (j'ai mis un capteur de lumière sur la pin a2) :



En haut du tableau sous "Status", il y a en rouge un "paused with 5 NACK", je ne sais pas exactement ce que c'est, je pense à une non-réponse de l'Arduino :

MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#13
Jun 06, 2008, 05:37 pm Last Edit: Jun 06, 2008, 06:11 pm by jfs Reason: 1
Une nouvelle journée à faire des essais et à imprimer le .pde pour le scruter....
Je cherche le petit "truc" qui fait que l'Arduino n'interprète pas ce qui sort du tableau CNC.

J'ai fini par me dire qu'il fallait tout supprimer et ne garder que la base.
J'ai supprimé:

-le contrôle de redondance cyclique (CRC, j'ai pas encore vraiment compris comment il fonctionne  ::) )
-les contrôle de présences de l'extrudeur ou du fil chaud
-la mesure de température du fil chaud
-le contrôle temporisé d'entrée de flux
-la gestion des moteurs (avant / arrière / stop...)

J'ai gardé :

-la lecture du flux
-l'envoi de confirmation (ACK)
-le placement du flux dans un tableau
-la lecture du tableau

Sur les sorties Digitales j'ai mis 4 leds :

-une qui s'allume dès la mise en tension de l'Arduino (pour être sur que du courant sort et que le programme commence), elle devrait s'éteindre lorsqu'un 'U' est lu et se rallumer au bout de 1 seconde.

-trois autres qui correspondent à 'X', 'Y', 'Z', qui devraient s'allumer à la lecture d'une de ces lettres puis s'éteindre au bout de 2 seconde.


Voici le .pde dans cette configuration :

Code: [Select]
#define maxLength   261
#define ACK          6 //confirmation de récéption

char buffer[maxLength];

int pin1 = 2 ;
int pin2 = 4 ;
int pin3 = 5 ;
int bufferLength     = 0;
int heaterPin        = 10;

void setup(){
   Serial.begin(19200);
   pinMode(pin1,OUTPUT);
   pinMode(pin2,OUTPUT);
   pinMode(pin3,OUTPUT);
   pinMode(heaterPin,OUTPUT);
     clearBuffer();
}

void loop(){
 
 digitalWrite(heaterPin,HIGH);
 
  if ( Serial.available() > 0){
     char c = 0;
     
     while (c != 10){ // retour de ligne en fin de paquet
        c = Serial.read();  
      buffer[bufferLength] = c;
      bufferLength++;        
      parseBuffer();
       Serial.print(ACK,BYTE);//ACK = 006
      clearBuffer();
}}}

void clearBuffer(){
 
    bufferLength = 0;
  for(int i = 0; i < maxLength; i++){buffer[i] = 0;}
}

void parseBuffer(){
 
     for (int i = 0; i < bufferLength-3; i++){
      switch (buffer[i]){
        case 'U':
           digitalWrite(heaterPin,LOW);
           delay(1000);
           digitalWrite(heaterPin,HIGH);
        break;
        case 'X':
           digitalWrite(pin1, HIGH);
           delay(2000);
           digitalWrite(pin1, LOW);
           break;
        case 'Y':
           digitalWrite(pin2, HIGH);
           delay(2000);
           digitalWrite(pin2, LOW);
           break;
        case 'Z':
           digitalWrite(pin3, HIGH);
           delay(2000);
           digitalWrite(pin3, LOW);
           break;
      }
  }
}



Le tableau de commande CNC est tel quel (je ne sais pas compiler en java donc pas de modifs pour le moment).
Je charge le fichiers "123block.xml", j'envoie les données (Send Data).
Le xml est lu, l'écran montre l'avancée de "l'usinage".
L'Arduino reçoit et envoie  bien des infos, les led RX / TX clignotent comme je l'imaginais au début des essais.

Je m'aperçois que malgré une lecture de quelque chose, mes leds restent en l'état, je n'arrive pas à lire ou interpréter le flux entrant . :(

Est-ce que quelqu'un aurait une idée du problème ?
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

Je viens de faire un essai en prenant directement la valeur de c (85 pour 'U'):

Code: [Select]

...
while (c != 10){ // retour de ligne en fin de paquet
        c = Serial.read();
       if (c == 85){ digitalWrite(heaterPin,LOW); // 85 = U
           delay(1000);
           digitalWrite(heaterPin,HIGH);}
...


Et là ça clignote.

Maintenant, il faut que je trouve comment convertir ça en caractère.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up