No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cpp 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include <Arduino.h>
  2. #include <TimerOne.h>
  3. #include "config.h"
  4. #include "config_pins.h"
  5. #include "common.h"
  6. #include "data.h"
  7. #include "encoder.h"
  8. #include "lcd.h"
  9. #include "steppers.h"
  10. #include "states.h"
  11. static volatile bool still_running = false;
  12. void print_data(void) {
  13. Serial.println(F("XY:"));
  14. Serial.print(F("\t X: "));
  15. Serial.print(X_AXIS_MIN);
  16. Serial.print(F(" mm - "));
  17. Serial.print(X_AXIS_MAX);
  18. Serial.println(F(" mm"));
  19. Serial.print(F("\t Y: "));
  20. Serial.print(Y_AXIS_MIN);
  21. Serial.print(F(" mm - "));
  22. Serial.print(Y_AXIS_MAX);
  23. Serial.println(F(" mm"));
  24. Serial.print(F("\t"));
  25. Serial.print(XY_STEPS_PER_MM);
  26. Serial.println(F(" steps/mm"));
  27. Serial.print(F("\t"));
  28. Serial.print(XY_MAX_SPEED);
  29. Serial.println(F(" mm/s"));
  30. Serial.print(F("\t"));
  31. Serial.print(XY_MAX_ACCEL);
  32. Serial.println(F(" mm/s^2"));
  33. Serial.println();
  34. // ----------------------------------
  35. Serial.println(F("Z:"));
  36. Serial.print(F("\t"));
  37. Serial.print(Z_AXIS_MIN);
  38. Serial.print(F(" mm - "));
  39. Serial.print(Z_AXIS_MAX);
  40. Serial.println(F(" mm"));
  41. Serial.print(F("\t"));
  42. Serial.print(Z_STEPS_PER_MM);
  43. Serial.println(F(" steps/mm"));
  44. Serial.print(F("\t"));
  45. Serial.print(Z_MAX_SPEED);
  46. Serial.println(F(" mm/s"));
  47. Serial.print(F("\t"));
  48. Serial.print(Z_MAX_ACCEL);
  49. Serial.println(F(" mm/s^2"));
  50. Serial.println();
  51. // ----------------------------------
  52. Serial.println(F("E:"));
  53. Serial.print(F("\t"));
  54. Serial.print(E_AXIS_MIN);
  55. Serial.print(F(" mm - "));
  56. Serial.print(E_AXIS_MAX);
  57. Serial.println(F(" mm"));
  58. Serial.print(F("\t"));
  59. Serial.print(E_STEPS_PER_PERCENT);
  60. Serial.println(F(" steps/percent"));
  61. Serial.print(F("\t"));
  62. Serial.print(E_MAX_SPEED);
  63. Serial.println(F(" percent/s"));
  64. Serial.print(F("\t"));
  65. Serial.print(E_MAX_ACCEL);
  66. Serial.println(F(" percent/s^2"));
  67. Serial.println();
  68. }
  69. void fast_loop(void) {
  70. still_running = steppers_run();
  71. encoder_run();
  72. }
  73. void setup() {
  74. pinMode(LED_PIN, OUTPUT);
  75. digitalWrite(LED_PIN, HIGH);
  76. pinMode(BEEPER, OUTPUT);
  77. blocking_beep(100, 1000);
  78. // turn on fan connected to D8 for electronics
  79. pinMode(FAN_PIN, OUTPUT);
  80. digitalWrite(FAN_PIN, HIGH);
  81. Serial.begin(115200);
  82. Serial.println(F("Initializing Fuellfix v2"));
  83. Serial.print(F("Version: "));
  84. Serial.println(FIRMWARE_VERSION);
  85. Serial.println(F("Init data"));
  86. data_init();
  87. Serial.println(F("Init encoder"));
  88. encoder_init();
  89. Serial.println(F("Init LCD"));
  90. lcd_init();
  91. Serial.println(F("Init stepper motors"));
  92. steppers_init();
  93. print_data();
  94. Serial.println(F("ready, showing splash screen"));
  95. digitalWrite(LED_PIN, LOW);
  96. blocking_beep(100, 2000);
  97. // wait some time to show splash screen
  98. delay(2000);
  99. Serial.println(F("Init state machine"));
  100. states_init();
  101. blocking_beep(100, 2000);
  102. Serial.println(F("starting main loop"));
  103. Timer1.initialize(1000); // 1000us -> 1kHz
  104. Timer1.attachInterrupt(fast_loop);
  105. }
  106. void loop() {
  107. common_run(millis());
  108. CLEAR_STORE_INTERRUPTS();
  109. int click = encoder_click();
  110. int change = encoder_change();
  111. int rpm = encoder_rpm();
  112. int kill = kill_switch();
  113. bool motors_done = !still_running;
  114. RESTORE_INTERRUPTS();
  115. struct StateMachineInput smi(click, change, rpm, kill, motors_done);
  116. states_run(smi);
  117. lcd_loop();
  118. delay(10);
  119. }