void EmcAdapter::gatherDeviceData() { if (!mConnected) { if (!connect()) sleep(5); else mAvail.available(); } else { if (!mEmcStatusBuffer->valid()) { disconnect(); return; } if(mEmcStatusBuffer->peek() == EMC_STAT_TYPE) { memcpy(&mEmcStatus, mEmcStatusBuffer->get_address(), sizeof(EMC_STAT)); actual(); commanded(); spindle(); feedrate(); program(); machine(); execution(); alarms(); } } }
/** * First thing this machine does on startup. Runs only once. */ void setup() { Serial.begin(BAUD); // open coms #if MOTOR_SHIELD_VERSION == 2 AFMS.begin(); // create with the default frequency 1.6KHz #endif help(); // say hello position(0,0); // set staring position feedrate(200); // set default speed ready(); }
/** * Read the input buffer and find any recognized commands. One G or M command per line. */ void processCommand() { // blank lines if(buffer[0]==';') return; long cmd; // is there a line number? cmd=parsenumber('N',-1); if(cmd!=-1 && buffer[0]=='N') { // line number must appear first on the line if( cmd != line_number ) { // wrong line number error Serial.print(F("BADLINENUM ")); Serial.println(line_number); return; } // is there a checksum? if(strchr(buffer,'*')!=0) { // yes. is it valid? char checksum=0; int c=0; while(buffer[c]!='*') checksum ^= buffer[c++]; c++; // skip * int against = strtod(buffer+c,NULL); if( checksum != against ) { Serial.print(F("BADCHECKSUM ")); Serial.println(line_number); return; } } else { Serial.print(F("NOCHECKSUM ")); Serial.println(line_number); return; } line_number++; } cmd = parsenumber('G',-1); switch(cmd) { case 0: case 1: { // line feedrate(parsenumber('F',fr)); line( parsenumber('X',(mode_abs?px:0)) + (mode_abs?0:px), parsenumber('Y',(mode_abs?py:0)) + (mode_abs?0:py) ); break; } case 2: case 3: { // arc feedrate(parsenumber('F',fr)); arc(parsenumber('I',(mode_abs?px:0)) + (mode_abs?0:px), parsenumber('J',(mode_abs?py:0)) + (mode_abs?0:py), parsenumber('X',(mode_abs?px:0)) + (mode_abs?0:px), parsenumber('Y',(mode_abs?py:0)) + (mode_abs?0:py), (cmd==2) ? -1 : 1); break; } case 4: pause(parsenumber('S',0) + parsenumber('P',0)*1000.0f); break; // dwell case 90: mode_abs=1; break; // absolute mode case 91: mode_abs=0; break; // relative mode case 92: // set logical position position( parsenumber('X',0), parsenumber('Y',0) ); break; default: break; } cmd = parsenumber('M',-1); switch(cmd) { case 18: // disable motors release(); break; case 100: help(); break; case 110: line_number = parsenumber('N',line_number); break; case 114: where(); break; default: break; } }