grblControl Вопрос технического плана
- Войдите на сайт для отправки комментариев
Пт, 05/05/2017 - 20:30
grblControl Что в итоге программа передаёт в ардуино. в смысле формат G-code символы или преобразованые в двоичный формат?
Простите за тупой вопрос.
И где почитать вообще принцип работы ардуино (как я понял в нем некий буд есть - скетчами мы заставляем его как то реагировать) а вот чтобы реакция происходила - что передаётся ардуинке по юсб символы или уже двоичный код?
И где почитать вообще принцип работы ардуино (как я понял в нем некий буд есть - скетчами мы заставляем его как то реагировать)
Не правильно. Бут (он же бутлоадер, bootloader, загрузчик) нужен только для загрузки скетча (программы) в ардуину. На работу загруженного скетча (программы) он никак не влияет и для этого не нужен.
а вот чтобы реакция происходила - что передаётся ардуинке по юсб символы или уже двоичный код?
Это зависит исключительно от написанных программ: отправляющей данные и принимающей данные. Программист сам решает, какие данные и в каком виде передавать. И как их обрабатывать после приёма. Короче, нужно смотреть исходный код отправляющей программы и принимающей программы. Либо искать описание.
grblControl Что в итоге программа передаёт в ардуино. в смысле формат G-code символы или преобразованые в двоичный формат?
Чтобы узнать, какие данные передаёт программа grblControl - нужно либо искать описание на эту программу, либо изучать её исходный код.
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 миллисекнду. }Не судите строго - взято от сюда хочу разобраться просто
http://ecnc.ru/flash/uln2003_etching
Serg79h, G-code - это текст. Как он попадает в Arduino - решает разработчик какждого конкретного устройства. В приведенном Вами коде - через последовательный порт. Но может, например, читаться с SD-карточки. В последнем случае устройство полшучасется более автономным.