void init_hardware() { pinMode(LASER_PIN, OUTPUT); laser_off(); }
int main(void) { laser_off(); bootloaderSwitcher(); init_serial_number(); USB_Start(); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); setupJP5(); setupJP6(); setupLeds(); init_watchdog(); setup_interlock(); //debug: flas the light on boot, to watch for watchdog resets setCoilLed(1); initialize_led_override(); if (LED_OVERRIDES_EN){ play_long_spin(); //Spin the led's while we load the rest of this stuff } initialize_pwm(); initialize_dripper(); setCornerLed(0); setInLed(0); setCoilLed(0); setUSBLed(0); SysTick_Config(SystemCoreClock / 2000); //48MHz/2000 gives us 2000 ticks per second (2KHz) int last_drip_count = g_dripcount; while(1) { serialio_feed(); updateADC(); if (move_count!=0){ g_twig_coils=0; g_key_coil_gate=0; } if (g_dripcount != last_drip_count) { last_drip_count = g_dripcount; send_updated_drip_count(); } if ((tick % 500) == 0) { send_printer_status(); } } }
void processController(){ if(data_received){ switch(received_command){ case 0x01: write_line_enable = 1; break; // home y axis case 0x02: home_y_axis(); acknowledge(); break; // home z axis case 0x03: home_z_axis(); acknowledge(); break; // turn laser on case 0x04: laser_on(); acknowledge(); break; // turn laser off case 0x05: laser_off(); acknowledge(); break; // next layer case 0x06: // moveToNextLayer here! moveToNextLayer(); toggle_y_Direction(); acknowledge(); break; case 0x07: moveToNextLayer(); acknowledge(); break; case 0x08: move_z_to_end_position(); acknowledge(); break; case 0x09: set_exposing_cycles(); acknowledge(); break; case 0x0a: move_z_relative(); acknowledge(); break; } } if (exposing_done){ moveToNextLine(); data_table[0] = 0; write_line_enable = 0; exposing_done = 0; acknowledge(); } }
int main(void) { // init i/o DEBUG_PORT = 0x00; DEBUG_DDR = 0xFF; init_ports(); uint8_t i; uint8_t output_mask = 1 << OUTPUT_FIRST; for(i=0; i<N_LASERS; i++) { output_mask |= output_mask << 1; output_mask <<= 1; } /* uart_init(0,0,0,0,0); uart_transmit_byte_block('\n'); uart_transmit_byte_block('\r'); */ int state = ON; for(;;) { // if module is disabled, turn off all outputs while(!is_enabled()) { OUTPUT_PORT &= ~output_mask; led_off(); _delay_ms(10); } // indicator led led_on(); // turn all lasers to state X for(i=0; i<N_LASERS; i++) { if(state == ON) laser_on(i); else laser_off(i); } // wait T ms _delay_ms(10); // is input at state X? uint8_t inputs = 0; // read and parse photodetector inputs inputs = DETECTOR_PINS & DETECTOR_MASK; for(i=0; i<N_LASERS; i++) { if(pin_value(inputs, i+5) == state) { laser[i] += 1; if(laser[i] > THRESH) { laser[i] = THRESH; set_output(i, ON); } else { set_output(i, OFF); } } else { if(laser[i] > 0) /* * TODO : should maybe consider setting it to zero directly */ laser[i] -= 1; // No hysteresis implemented yet. if(laser[i] < THRESH) set_output(i, OFF); } } // change state state ^= 1; } // main return 0; }
/** * 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: // move linear case 1: // move linear // Move Linear here do_move(parsenumber('Y',0), parsenumber('Z',0), parsenumber('F',30000)); break; case 3: delay(parsenumber('D',0)); break; case 4: set_exposing_cycles(parsenumber('E',0)); break; // dwell case 5: fill_laser_buffer(parsedistance('D',0)); break; case 6: delay(20); expose_line(parsenumber('E',1000)); break; case 7: create_test_pattern(); expose_line(parsenumber('E',50000)); break; case 29: //home z- axis home_z_axis(); break; case 30: home_y_axis(); break; case 28: // home all axis break; case 90: mode_abs=1; break; // absolute mode case 91: mode_abs=0; break; // relative mode case 92: // set logical position // set position to 0 here break; default: break; } // M Code section cmd = parsenumber('M',-1); switch(cmd) { case 18: // disable motors motors_release(); break; case 19: laser_on(); break; case 20: laser_off(); break; case 21: vat_down(); break; case 22: vat_up(); break; case 100: help(); break; case 110: line_number = parsenumber('N',line_number); break; case 114: // print position here break; default: break; } }