My Marlin configs for Fabrikator Mini and CTC i3 Pro B
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.

servo.h 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. *
  21. */
  22. /**
  23. servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
  24. Copyright (c) 2009 Michael Margolis. All right reserved.
  25. This library is free software; you can redistribute it and/or
  26. modify it under the terms of the GNU Lesser General Public
  27. License as published by the Free Software Foundation; either
  28. version 2.1 of the License, or (at your option) any later version.
  29. This library is distributed in the hope that it will be useful,
  30. but WITHOUT ANY WARRANTY; without even the implied warranty of
  31. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  32. Lesser General Public License for more details.
  33. You should have received a copy of the GNU Lesser General Public
  34. License along with this library; if not, write to the Free Software
  35. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  36. */
  37. /**
  38. A servo is activated by creating an instance of the Servo class passing the desired pin to the attach() method.
  39. The servos are pulsed in the background using the value most recently written using the write() method
  40. Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached.
  41. Timers are seized as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four.
  42. The sequence used to seize timers is defined in timers.h
  43. The methods are:
  44. Servo - Class for manipulating servo motors connected to Arduino pins.
  45. attach(pin ) - Attaches a servo motor to an i/o pin.
  46. attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds
  47. default min is 544, max is 2400
  48. write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds)
  49. writeMicroseconds() - Sets the servo pulse width in microseconds
  50. read() - Gets the last written servo pulse width as an angle between 0 and 180.
  51. readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release)
  52. attached() - Returns true if there is a servo attached.
  53. detach() - Stops an attached servos from pulsing its i/o pin.
  54. move(angle) - Sequence of attach(0), write(angle),
  55. With DEACTIVATE_SERVOS_AFTER_MOVE wait SERVO_DELAY and detach.
  56. */
  57. #ifndef servo_h
  58. #define servo_h
  59. #if IS_32BIT_TEENSY
  60. #include "HAL_TEENSY35_36/HAL_Servo_Teensy.h" // Teensy HAL uses an inherited library
  61. #else
  62. #include <inttypes.h>
  63. #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_SAM)
  64. // we're good to go
  65. #else
  66. #error "This library only supports boards with an AVR or SAM3X processor."
  67. #endif
  68. #define Servo_VERSION 2 // software version of this library
  69. class Servo {
  70. public:
  71. Servo();
  72. int8_t attach(int pin); // attach the given pin to the next free channel, set pinMode, return channel number (-1 on fail)
  73. int8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes.
  74. void detach();
  75. void write(int value); // if value is < 200 it is treated as an angle, otherwise as pulse width in microseconds
  76. void writeMicroseconds(int value); // write pulse width in microseconds
  77. void move(int value); // attach the servo, then move to value
  78. // if value is < 200 it is treated as an angle, otherwise as pulse width in microseconds
  79. // if DEACTIVATE_SERVOS_AFTER_MOVE wait SERVO_DELAY, then detach
  80. int read(); // returns current pulse width as an angle between 0 and 180 degrees
  81. int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release)
  82. bool attached(); // return true if this servo is attached, otherwise false
  83. private:
  84. uint8_t servoIndex; // index into the channel data for this servo
  85. int8_t min; // minimum is this value times 4 added to MIN_PULSE_WIDTH
  86. int8_t max; // maximum is this value times 4 added to MAX_PULSE_WIDTH
  87. };
  88. #endif // !TEENSY
  89. #endif