/** *** LaosMotion() Constructor *** Make new motion object **/ LaosMotion::LaosMotion() { extern GlobalConfig *cfg; #if DO_MOTION_TEST tActionRequest act[2]; int i=0; Timer t; #endif pwm.period(1.0 / cfg->pwmfreq); pwm = cfg->pwmmin/100.0; if ( laser == NULL ) laser = new DigitalOut(LASER_PIN); *laser = LASEROFF; mark_speed = cfg->speed; //start.mode(PullUp); xhome.mode(PullUp); yhome.mode(PullUp); isHome = false; plan_init(); st_init(); reset(); mark_speed = cfg->speed; bitmap_speed = cfg->xspeed; action.param = 0; action.target.x = action.target.y = action.target.z = action.target.e =0; action.target.feed_rate = 60*mark_speed; #if DO_MOTION_TEST t.start(); act[0].ActionType = act[1].ActionType = AT_MOVE; act[0].target.feed_rate = 60 * 100; act[1].target.feed_rate = 60 * 200; act[0].target.x = act[0].target.y = act[0].target.z = act[0].target.e = 0; act[1].target.x = act[1].target.y = act[1].target.z = act[1].target.e = 100; act[1].target.y = 200; while(1) { while( plan_queue_full() ) led3 = !led3; led1 = 1; i++; if ( i ) printf("%d PING...\n", t.read_ms()); else printf("%d PONG...\n", t.read_ms()); if ( i > 1 || i<0) i = 0; plan_buffer_line (&act[i]); led1 = 0; } #endif }
/** *** ready() *** ready to receive new commands **/ int LaosMotion::ready() { return !plan_queue_full(); }
int app_main (void) { long timer1 = 0; eParseResult parse_result; buzzer_init(); buzzer_play(1500, 100); /* low beep */ buzzer_wait(); buzzer_play(2500, 200); /* high beep */ init(); read_config(); // grbl init plan_init(); st_init(); // main loop for (;;) { // process characters from the serial port while (!serial_line_buf.seen_lf && (serial_rxchars() != 0) ) { unsigned char c = serial_popchar(); if (serial_line_buf.len < MAX_LINE) serial_line_buf.data [serial_line_buf.len++] = c; if ((c==10) || (c==13)) { if (serial_line_buf.len > 1) serial_line_buf.seen_lf = 1; else serial_line_buf.len = 0; } } // process SD file if no serial command pending if (!sd_line_buf.seen_lf && sd_printing) { if (sd_read_file (&sd_line_buf)) { sd_line_buf.seen_lf = 1; } else { sd_printing = false; serial_writestr ("Done printing file\r\n"); } } // if queue is full, we wait if (!plan_queue_full()) { /* At end of each line, put the "GCode" on movebuffer. * If there are movement to do, Timer will start and execute code which * will take data from movebuffer and generate the required step pulses * for stepper motors. */ // give priority to user commands if (serial_line_buf.seen_lf) { parse_result = gcode_parse_line (&serial_line_buf); serial_line_buf.len = 0; serial_line_buf.seen_lf = 0; } else if (sd_line_buf.seen_lf) { parse_result = gcode_parse_line (&sd_line_buf); sd_line_buf.len = 0; sd_line_buf.seen_lf = 0; } } /* Do every 100ms */ #define DELAY1 100 if (timer1 < millis()) { timer1 = millis() + DELAY1; /* If there are no activity during 30 seconds, power off the machine */ if (steptimeout > (30 * 1000/DELAY1)) { power_off(); } else { steptimeout++; } } #ifdef USE_BOOT_BUTTON // OPTION: enter bootloader on "Boot" button check_boot_request(); #endif } }