void init_hardware()
{

    pinMode(LASER_PIN, OUTPUT);
    laser_off();

}
Exemple #2
0
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();

  }
  
}
Exemple #4
0
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;
    
}
Exemple #5
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;
  }
}