grblControl Вопрос технического плана

Serg79h
Offline
Зарегистрирован: 05.05.2017

 grblControl Что  в итоге программа передаёт в ардуино. в смысле формат G-code символы или преобразованые в двоичный формат?

Простите за тупой вопрос.

Serg79h
Offline
Зарегистрирован: 05.05.2017

И где почитать вообще принцип работы ардуино (как я понял в нем некий буд есть - скетчами мы заставляем его как то реагировать) а вот чтобы реакция происходила - что передаётся ардуинке по юсб символы или уже двоичный код?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Serg79h пишет:

И где почитать вообще принцип работы ардуино (как я понял в нем некий буд есть - скетчами мы заставляем его как то реагировать)

Не правильно. Бут (он же бутлоадер, bootloader, загрузчик) нужен только для загрузки скетча (программы) в ардуину. На работу загруженного скетча (программы) он никак не влияет и для этого не нужен.

Serg79h пишет:

а вот чтобы реакция происходила - что передаётся ардуинке по юсб символы или уже двоичный код?

Это зависит исключительно от написанных программ: отправляющей данные и принимающей данные. Программист сам решает, какие данные и в каком виде передавать. И как их обрабатывать после приёма. Короче, нужно смотреть исходный код отправляющей программы и принимающей программы. Либо искать описание.

Serg79h пишет:

grblControl Что в итоге программа передаёт в ардуино. в смысле формат G-code символы или преобразованые в двоичный формат?

Чтобы узнать, какие данные передаёт программа  grblControl - нужно либо искать описание на эту программу, либо изучать её исходный код.

Serg79h
Offline
Зарегистрирован: 05.05.2017

Jeka_M в каком виде принимает ардуино - но вут допустим скетчи для лазерного гравировщика - отправляются g-coda -а через программу в каком виде вообще физически ардуинка видет - я видимо туплю...

Стоп начинаю понимать немного... исходдя из этого скетча поясните немного если не сложно

Именно какие данные приходят?

Как я понял - вход идёт именно в формате g-code,  прав?

int motorPins[2][4] = {{2, 3, 4, 5},{6, 7, 8, 9}};
int laserPin=13;
int count;
int count2[3] = {0,0,0};
int delayTime;
int val = 0;
int rot=0;
int incomingByte = 0;
int sign=1;

//Процедура настройки прошивки
void setup() {
int i;
Serial.begin(9600);

pinMode(laserPin, OUTPUT);
for (i=0; i<2; i++) {
 for (count = 0; count < 4; count++) {
  pinMode(motorPins[i][count], OUTPUT); //установка режима работы цифровых pin'ов Ардуино
 }
}
delayTime=2; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения)
}

//Поворот двигателя с номерм sm на один шаг вперёд
void moveForward(int sm) {
if ((count2[sm] == 0) || (count2[sm] == 1)) {
 count2[sm] = 16;
}
count2[sm]>>=1;
for (count = 3; count >= 0; count--) {
 digitalWrite(motorPins[sm][count], count2[sm]>>count&0x01);
}
}

//Поворот двигателя с номерм sm на один шаг назад
void moveBackward(int sm) {
if ((count2[sm] == 0) || (count2[sm] == 1)) {
 count2[sm] = 16;
}
count2[sm]>>=1;
for (count = 3; count >= 0; count--) {
 digitalWrite(motorPins[sm][3 - count], count2[sm]>>count&0x01);
}
}

//Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно
void MoveSM(long x, long y, long z) {
 long c[2], c2[2];
 double c1[2], d[2];
 long m, i;
 boolean flg;
 
 c[0] = x;
 c[1] = y;
 
 m = 1;
 for (i=0; i<2; i++) {
  if (m < abs(c[i])) m = abs(c[i]);
 }
 
 for (i=0; i<2; i++) {
  c1[i] = 0;
  d[i] = 1.0 * c[i] / m;
  c2[i] = 0;
 }

 flg = false;
 for (i=0; i<2; i++) {
  if (abs(c1[i]) < abs(c[i])) flg=true;
 }
 while (flg) {
  flg=false;
  for (i=0; i<2; i++) {
   if (abs(c1[i]) < abs(c[i]))
    c1[i] += d[i];
   if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
    if (c[i]>0) {
    c2[i]++;
    moveForward(i);
    } else if (c[i]<0) {
    c2[i]--;
    moveBackward(i);
    }
   }
   if (abs(c1[i]) < abs(c[i])) flg=true;
  }
  delay(delayTime);
 }
 if (z>0) {
  digitalWrite(laserPin, HIGH);
 }
 if (z<0) {
  digitalWrite(laserPin, LOW);
 }
}

//Основной цикл
void loop() {
if (Serial.available() > 0) { //Пришла команда
 long c[4]={0,0,0,0};
 int i;
 sign=1;
 i=0;
 incomingByte = Serial.read();
 while (incomingByte!=';') { //Читаем входящую строку, признак конца строки знак "точка с запятой"
  if (c[i]==0) {
  if (incomingByte=='-')
   sign=-1;
  }
  if (incomingByte==',') {
  c[i]*=sign;
  sign=1;
  i++;
  } else if (incomingByte>='0' && incomingByte<='9') {
  c[i]=c[i]*10+incomingByte-'0';
  }
  while (Serial.available() == 0) {
  delay(1);
  }
  incomingByte = Serial.read();
 }
 c[i]*=sign;
 MoveSM(c[0],c[1],c[2]); //Вращаем двигатели на заданное число шагов
 Serial.println("OK"); //Отправляем компьютеру сообщение "OK", значит можно высылать новую команду
}
else
 delay(1); //Если ничего не пришло, ждём 1 миллисекнду.
} 

 

Serg79h
Offline
Зарегистрирован: 05.05.2017

Не судите строго  - взято от сюда хочу разобраться просто

http://ecnc.ru/flash/uln2003_etching

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Serg79h, G-code - это текст. Как он попадает в Arduino - решает разработчик какждого конкретного устройства. В приведенном Вами коде - через последовательный порт. Но может, например, читаться с SD-карточки. В последнем случае устройство полшучасется более автономным.