void laser_init() { // Initialize timers for laser intensity control #if LASER_CONTROL == 1 if (LASER_FIRING_PIN == 2 || LASER_FIRING_PIN == 3 || LASER_FIRING_PIN == 5) timer3_init(LASER_FIRING_PIN); if (LASER_FIRING_PIN == 6 || LASER_FIRING_PIN == 7 || LASER_FIRING_PIN == 8) timer4_init(LASER_FIRING_PIN); #endif #if LASER_CONTROL == 2 if (LASER_INTENSITY_PIN == 2 || LASER_INTENSITY_PIN == 3 || LASER_INTENSITY_PIN == 5) timer3_init(LASER_INTENSITY_PIN); if (LASER_INTENSITY_PIN == 6 || LASER_INTENSITY_PIN == 7 || LASER_INTENSITY_PIN == 8) timer4_init(LASER_INTENSITY_PIN); #endif #ifdef LASER_PERIPHERALS digitalWrite(LASER_PERIPHERALS_PIN, HIGH); // Laser peripherals are active LOW, so preset the pin pinMode(LASER_PERIPHERALS_PIN, OUTPUT); digitalWrite(LASER_PERIPHERALS_STATUS_PIN, HIGH); // Set the peripherals status pin to pull-up. pinMode(LASER_PERIPHERALS_STATUS_PIN, INPUT); #endif // LASER_PERIPHERALS // initialize state to some sane defaults laser.intensity = 100.0; laser.ppm = 0.0; laser.duration = 0; laser.status = LASER_OFF; laser.firing = LASER_OFF; laser.mode = CONTINUOUS; laser.last_firing = 0; laser.diagnostics = false; laser.time = 0; #ifdef LASER_RASTER laser.raster_aspect_ratio = LASER_RASTER_ASPECT_RATIO; laser.raster_mm_per_pulse = LASER_RASTER_MM_PER_PULSE; laser.raster_direction = 1; #endif // LASER_RASTER #ifdef MUVE_Z_PEEL laser.peel_distance = 2.0; laser.peel_speed = 2.0; laser.peel_pause = 0.0; #endif // MUVE_Z_PEEL laser_extinguish(); }
static void laser_test_fire(uint8_t power, uint8_t dwell) { enquecommand_P(PSTR("M80")); // Enable laser accessories since we don't know if its been done (and there's no penalty for doing it again). laser_fire(power); delay(dwell); laser_extinguish(); }