#include #include #include "config.h" #include "config_pins.h" #include "common.h" #include "data.h" #include "encoder.h" #include "lcd.h" #include "steppers.h" #include "states.h" static volatile bool still_running = false; void print_data(void) { Serial.println(F("XY:")); Serial.print(F("\t X: ")); Serial.print(X_AXIS_MIN); Serial.print(F(" mm - ")); Serial.print(X_AXIS_MAX); Serial.println(F(" mm")); Serial.print(F("\t Y: ")); Serial.print(Y_AXIS_MIN); Serial.print(F(" mm - ")); Serial.print(Y_AXIS_MAX); Serial.println(F(" mm")); Serial.print(F("\t")); Serial.print(XY_STEPS_PER_MM); Serial.println(F(" steps/mm")); Serial.print(F("\t")); Serial.print(XY_MAX_SPEED); Serial.println(F(" mm/s")); Serial.print(F("\t")); Serial.print(XY_MAX_ACCEL); Serial.println(F(" mm/s^2")); Serial.println(); // ---------------------------------- Serial.println(F("Z:")); Serial.print(F("\t")); Serial.print(Z_AXIS_MIN); Serial.print(F(" mm - ")); Serial.print(Z_AXIS_MAX); Serial.println(F(" mm")); Serial.print(F("\t")); Serial.print(Z_STEPS_PER_MM); Serial.println(F(" steps/mm")); Serial.print(F("\t")); Serial.print(Z_MAX_SPEED); Serial.println(F(" mm/s")); Serial.print(F("\t")); Serial.print(Z_MAX_ACCEL); Serial.println(F(" mm/s^2")); Serial.println(); // ---------------------------------- Serial.println(F("E:")); Serial.print(F("\t")); Serial.print(E_AXIS_MIN); Serial.print(F(" mm - ")); Serial.print(E_AXIS_MAX); Serial.println(F(" mm")); Serial.print(F("\t")); Serial.print(E_STEPS_PER_PERCENT); Serial.println(F(" steps/percent")); Serial.print(F("\t")); Serial.print(E_MAX_SPEED); Serial.println(F(" percent/s")); Serial.print(F("\t")); Serial.print(E_MAX_ACCEL); Serial.println(F(" percent/s^2")); Serial.println(); } void fast_loop(void) { still_running = steppers_run(); encoder_run(); } void setup() { pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, HIGH); pinMode(BEEPER, OUTPUT); blocking_beep(100, 1000); // turn on fan connected to D8 for electronics pinMode(FAN_PIN, OUTPUT); digitalWrite(FAN_PIN, HIGH); Serial.begin(115200); Serial.println(F("Initializing Fuellfix v2")); Serial.print(F("Version: ")); Serial.println(FIRMWARE_VERSION); Serial.println(F("Init data")); data_init(); Serial.println(F("Init encoder")); encoder_init(); Serial.println(F("Init LCD")); lcd_init(); Serial.println(F("Init stepper motors")); steppers_init(); print_data(); Serial.println(F("ready, showing splash screen")); digitalWrite(LED_PIN, LOW); blocking_beep(100, 2000); // wait some time to show splash screen delay(2000); Serial.println(F("Init state machine")); states_init(); blocking_beep(100, 2000); Serial.println(F("starting main loop")); Timer1.initialize(1000); // 1000us -> 1kHz Timer1.attachInterrupt(fast_loop); } void loop() { common_run(millis()); CLEAR_STORE_INTERRUPTS(); int click = encoder_click(); int change = encoder_change(); int rpm = encoder_rpm(); int kill = kill_switch(); bool motors_done = !still_running; RESTORE_INTERRUPTS(); struct StateMachineInput smi(click, change, rpm, kill, motors_done); states_run(smi); lcd_loop(); delay(10); }