├── MIDI └── MIDI.ino ├── accel_stepper └── accel_stepper.ino ├── adventure_design_final └── adventure_design_final.ino ├── cnc_shield_stepper_test └── cnc_shield_stepper_test.ino ├── esp32_webserver └── esp32_webserver.ino ├── esp_led_test └── esp_led_test.ino ├── esp_servo └── esp_servo.ino ├── find_pole_pairs_number └── find_pole_pairs_number.ino ├── impedance_control └── impedance_control.ino ├── inverese_kinematics_tset └── inverese_kinematics_tset.ino ├── libraries ├── AS5600 │ ├── AS5600.cpp │ ├── AS5600.h │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── AS5600L_set_address │ │ │ └── AS5600L_set_address.ino │ │ ├── AS5600_I2C_frequency │ │ │ └── AS5600_I2C_frequency.ino │ │ ├── AS5600_angular_speed │ │ │ └── AS5600_angular_speed.ino │ │ ├── AS5600_angular_speed_RPM │ │ │ └── AS5600_angular_speed_RPM.ino │ │ ├── AS5600_burn_conf_mang │ │ │ └── AS5600_burn_conf_mang.ino │ │ ├── AS5600_burn_zpos │ │ │ └── AS5600_burn_zpos.ino │ │ ├── AS5600_demo │ │ │ └── AS5600_demo.ino │ │ ├── AS5600_demo_ESP32 │ │ │ └── AS5600_demo_ESP32.ino │ │ ├── AS5600_demo_RP2040 │ │ │ └── AS5600_demo_RP2040.ino │ │ ├── AS5600_demo_STM32 │ │ │ └── AS5600_demo_STM32.ino │ │ ├── AS5600_demo_offset │ │ │ └── AS5600_demo_offset.ino │ │ ├── AS5600_demo_radians │ │ │ └── AS5600_demo_radians.ino │ │ ├── AS5600_demo_software_direction │ │ │ └── AS5600_demo_software_direction.ino │ │ ├── AS5600_demo_status │ │ │ └── AS5600_demo_status.ino │ │ ├── AS5600_demo_two_I2C │ │ │ └── AS5600_demo_two_I2C.ino │ │ ├── AS5600_outmode_analog_100 │ │ │ └── AS5600_outmode_analog_100.ino │ │ ├── AS5600_outmode_analog_90 │ │ │ └── AS5600_outmode_analog_90.ino │ │ ├── AS5600_outmode_analog_pwm │ │ │ └── AS5600_outmode_analog_pwm.ino │ │ ├── AS5600_outmode_pwm_interrupt │ │ │ └── AS5600_outmode_pwm_interrupt.ino │ │ ├── AS5600_plus_AS5600L │ │ │ └── AS5600_plus_AS5600L.ino │ │ ├── AS5600_position │ │ │ └── AS5600_position.ino │ │ └── AS5600_resetCumulativeCounter │ │ │ └── AS5600_resetCumulativeCounter.ino │ ├── keywords.txt │ ├── library.json │ ├── library.properties │ └── test │ │ └── unit_test_001.cpp ├── AS5600_TEST-main │ ├── AS5600.cpp │ ├── AS5600.h │ ├── AS5600_TEST.ino │ ├── README.md │ └── config.h ├── AccelStepper │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── AFMotor_ConstantSpeed │ │ │ └── AFMotor_ConstantSpeed.pde │ │ ├── AFMotor_MultiStepper │ │ │ └── AFMotor_MultiStepper.pde │ │ ├── Blocking │ │ │ └── Blocking.pde │ │ ├── Bounce │ │ │ └── Bounce.pde │ │ ├── ConstantSpeed │ │ │ └── ConstantSpeed.pde │ │ ├── DualMotorShield │ │ │ └── DualMotorShield.pde │ │ ├── MotorShield │ │ │ └── MotorShield.pde │ │ ├── MultiStepper │ │ │ └── MultiStepper.pde │ │ ├── MultipleSteppers │ │ │ └── MultipleSteppers.pde │ │ ├── Overshoot │ │ │ └── Overshoot.pde │ │ ├── ProportionalControl │ │ │ └── ProportionalControl.pde │ │ ├── Quickstop │ │ │ └── Quickstop.pde │ │ └── Random │ │ │ └── Random.pde │ ├── extras │ │ └── doc │ │ │ ├── AccelStepper_8h-source.html │ │ │ ├── annotated.html │ │ │ ├── classAccelStepper-members.html │ │ │ ├── classAccelStepper.html │ │ │ ├── doxygen.css │ │ │ ├── doxygen.png │ │ │ ├── files.html │ │ │ ├── functions.html │ │ │ ├── functions_func.html │ │ │ ├── index.html │ │ │ ├── tab_b.gif │ │ │ ├── tab_l.gif │ │ │ ├── tab_r.gif │ │ │ └── tabs.css │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── AccelStepper.cpp │ │ ├── AccelStepper.h │ │ ├── MultiStepper.cpp │ │ └── MultiStepper.h ├── ClosedCube_TCA9548A │ ├── LICENSE.md │ ├── README.md │ ├── examples │ │ └── tca9548ademo │ │ │ └── tca9548ademo.ino │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── ClosedCube_TCA9548A.cpp │ │ └── ClosedCube_TCA9548A.h ├── ESP32Servo │ ├── AddDoxygenToGHPages.sh │ ├── README.md │ ├── doxy.doxyfile │ ├── examples │ │ ├── Knob │ │ │ └── Knob.ino │ │ ├── Multiple-Servo-Example-Arduino │ │ │ └── Multiple-Servo-Example-Arduino.ino │ │ ├── PWMExample │ │ │ └── PWMExample.ino │ │ ├── Sweep │ │ │ └── Sweep.ino │ │ ├── ToneExample │ │ │ └── ToneExample.ino │ │ └── analogWriteExample │ │ │ └── analogWriteExample.ino │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── ESP32PWM.cpp │ │ ├── ESP32PWM.h │ │ ├── ESP32Servo.cpp │ │ └── ESP32Servo.h ├── ESP32Servo360 │ ├── README.md │ ├── docs │ │ └── wiring.jpg │ ├── examples │ │ ├── Calibrate │ │ │ └── Calibrate.ino │ │ ├── ClosedLoop │ │ │ └── ClosedLoop.ino │ │ ├── ConstantSpeed │ │ │ └── ConstantSpeed.ino │ │ ├── Deceleration │ │ │ └── Deceleration.ino │ │ ├── EaseRotate │ │ │ └── EaseRotate.ino │ │ ├── MultiServos │ │ │ └── MultiServos.ino │ │ ├── ReadAngle │ │ │ └── ReadAngle.ino │ │ └── RotateToAngle │ │ │ └── RotateToAngle.ino │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── ESP32Servo360.cpp │ │ └── ESP32Servo360.h ├── Fabrik2D │ ├── AUTHORS │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── example_2DOFMoveUpAndDown │ │ │ ├── drawIK_2DOF │ │ │ │ └── drawIK_2DOF.pde │ │ │ ├── example_2DOFMoveUpAndDown.ino │ │ │ └── preview.gif │ │ ├── example_3DOFGrippingOffset │ │ │ ├── drawIK_GrippingOffset │ │ │ │ └── drawIK_GrippingOffset.pde │ │ │ ├── example_3DOFGrippingOffset.ino │ │ │ └── preview.gif │ │ ├── example_3DOFMoveCircle │ │ │ ├── example_3DOFMoveCircle.ino │ │ │ └── preview.gif │ │ ├── example_3DOFToolAngle │ │ │ ├── drawIK_3DOF │ │ │ │ └── drawIK_3DOF.pde │ │ │ ├── example_3DOFToolAngle.ino │ │ │ ├── preview1.gif │ │ │ └── preview2.gif │ │ └── example_4DOF │ │ │ ├── drawIK_4DOF │ │ │ └── drawIK_4DOF.pde │ │ │ ├── example_4DOF.ino │ │ │ └── preview.gif │ ├── images │ │ ├── 3DOFSetup.png │ │ ├── 4DOFSetup.png │ │ └── exec_evaluation.png │ ├── keywords.txt │ ├── library.properties │ ├── src │ │ ├── FABRIK2D.cpp │ │ └── FABRIK2D.h │ └── test │ │ └── unit_tests.cpp ├── HardwareSerial_RS485 │ ├── InstallationInstructions.txt │ ├── LICENSE │ ├── README.md │ ├── README.txt │ ├── examples │ │ ├── .gitignore │ │ ├── RS485CommandResponse │ │ │ ├── .gitignore │ │ │ └── RS485CommandResponse.ino │ │ └── RS485_USB │ │ │ ├── .gitignore │ │ │ └── RS485_USB.ino │ ├── extras │ │ ├── .gitignore │ │ ├── DisableHardwareSerial.h │ │ ├── boards.txt │ │ └── documentation │ │ │ ├── .gitignore │ │ │ └── Schema.jpg │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── .gitignore │ │ ├── HardwareSerialRS485.cpp │ │ ├── HardwareSerialRS485.h │ │ ├── MessageReader.h │ │ └── utility │ │ ├── .gitignore │ │ ├── BitManipulation.h │ │ ├── HardwareSerialRS485_Enabled.h │ │ ├── HardwareSerialRS485_Helper.h │ │ ├── HardwareSerialRS485_Tracer.h │ │ ├── HardwareSerialRS485_configuration.h │ │ ├── MessageFilter.h │ │ ├── SerialUSBSwitch.h │ │ └── USARTdef.h ├── Kinematics │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── forward_kinematics │ │ │ └── forward_kinematics.ino │ │ └── inverse_kinematics │ │ │ └── inverse_kinematics.ino │ ├── keywords.txt │ ├── library.properties │ └── src │ │ ├── Kinematics.cpp │ │ ├── Kinematics.h │ │ ├── MatrixUtils.cpp │ │ └── MatrixUtils.h ├── SSD1306Ascii │ ├── LICENSE.md │ ├── README.md │ ├── doc │ │ ├── 5x7fonts.pdf │ │ ├── Doxyfile │ │ ├── MainPage │ │ │ └── SSD1306mainpage.h │ │ ├── SH1106.pdf │ │ ├── SSD1306.pdf │ │ ├── SSD1306Ascii.html │ │ ├── clean_html.bat │ │ ├── del_htm.bat │ │ ├── html │ │ │ ├── _avr_i2c_8h.html │ │ │ ├── _avr_i2c_8h__dep__incl.png │ │ │ ├── _avr_i2c_8h__incl.png │ │ │ ├── _digital_output_8h.html │ │ │ ├── _digital_output_8h__dep__incl.png │ │ │ ├── _digital_output_8h__incl.png │ │ │ ├── _s_s_d1306_ascii_8h.html │ │ │ ├── _s_s_d1306_ascii_8h__dep__incl.png │ │ │ ├── _s_s_d1306_ascii_8h__incl.png │ │ │ ├── _s_s_d1306_ascii_avr_i2c_8h.html │ │ │ ├── _s_s_d1306_ascii_avr_i2c_8h__incl.png │ │ │ ├── _s_s_d1306_ascii_soft_spi_8h.html │ │ │ ├── _s_s_d1306_ascii_soft_spi_8h__incl.png │ │ │ ├── _s_s_d1306_ascii_spi_8h.html │ │ │ ├── _s_s_d1306_ascii_spi_8h__incl.png │ │ │ ├── _s_s_d1306_ascii_wire_8h.html │ │ │ ├── _s_s_d1306_ascii_wire_8h__incl.png │ │ │ ├── _s_s_d1306init_8h.html │ │ │ ├── _s_s_d1306init_8h__dep__incl.png │ │ │ ├── all_fonts_8h.html │ │ │ ├── all_fonts_8h__dep__incl.png │ │ │ ├── all_fonts_8h__incl.png │ │ │ ├── annotated.html │ │ │ ├── bc_s.png │ │ │ ├── bdwn.png │ │ │ ├── class_digital_output-members.html │ │ │ ├── class_digital_output.html │ │ │ ├── class_s_s_d1306_ascii-members.html │ │ │ ├── class_s_s_d1306_ascii.html │ │ │ ├── class_s_s_d1306_ascii__coll__graph.png │ │ │ ├── class_s_s_d1306_ascii__inherit__graph.png │ │ │ ├── class_s_s_d1306_ascii_avr_i2c-members.html │ │ │ ├── class_s_s_d1306_ascii_avr_i2c.html │ │ │ ├── class_s_s_d1306_ascii_avr_i2c__coll__graph.png │ │ │ ├── class_s_s_d1306_ascii_avr_i2c__inherit__graph.png │ │ │ ├── class_s_s_d1306_ascii_soft_spi-members.html │ │ │ ├── class_s_s_d1306_ascii_soft_spi.html │ │ │ ├── class_s_s_d1306_ascii_soft_spi__coll__graph.png │ │ │ ├── class_s_s_d1306_ascii_soft_spi__inherit__graph.png │ │ │ ├── class_s_s_d1306_ascii_spi-members.html │ │ │ ├── class_s_s_d1306_ascii_spi.html │ │ │ ├── class_s_s_d1306_ascii_spi__coll__graph.png │ │ │ ├── class_s_s_d1306_ascii_spi__inherit__graph.png │ │ │ ├── class_s_s_d1306_ascii_wire-members.html │ │ │ ├── class_s_s_d1306_ascii_wire.html │ │ │ ├── class_s_s_d1306_ascii_wire__coll__graph.png │ │ │ ├── class_s_s_d1306_ascii_wire__inherit__graph.png │ │ │ ├── classes.html │ │ │ ├── closed.png │ │ │ ├── dir_000005_000006.html │ │ │ ├── dir_000005_000007.html │ │ │ ├── dir_481cc946b8a81b8d9363a4aad6201160.html │ │ │ ├── dir_481cc946b8a81b8d9363a4aad6201160_dep.png │ │ │ ├── dir_517b237d4747437c31f65ca648893511.html │ │ │ ├── dir_520de49418287da36eb793ef32ea6307.html │ │ │ ├── dir_520de49418287da36eb793ef32ea6307_dep.png │ │ │ ├── dir_5ce56dff155b426144e2267e6314e254.html │ │ │ ├── dir_a991eec27578c865874ede3d8ec657c2.html │ │ │ ├── dir_a991eec27578c865874ede3d8ec657c2_dep.png │ │ │ ├── dir_cd3266ea204ea61f754f07fec3e899f9.html │ │ │ ├── dir_f407cfa5a083ea3a86bed2005dcb9a5e.html │ │ │ ├── dir_f52a68bbba56f2c8881f0d9135f8ef6d.html │ │ │ ├── dir_f52a68bbba56f2c8881f0d9135f8ef6d_dep.png │ │ │ ├── doc.png │ │ │ ├── doxygen.css │ │ │ ├── doxygen.svg │ │ │ ├── dynsections.js │ │ │ ├── files.html │ │ │ ├── folderclosed.png │ │ │ ├── folderopen.png │ │ │ ├── functions.html │ │ │ ├── functions_func.html │ │ │ ├── functions_vars.html │ │ │ ├── globals.html │ │ │ ├── globals_defs.html │ │ │ ├── globals_func.html │ │ │ ├── globals_vars.html │ │ │ ├── graph_legend.html │ │ │ ├── graph_legend.png │ │ │ ├── hierarchy.html │ │ │ ├── index.html │ │ │ ├── inherit_graph_0.png │ │ │ ├── inherit_graph_1.png │ │ │ ├── inherit_graph_2.png │ │ │ ├── inherit_graph_3.png │ │ │ ├── inherits.html │ │ │ ├── jquery.js │ │ │ ├── menu.js │ │ │ ├── menudata.js │ │ │ ├── nav_f.png │ │ │ ├── nav_g.png │ │ │ ├── nav_h.png │ │ │ ├── open.png │ │ │ ├── search │ │ │ │ ├── all_0.html │ │ │ │ ├── all_0.js │ │ │ │ ├── all_1.html │ │ │ │ ├── all_1.js │ │ │ │ ├── all_10.html │ │ │ │ ├── all_10.js │ │ │ │ ├── all_11.html │ │ │ │ ├── all_11.js │ │ │ │ ├── all_12.html │ │ │ │ ├── all_12.js │ │ │ │ ├── all_2.html │ │ │ │ ├── all_2.js │ │ │ │ ├── all_3.html │ │ │ │ ├── all_3.js │ │ │ │ ├── all_4.html │ │ │ │ ├── all_4.js │ │ │ │ ├── all_5.html │ │ │ │ ├── all_5.js │ │ │ │ ├── all_6.html │ │ │ │ ├── all_6.js │ │ │ │ ├── all_7.html │ │ │ │ ├── all_7.js │ │ │ │ ├── all_8.html │ │ │ │ ├── all_8.js │ │ │ │ ├── all_9.html │ │ │ │ ├── all_9.js │ │ │ │ ├── all_a.html │ │ │ │ ├── all_a.js │ │ │ │ ├── all_b.html │ │ │ │ ├── all_b.js │ │ │ │ ├── all_c.html │ │ │ │ ├── all_c.js │ │ │ │ ├── all_d.html │ │ │ │ ├── all_d.js │ │ │ │ ├── all_e.html │ │ │ │ ├── all_e.js │ │ │ │ ├── all_f.html │ │ │ │ ├── all_f.js │ │ │ │ ├── classes_0.html │ │ │ │ ├── classes_0.js │ │ │ │ ├── classes_1.html │ │ │ │ ├── classes_1.js │ │ │ │ ├── classes_2.html │ │ │ │ ├── classes_2.js │ │ │ │ ├── close.svg │ │ │ │ ├── defines_0.html │ │ │ │ ├── defines_0.js │ │ │ │ ├── defines_1.html │ │ │ │ ├── defines_1.js │ │ │ │ ├── defines_2.html │ │ │ │ ├── defines_2.js │ │ │ │ ├── defines_3.html │ │ │ │ ├── defines_3.js │ │ │ │ ├── defines_4.html │ │ │ │ ├── defines_4.js │ │ │ │ ├── defines_5.html │ │ │ │ ├── defines_5.js │ │ │ │ ├── defines_6.html │ │ │ │ ├── defines_6.js │ │ │ │ ├── defines_7.html │ │ │ │ ├── defines_7.js │ │ │ │ ├── defines_8.html │ │ │ │ ├── defines_8.js │ │ │ │ ├── files_0.html │ │ │ │ ├── files_0.js │ │ │ │ ├── files_1.html │ │ │ │ ├── files_1.js │ │ │ │ ├── files_2.html │ │ │ │ ├── files_2.js │ │ │ │ ├── functions_0.html │ │ │ │ ├── functions_0.js │ │ │ │ ├── functions_1.html │ │ │ │ ├── functions_1.js │ │ │ │ ├── functions_2.html │ │ │ │ ├── functions_2.js │ │ │ │ ├── functions_3.html │ │ │ │ ├── functions_3.js │ │ │ │ ├── functions_4.html │ │ │ │ ├── functions_4.js │ │ │ │ ├── functions_5.html │ │ │ │ ├── functions_5.js │ │ │ │ ├── functions_6.html │ │ │ │ ├── functions_6.js │ │ │ │ ├── functions_7.html │ │ │ │ ├── functions_7.js │ │ │ │ ├── functions_8.html │ │ │ │ ├── functions_8.js │ │ │ │ ├── functions_9.html │ │ │ │ ├── functions_9.js │ │ │ │ ├── functions_a.html │ │ │ │ ├── functions_a.js │ │ │ │ ├── functions_b.html │ │ │ │ ├── functions_b.js │ │ │ │ ├── functions_c.html │ │ │ │ ├── functions_c.js │ │ │ │ ├── functions_d.html │ │ │ │ ├── functions_d.js │ │ │ │ ├── functions_e.html │ │ │ │ ├── functions_e.js │ │ │ │ ├── mag_sel.svg │ │ │ │ ├── nomatches.html │ │ │ │ ├── pages_0.html │ │ │ │ ├── pages_0.js │ │ │ │ ├── search.css │ │ │ │ ├── search.js │ │ │ │ ├── search_l.png │ │ │ │ ├── search_m.png │ │ │ │ ├── search_r.png │ │ │ │ ├── searchdata.js │ │ │ │ ├── variables_0.html │ │ │ │ ├── variables_0.js │ │ │ │ ├── variables_1.html │ │ │ │ ├── variables_1.js │ │ │ │ ├── variables_2.html │ │ │ │ ├── variables_2.js │ │ │ │ ├── variables_3.html │ │ │ │ ├── variables_3.js │ │ │ │ ├── variables_4.html │ │ │ │ ├── variables_4.js │ │ │ │ ├── variables_5.html │ │ │ │ ├── variables_5.js │ │ │ │ ├── variables_6.html │ │ │ │ ├── variables_6.js │ │ │ │ ├── variables_7.html │ │ │ │ ├── variables_7.js │ │ │ │ ├── variables_8.html │ │ │ │ ├── variables_8.js │ │ │ │ ├── variables_9.html │ │ │ │ ├── variables_9.js │ │ │ │ ├── variables_a.html │ │ │ │ ├── variables_a.js │ │ │ │ ├── variables_b.html │ │ │ │ └── variables_b.js │ │ │ ├── splitbar.png │ │ │ ├── struct_dev_type-members.html │ │ │ ├── struct_dev_type.html │ │ │ ├── struct_ticker_state-members.html │ │ │ ├── struct_ticker_state.html │ │ │ ├── sync_off.png │ │ │ ├── sync_on.png │ │ │ ├── tab_a.png │ │ │ ├── tab_b.png │ │ │ ├── tab_h.png │ │ │ ├── tab_s.png │ │ │ └── tabs.css │ │ ├── sd1306test.jpg │ │ └── ssd1306sample.jpg │ ├── examples │ │ ├── AvrI2c128x32 │ │ │ └── AvrI2c128x32.ino │ │ ├── AvrI2c128x64 │ │ │ └── AvrI2c128x64.ino │ │ ├── DisplayRotationSpi │ │ │ └── DisplayRotationSpi.ino │ │ ├── DisplayRotationWire │ │ │ └── DisplayRotationWire.ino │ │ ├── FontSamplesSpi │ │ │ └── FontSamplesSpi.ino │ │ ├── FontSamplesWire │ │ │ └── FontSamplesWire.ino │ │ ├── HelloWorldAvrI2c │ │ │ └── HelloWorldAvrI2c.ino │ │ ├── HelloWorldSH1106Spi │ │ │ └── HelloWorldSH1106Spi.ino │ │ ├── HelloWorldSoftSpi │ │ │ └── HelloWorldSoftSpi.ino │ │ ├── HelloWorldSpi │ │ │ └── HelloWorldSpi.ino │ │ ├── HelloWorldWire │ │ │ └── HelloWorldWire.ino │ │ ├── InvertTextSpi │ │ │ └── InvertTextSpi.ino │ │ ├── InvertTextWire │ │ │ └── InvertTextWire.ino │ │ ├── LetterSpacingSpi │ │ │ └── LetterSpacingSpi.ino │ │ ├── LetterSpacingWire │ │ │ └── LetterSpacingWire.ino │ │ ├── ProportionalFormSpi │ │ │ └── ProportionalFormSpi.ino │ │ ├── ProportionalFormWire │ │ │ └── ProportionalFormWire.ino │ │ ├── ScrollingSpi │ │ │ └── ScrollingSpi.ino │ │ ├── ScrollingWire │ │ │ └── ScrollingWire.ino │ │ ├── SixAdcFieldsSpi │ │ │ └── SixAdcFieldsSpi.ino │ │ ├── SixAdcFieldsWire │ │ │ └── SixAdcFieldsWire.ino │ │ ├── SlowScrollWire │ │ │ └── SlowScrollWire.ino │ │ ├── SmoothScrollWire │ │ │ └── SmoothScrollWire.ino │ │ ├── SoftSpi128x32 │ │ │ └── SoftSpi128x32.ino │ │ ├── SoftSpi128x64 │ │ │ └── SoftSpi128x64.ino │ │ ├── Spi128x32 │ │ │ └── Spi128x32.ino │ │ ├── Spi128x64 │ │ │ └── Spi128x64.ino │ │ ├── Spi128x64SH1106 │ │ │ └── Spi128x64SH1106.ino │ │ ├── TickerAdcDemo │ │ │ └── TickerAdcDemo.ino │ │ ├── TickerTextDemo │ │ │ └── TickerTextDemo.ino │ │ ├── Wire128x32 │ │ │ └── Wire128x32.ino │ │ ├── Wire128x64 │ │ │ └── Wire128x64.ino │ │ ├── Wire128x64SH1106 │ │ │ └── Wire128x64SH1106.ino │ │ ├── cmp5x7Fonts │ │ │ └── cmp5x7Fonts.ino │ │ └── print5x7Fonts │ │ │ └── print5x7Fonts.ino │ ├── extras │ │ ├── cpplint.bat │ │ ├── cpplint.py │ │ ├── cpplint.sh │ │ └── openGLCDFontCreator.zip │ ├── library.properties │ └── src │ │ ├── SSD1306Ascii.cpp │ │ ├── SSD1306Ascii.h │ │ ├── SSD1306AsciiAvrI2c.h │ │ ├── SSD1306AsciiSoftSpi.h │ │ ├── SSD1306AsciiSpi.h │ │ ├── SSD1306AsciiWire.h │ │ ├── SSD1306init.h │ │ ├── fonts │ │ ├── Adafruit5x7.h │ │ ├── Arial14.h │ │ ├── Arial_bold_14.h │ │ ├── CalBlk36.h │ │ ├── CalLite24.h │ │ ├── Callibri10.h │ │ ├── Callibri11.h │ │ ├── Callibri11_bold.h │ │ ├── Callibri11_italic.h │ │ ├── Callibri14.h │ │ ├── Callibri15.h │ │ ├── Cooper19.h │ │ ├── Cooper21.h │ │ ├── Cooper26.h │ │ ├── Corsiva_12.h │ │ ├── Iain5x7.h │ │ ├── Roosewood22.h │ │ ├── Roosewood26.h │ │ ├── Stang5x7.h │ │ ├── System5x7.h │ │ ├── SystemFont5x7.h │ │ ├── TimesNewRoman13.h │ │ ├── TimesNewRoman13_italic.h │ │ ├── TimesNewRoman16.h │ │ ├── TimesNewRoman16_bold.h │ │ ├── TimesNewRoman16_italic.h │ │ ├── Verdana12.h │ │ ├── Verdana12_bold.h │ │ ├── Verdana12_italic.h │ │ ├── Verdana_digits_24.h │ │ ├── Wendy3x5.h │ │ ├── X11fixed7x14.h │ │ ├── X11fixed7x14B.h │ │ ├── ZevvPeep8x16.h │ │ ├── allFonts.h │ │ ├── cp437font8x8.h │ │ ├── fixed_bold10x15.h │ │ ├── fixednums15x31.h │ │ ├── fixednums7x15.h │ │ ├── fixednums8x16.h │ │ ├── font5x7.h │ │ ├── font8x8.h │ │ ├── lcd5x7.h │ │ ├── lcdnums12x16.h │ │ ├── lcdnums14x24.h │ │ ├── newbasic3x5.h │ │ └── utf8font10x16.h │ │ └── utility │ │ ├── AvrI2c.h │ │ └── DigitalOutput.h ├── Simple_FOC │ ├── CITATION.cff │ ├── CODE_OF_CONDUCT.md │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── hardware_specific_examples │ │ │ ├── B_G431B_ESC1 │ │ │ │ ├── B_G431B_ESC1.ino │ │ │ │ └── build_opt.h │ │ │ ├── Bluepill_examples │ │ │ │ ├── encoder │ │ │ │ │ └── bluepill_position_control │ │ │ │ │ │ └── bluepill_position_control.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── bluepill_position_control │ │ │ │ │ └── bluepill_position_control.ino │ │ │ ├── DRV8302_driver │ │ │ │ ├── 3pwm_example │ │ │ │ │ └── encoder │ │ │ │ │ │ └── full_control_serial │ │ │ │ │ │ └── full_control_serial.ino │ │ │ │ ├── 6pwm_example │ │ │ │ │ └── encoder │ │ │ │ │ │ └── full_control_serial │ │ │ │ │ │ └── full_control_serial.ino │ │ │ │ ├── esp32_current_control_low_side │ │ │ │ │ └── esp32_current_control_low_side.ino │ │ │ │ ├── stm32_current_control_low_side │ │ │ │ │ └── stm32_current_control_low_side.ino │ │ │ │ └── teensy4_current_control_low_side │ │ │ │ │ └── teensy4_current_control_low_side.ino │ │ │ ├── ESP32 │ │ │ │ ├── encoder │ │ │ │ │ └── esp32_position_control │ │ │ │ │ │ └── esp32_position_control.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── esp32_position_control │ │ │ │ │ └── esp32_position_control.ino │ │ │ ├── HMBGC_example │ │ │ │ ├── position_control │ │ │ │ │ └── position_control.ino │ │ │ │ └── voltage_control │ │ │ │ │ └── voltage_control.ino │ │ │ ├── Odrive_examples │ │ │ │ ├── odrive_example_encoder │ │ │ │ │ └── odrive_example_encoder.ino │ │ │ │ └── odrive_example_spi │ │ │ │ │ └── odrive_example_spi.ino │ │ │ ├── SAMD_examples │ │ │ │ ├── README.md │ │ │ │ └── nano33IoT │ │ │ │ │ └── nano33IoT_velocity_control │ │ │ │ │ └── nano33IoT_velocity_control.ino │ │ │ ├── SimpleFOC-PowerShield │ │ │ │ └── version_v02 │ │ │ │ │ └── single_full_control_example │ │ │ │ │ └── single_full_control_example.ino │ │ │ ├── SimpleFOCMini │ │ │ │ ├── angle_control │ │ │ │ │ └── angle_control.ino │ │ │ │ └── open_loop │ │ │ │ │ └── open_loop.ino │ │ │ ├── SimpleFOCShield │ │ │ │ ├── version_v1 │ │ │ │ │ ├── double_full_control_example │ │ │ │ │ │ └── double_full_control_example.ino │ │ │ │ │ └── single_full_control_example │ │ │ │ │ │ └── single_full_control_example.ino │ │ │ │ ├── version_v2 │ │ │ │ │ ├── double_full_control_example │ │ │ │ │ │ └── double_full_control_example.ino │ │ │ │ │ └── single_full_control_example │ │ │ │ │ │ └── single_full_control_example.ino │ │ │ │ └── version_v3 │ │ │ │ │ └── single_full_control_example │ │ │ │ │ └── single_full_control_example.ino │ │ │ ├── Smart_Stepper │ │ │ │ └── smartstepper_control │ │ │ │ │ └── smartstepper_control.ino │ │ │ └── Teensy │ │ │ │ ├── Teensy3 │ │ │ │ ├── bldc_driver_6pwm_standalone │ │ │ │ │ └── bldc_driver_6pwm_standalone.ino │ │ │ │ └── open_loop_velocity_6pwm │ │ │ │ │ └── open_loop_velocity_6pwm.ino │ │ │ │ └── Teensy4 │ │ │ │ ├── bldc_driver_6pwm_standalone │ │ │ │ └── bldc_driver_6pwm_standalone.ino │ │ │ │ └── open_loop_velocity_6pwm │ │ │ │ └── open_loop_velocity_6pwm.ino │ │ ├── motion_control │ │ │ ├── open_loop_motor_control │ │ │ │ ├── open_loop_position_example │ │ │ │ │ └── open_loop_position_example.ino │ │ │ │ └── open_loop_velocity_example │ │ │ │ │ └── open_loop_velocity_example.ino │ │ │ ├── position_motion_control │ │ │ │ ├── encoder │ │ │ │ │ └── angle_control │ │ │ │ │ │ └── angle_control.ino │ │ │ │ ├── hall_sensor │ │ │ │ │ └── angle_control │ │ │ │ │ │ └── angle_control.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── angle_control │ │ │ │ │ └── angle_control.ino │ │ │ ├── torque_control │ │ │ │ ├── encoder │ │ │ │ │ ├── current_control │ │ │ │ │ │ └── current_control.ino │ │ │ │ │ └── voltage_control │ │ │ │ │ │ └── voltage_control.ino │ │ │ │ ├── hall_sensor │ │ │ │ │ └── voltage_control │ │ │ │ │ │ └── voltage_control.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── voltage_control │ │ │ │ │ └── voltage_control.ino │ │ │ └── velocity_motion_control │ │ │ │ ├── encoder │ │ │ │ └── velocity_control │ │ │ │ │ └── velocity_control.ino │ │ │ │ ├── hall_sensor │ │ │ │ └── velocity_control │ │ │ │ │ └── velocity_control.ino │ │ │ │ └── magnetic_sensor │ │ │ │ └── velocity_control │ │ │ │ └── velocity_control.ino │ │ ├── motor_commands_serial_examples │ │ │ ├── encoder │ │ │ │ └── full_control_serial │ │ │ │ │ └── full_control_serial.ino │ │ │ ├── hall_sensor │ │ │ │ └── full_control_serial │ │ │ │ │ └── full_control_serial.ino │ │ │ └── magnetic_sensor │ │ │ │ └── full_control_serial │ │ │ │ └── full_control_serial.ino │ │ ├── osc_control_examples │ │ │ ├── README.md │ │ │ ├── osc_esp32_3pwm │ │ │ │ ├── layout1.touchosc │ │ │ │ └── osc_esp32_3pwm.ino │ │ │ ├── osc_esp32_fullcontrol │ │ │ │ ├── osc_esp32_fullcontrol.ino │ │ │ │ ├── osc_fullcontrol.pd │ │ │ │ └── ssid.h_rename_me │ │ │ └── osc_fullcontrol_screenshot.png │ │ └── utils │ │ │ ├── calibration │ │ │ ├── alignment_and_cogging_test │ │ │ │ └── alignment_and_cogging_test.ino │ │ │ ├── find_kv_rating │ │ │ │ ├── encoder │ │ │ │ │ └── find_kv_rating │ │ │ │ │ │ └── find_kv_rating.ino │ │ │ │ ├── hall_sensor │ │ │ │ │ └── find_kv_rating │ │ │ │ │ │ └── find_kv_rating.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── find_kv_rating │ │ │ │ │ └── find_kv_rating.ino │ │ │ ├── find_pole_pair_number │ │ │ │ ├── encoder │ │ │ │ │ └── find_pole_pairs_number │ │ │ │ │ │ └── find_pole_pairs_number.ino │ │ │ │ └── magnetic_sensor │ │ │ │ │ └── find_pole_pairs_number │ │ │ │ │ └── find_pole_pairs_number.ino │ │ │ └── find_sensor_offset_and_direction │ │ │ │ └── find_sensor_offset_and_direction.ino │ │ │ ├── communication_test │ │ │ ├── commander │ │ │ │ ├── commander_extend_example │ │ │ │ │ └── commander_extend_example.ino │ │ │ │ ├── commander_no_serial │ │ │ │ │ └── commander_no_serial.ino │ │ │ │ └── commander_tune_custom_loop │ │ │ │ │ └── commander_tune_custom_loop.ino │ │ │ └── step_dir │ │ │ │ ├── step_dir_listener_simple │ │ │ │ └── step_dir_listener_simple.ino │ │ │ │ ├── step_dir_listener_software_interrupt │ │ │ │ └── step_dir_listener_software_interrupt.ino │ │ │ │ └── step_dir_motor_example │ │ │ │ └── step_dir_motor_example.ino │ │ │ ├── current_sense_test │ │ │ ├── generic_current_sense │ │ │ │ └── generic_current_sense.ino │ │ │ └── inline_current_sense_test │ │ │ │ └── inline_current_sense_test.ino │ │ │ ├── driver_standalone_test │ │ │ ├── bldc_driver_3pwm_standalone │ │ │ │ └── bldc_driver_3pwm_standalone.ino │ │ │ ├── bldc_driver_6pwm_standalone │ │ │ │ └── bldc_driver_6pwm_standalone.ino │ │ │ ├── stepper_driver_2pwm_standalone │ │ │ │ └── stepper_driver_2pwm_standalone.ino │ │ │ └── stepper_driver_4pwm_standalone │ │ │ │ └── stepper_driver_4pwm_standalone.ino │ │ │ └── sensor_test │ │ │ ├── encoder │ │ │ ├── encoder_example │ │ │ │ └── encoder_example.ino │ │ │ └── encoder_software_interrupts_example │ │ │ │ └── encoder_software_interrupts_example.ino │ │ │ ├── generic_sensor │ │ │ └── generic_sensor.ino │ │ │ ├── hall_sensors │ │ │ ├── hall_sensor_example │ │ │ │ └── hall_sensor_example.ino │ │ │ ├── hall_sensor_hardware_interrupts_example │ │ │ │ └── hall_sensor_hardware_interrupts_example.ino │ │ │ └── hall_sensor_software_interrupts_example │ │ │ │ └── hall_sensor_software_interrupts_example.ino │ │ │ ├── linear_hall_sensors │ │ │ └── find_raw_centers │ │ │ │ └── find_raw_centers.ino │ │ │ └── magnetic_sensors │ │ │ ├── magnetic_sensor_analog │ │ │ ├── find_raw_min_max │ │ │ │ └── find_raw_min_max.ino │ │ │ └── magnetic_sensor_analog_example │ │ │ │ └── magnetic_sensor_analog_example.ino │ │ │ ├── magnetic_sensor_i2c │ │ │ ├── magnetic_sensor_i2c_dual_bus_examples │ │ │ │ ├── esp32_i2c_dual_bus_example │ │ │ │ │ └── esp32_i2c_dual_bus_example.ino │ │ │ │ └── stm32_i2c_dual_bus_example │ │ │ │ │ └── stm32_i2c_dual_bus_example.ino │ │ │ └── magnetic_sensor_i2c_example │ │ │ │ └── magnetic_sensor_i2c_example.ino │ │ │ ├── magnetic_sensor_pwm │ │ │ ├── find_raw_min_max │ │ │ │ └── find_raw_min_max.ino │ │ │ ├── magnetic_sensor_pwm_example │ │ │ │ └── magnetic_sensor_pwm_example.ino │ │ │ └── magnetic_sensor_pwm_software_interrupt │ │ │ │ └── magnetic_sensor_pwm_software_interrupt.ino │ │ │ └── magnetic_sensor_spi │ │ │ ├── magnetic_sensor_spi_alternative_examples │ │ │ ├── esp32_spi_alt_example │ │ │ │ └── esp32_spi_alt_example.ino │ │ │ └── stm32_spi_alt_example │ │ │ │ └── stm32_spi_alt_example.ino │ │ │ └── magnetic_sensor_spi_example │ │ │ └── magnetic_sensor_spi_example.ino │ ├── keywords.txt │ ├── library.json │ ├── library.properties │ └── src │ │ ├── BLDCMotor.cpp │ │ ├── BLDCMotor.h │ │ ├── SimpleFOC.h │ │ ├── StepperMotor.cpp │ │ ├── StepperMotor.h │ │ ├── common │ │ ├── base_classes │ │ │ ├── BLDCDriver.h │ │ │ ├── CurrentSense.cpp │ │ │ ├── CurrentSense.h │ │ │ ├── FOCDriver.h │ │ │ ├── FOCMotor.cpp │ │ │ ├── FOCMotor.h │ │ │ ├── Sensor.cpp │ │ │ ├── Sensor.h │ │ │ └── StepperDriver.h │ │ ├── defaults.h │ │ ├── foc_utils.cpp │ │ ├── foc_utils.h │ │ ├── lowpass_filter.cpp │ │ ├── lowpass_filter.h │ │ ├── pid.cpp │ │ ├── pid.h │ │ ├── time_utils.cpp │ │ └── time_utils.h │ │ ├── communication │ │ ├── Commander.cpp │ │ ├── Commander.h │ │ ├── SimpleFOCDebug.cpp │ │ ├── SimpleFOCDebug.h │ │ ├── StepDirListener.cpp │ │ ├── StepDirListener.h │ │ └── commands.h │ │ ├── current_sense │ │ ├── GenericCurrentSense.cpp │ │ ├── GenericCurrentSense.h │ │ ├── InlineCurrentSense.cpp │ │ ├── InlineCurrentSense.h │ │ ├── LowsideCurrentSense.cpp │ │ ├── LowsideCurrentSense.h │ │ ├── hardware_api.h │ │ └── hardware_specific │ │ │ ├── atmega_mcu.cpp │ │ │ ├── due_mcu.cpp │ │ │ ├── esp32 │ │ │ ├── esp32_adc_driver.cpp │ │ │ ├── esp32_adc_driver.h │ │ │ ├── esp32_mcpwm_mcu.cpp │ │ │ ├── esp32_mcu.cpp │ │ │ └── esp32_mcu.h │ │ │ ├── generic_mcu.cpp │ │ │ ├── rp2040 │ │ │ ├── rp2040_mcu.cpp │ │ │ └── rp2040_mcu.h │ │ │ ├── samd │ │ │ ├── samd21_mcu.cpp │ │ │ ├── samd21_mcu.h │ │ │ └── samd_mcu.cpp │ │ │ ├── stm32 │ │ │ ├── b_g431 │ │ │ │ ├── b_g431_hal.cpp │ │ │ │ ├── b_g431_hal.h │ │ │ │ └── b_g431_mcu.cpp │ │ │ ├── stm32_mcu.cpp │ │ │ ├── stm32_mcu.h │ │ │ ├── stm32f1 │ │ │ │ ├── stm32f1_hal.cpp │ │ │ │ ├── stm32f1_hal.h │ │ │ │ └── stm32f1_mcu.cpp │ │ │ ├── stm32f4 │ │ │ │ ├── stm32f4_hal.cpp │ │ │ │ ├── stm32f4_hal.h │ │ │ │ ├── stm32f4_mcu.cpp │ │ │ │ ├── stm32f4_utils.cpp │ │ │ │ └── stm32f4_utils.h │ │ │ ├── stm32f7 │ │ │ │ ├── stm32f7_hal.cpp │ │ │ │ ├── stm32f7_hal.h │ │ │ │ ├── stm32f7_mcu.cpp │ │ │ │ ├── stm32f7_utils.cpp │ │ │ │ └── stm32f7_utils.h │ │ │ ├── stm32g4 │ │ │ │ ├── stm32g4_hal.cpp │ │ │ │ ├── stm32g4_hal.h │ │ │ │ ├── stm32g4_mcu.cpp │ │ │ │ ├── stm32g4_utils.cpp │ │ │ │ └── stm32g4_utils.h │ │ │ └── stm32l4 │ │ │ │ ├── stm32l4_hal.cpp │ │ │ │ ├── stm32l4_hal.h │ │ │ │ ├── stm32l4_mcu.cpp │ │ │ │ ├── stm32l4_utils.cpp │ │ │ │ └── stm32l4_utils.h │ │ │ └── teensy │ │ │ ├── teensy4_mcu.cpp │ │ │ ├── teensy4_mcu.h │ │ │ └── teensy_mcu.cpp │ │ ├── drivers │ │ ├── BLDCDriver3PWM.cpp │ │ ├── BLDCDriver3PWM.h │ │ ├── BLDCDriver6PWM.cpp │ │ ├── BLDCDriver6PWM.h │ │ ├── StepperDriver2PWM.cpp │ │ ├── StepperDriver2PWM.h │ │ ├── StepperDriver4PWM.cpp │ │ ├── StepperDriver4PWM.h │ │ ├── hardware_api.h │ │ └── hardware_specific │ │ │ ├── atmega │ │ │ ├── atmega2560_mcu.cpp │ │ │ ├── atmega328_mcu.cpp │ │ │ └── atmega32u4_mcu.cpp │ │ │ ├── due_mcu.cpp │ │ │ ├── esp32 │ │ │ ├── esp32_driver_mcpwm.cpp │ │ │ ├── esp32_driver_mcpwm.h │ │ │ ├── esp32_ledc_mcu.cpp │ │ │ ├── esp32_mcpwm_mcu.cpp │ │ │ └── mcpwm_private.h │ │ │ ├── esp8266_mcu.cpp │ │ │ ├── generic_mcu.cpp │ │ │ ├── nrf52_mcu.cpp │ │ │ ├── portenta_h7_mcu.cpp │ │ │ ├── renesas │ │ │ ├── renesas.cpp │ │ │ └── renesas.h │ │ │ ├── rp2040 │ │ │ ├── rp2040_mcu.cpp │ │ │ └── rp2040_mcu.h │ │ │ ├── samd │ │ │ ├── samd21_mcu.cpp │ │ │ ├── samd51_mcu.cpp │ │ │ ├── samd_mcu.cpp │ │ │ └── samd_mcu.h │ │ │ ├── stm32 │ │ │ ├── stm32_mcu.cpp │ │ │ └── stm32_mcu.h │ │ │ └── teensy │ │ │ ├── teensy3_mcu.cpp │ │ │ ├── teensy4_mcu.cpp │ │ │ ├── teensy4_mcu.h │ │ │ ├── teensy_mcu.cpp │ │ │ └── teensy_mcu.h │ │ └── sensors │ │ ├── Encoder.cpp │ │ ├── Encoder.h │ │ ├── GenericSensor.cpp │ │ ├── GenericSensor.h │ │ ├── HallSensor.cpp │ │ ├── HallSensor.h │ │ ├── MagneticSensorAnalog.cpp │ │ ├── MagneticSensorAnalog.h │ │ ├── MagneticSensorI2C.cpp │ │ ├── MagneticSensorI2C.h │ │ ├── MagneticSensorPWM.cpp │ │ ├── MagneticSensorPWM.h │ │ ├── MagneticSensorSPI.cpp │ │ └── MagneticSensorSPI.h ├── SoftwareWire │ ├── Licence.md │ ├── SoftwareWire.cpp │ ├── SoftwareWire.h │ ├── examples │ │ ├── Small_example │ │ │ └── Small_example.ino │ │ ├── StressTest_Master │ │ │ └── StressTest_Master.ino │ │ └── StressTest_Slave │ │ │ └── StressTest_Slave.ino │ ├── keywords.txt │ ├── library.properties │ └── readme.md ├── TCA9548 │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── TCA9548.cpp │ ├── TCA9548.h │ ├── examples │ │ ├── PCA9543_demo │ │ │ └── PCA9543_demo.ino │ │ ├── PCA9545_demo │ │ │ └── PCA9545_demo.ino │ │ ├── PCA9546_demo │ │ │ └── PCA9546_demo.ino │ │ ├── TCA9548_demo_AM2320 │ │ │ └── TCA9548_demo_AM2320.ino │ │ ├── TCA9548_find │ │ │ └── TCA9548_find.ino │ │ ├── tca9548_demo │ │ │ └── tca9548_demo.ino │ │ └── tca9548_search_device │ │ │ └── tca9548_search_device.ino │ ├── keywords.txt │ ├── library.json │ ├── library.properties │ └── test │ │ └── unit_test_001.cpp └── readme.txt ├── limitSwitchTest └── limitSwitchTest.ino ├── microwave_sensor ├── microwave_sensor.ino └── stepper_motor_potentiometer │ └── stepper_motor_potentiometer.ino ├── motor_driver └── motor_driver.ino ├── papa_stepper_control └── papa_stepper_control.ino ├── resucing_potentiometer_noise └── resucing_potentiometer_noise.ino ├── robotArmMovementTest └── robotArmMovementTest.ino ├── robot_arm_v3 ├── 4dof_direction_test │ └── 4dof_direction_test.ino ├── 4dof_inverse_kinematics │ └── 4dof_inverse_kinematics.ino ├── AS5600 │ └── AS5600.ino ├── AS5600_for_mega │ └── AS5600_for_mega.ino ├── TCA9548A_with_as5600 │ └── TCA9548A_with_as5600.ino ├── cnc_shield_test │ └── cnc_shield_test.ino ├── facrik_inverse_kineematics │ └── facrik_inverse_kineematics.ino ├── ik_with_keycontrol │ └── ik_with_keycontrol.ino ├── keyControlWithEncdoer │ └── keyControlWithEncdoer.ino ├── multiStepperTest │ └── multiStepperTest.ino ├── nk246_stepper_motor_accelStepper │ └── nk246_stepper_motor_accelStepper.ino ├── ras_ar │ └── ras_ar.ino ├── ras_ar_robotarm │ └── ras_ar_robotarm.ino ├── ras_ar_serial │ └── ras_ar_serial.ino ├── serial_communication │ ├── serial_communication.ino │ └── sketch_aug8b │ │ └── sketch_aug8b.ino ├── sketch_aug8a │ └── sketch_aug8a.ino ├── stepperWithKey │ └── stepperWithKey.ino ├── stepper_tester │ └── stepper_tester.ino └── stepper_with_encoder │ └── stepper_with_encoder.ino ├── servo └── servo.ino ├── simplefoc_angle_control └── simplefoc_angle_control.ino ├── simplefoc_bldc_test └── simplefoc_bldc_test.ino ├── simplefoc_encoder_test └── simplefoc_encoder_test.ino ├── sketch_nov14a └── sketch_nov14a.ino ├── steppe_motor_accel └── steppe_motor_accel.ino ├── stepper_motor └── stepper_motor.ino ├── stepper_position_potentialmeter └── stepper_position_potentialmeter.ino ├── stepper_potentialmeter └── stepper_potentialmeter.ino ├── stepper_speed_potentialmeter └── stepper_speed_potentialmeter.ino ├── stepper_speed_with_serial_control └── stepper_speed_with_serial_control.ino ├── voltage_control └── voltage_control.ino └── webserver_modified └── webserver_modified.ino /esp_led_test/esp_led_test.ino: -------------------------------------------------------------------------------- 1 | #define LED 2 2 | 3 | void setup() { 4 | // Set pin mode 5 | pinMode(LED,OUTPUT); 6 | } 7 | 8 | void loop() { 9 | delay(500); 10 | digitalWrite(LED,HIGH); 11 | delay(500); 12 | digitalWrite(LED,LOW); 13 | } 14 | -------------------------------------------------------------------------------- /esp_servo/esp_servo.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int servoPin = 14; // 서보 모터 핀 4 | Servo myservo; // 서보 모터 객체 5 | 6 | void setup() { 7 | // 모든 타이머 할당 허용 8 | ESP32PWM::allocateTimer(0); 9 | ESP32PWM::allocateTimer(1); 10 | ESP32PWM::allocateTimer(2); 11 | ESP32PWM::allocateTimer(3); 12 | 13 | Serial.begin(115200); 14 | myservo.attach(servoPin); // 서보 모터를 핀에 연결 15 | } 16 | 17 | void loop() { 18 | // 서보 모터를 0도에서 90도 사이로 회전 19 | for (int angle = 0; angle <= 90; angle++) { 20 | myservo.write(angle); 21 | delay(20); // 각도 변경 후 대기 시간 22 | } 23 | delay(1000); // 회전 후 대기 시간 24 | 25 | // 서보 모터를 90도에서 0도 사이로 회전 26 | for (int angle = 90; angle >= 0; angle--) { 27 | myservo.write(angle); 28 | delay(20); // 각도 변경 후 대기 시간 29 | } 30 | delay(1000); // 회전 후 대기 시간 31 | } 32 | -------------------------------------------------------------------------------- /libraries/AS5600/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022-2024 Rob Tillaart 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_angular_speed/AS5600_angular_speed.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_angular_speed.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600L as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | 30 | Serial.println(as5600.getAddress()); 31 | 32 | // as5600.setAddress(0x40); // AS5600L only 33 | 34 | int b = as5600.isConnected(); 35 | Serial.print("Connect: "); 36 | Serial.println(b); 37 | 38 | delay(1000); 39 | } 40 | 41 | 42 | void loop() 43 | { 44 | // Serial.print("\ta = "); 45 | // Serial.print(as5600.readAngle()); 46 | // Serial.print("\tω = "); 47 | Serial.println(as5600.getAngularSpeed()); 48 | delay(25); 49 | } 50 | 51 | 52 | // -- END OF FILE -- 53 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_angular_speed_RPM/AS5600_angular_speed_RPM.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_angular_speed_RPM.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600 as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | 30 | Serial.println(as5600.getAddress()); 31 | 32 | // as5600.setAddress(0x40); // AS5600L only 33 | 34 | int b = as5600.isConnected(); 35 | Serial.print("Connect: "); 36 | Serial.println(b); 37 | 38 | delay(1000); 39 | } 40 | 41 | 42 | void loop() 43 | { 44 | // Serial.print("\ta = "); 45 | // Serial.print(as5600.readAngle()); 46 | Serial.print("\tω = "); 47 | Serial.println(as5600.getAngularSpeed(AS5600_MODE_RPM)); 48 | delay(100); 49 | } 50 | 51 | 52 | // -- END OF FILE -- 53 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo/AS5600_demo.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600L as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | int b = as5600.isConnected(); 30 | Serial.print("Connect: "); 31 | Serial.println(b); 32 | delay(1000); 33 | } 34 | 35 | 36 | void loop() 37 | { 38 | // Serial.print(millis()); 39 | // Serial.print("\t"); 40 | Serial.print(as5600.readAngle()); 41 | Serial.print("\t"); 42 | Serial.println(as5600.rawAngle()); 43 | // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); 44 | 45 | delay(1000); 46 | } 47 | 48 | 49 | // -- END OF FILE -- 50 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo_ESP32/AS5600_demo_ESP32.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600L as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(14, 15); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | int b = as5600.isConnected(); 30 | Serial.print("Connect: "); 31 | Serial.println(b); 32 | delay(1000); 33 | } 34 | 35 | 36 | void loop() 37 | { 38 | // Serial.print(millis()); 39 | // Serial.print("\t"); 40 | Serial.print(as5600.readAngle()); 41 | Serial.print("\t"); 42 | Serial.println(as5600.rawAngle()); 43 | // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); 44 | 45 | delay(1000); 46 | } 47 | 48 | 49 | // -- END OF FILE -- 50 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo_RP2040/AS5600_demo_RP2040.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600L as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.setSDA(14); 26 | Wire.setSCL(15); 27 | Wire.begin(); 28 | 29 | as5600.begin(4); // set direction pin. 30 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 31 | int b = as5600.isConnected(); 32 | Serial.print("Connect: "); 33 | Serial.println(b); 34 | delay(1000); 35 | } 36 | 37 | 38 | void loop() 39 | { 40 | // Serial.print(millis()); 41 | // Serial.print("\t"); 42 | Serial.print(as5600.readAngle()); 43 | Serial.print("\t"); 44 | Serial.println(as5600.rawAngle()); 45 | // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); 46 | 47 | delay(1000); 48 | } 49 | 50 | 51 | // -- END OF FILE -- 52 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo_STM32/AS5600_demo_STM32.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // tested compilation with Nucleo-64 8 | // 9 | // Examples may use AS5600 or AS5600L devices. 10 | // Check if your sensor matches the one used in the example. 11 | // Optionally adjust the code. 12 | 13 | 14 | #include "AS5600.h" 15 | 16 | 17 | AS5600L as5600; // use default Wire 18 | 19 | 20 | void setup() 21 | { 22 | Serial.begin(115200); 23 | Serial.println(__FILE__); 24 | Serial.print("AS5600_LIB_VERSION: "); 25 | Serial.println(AS5600_LIB_VERSION); 26 | 27 | Wire.setSDA(14); 28 | Wire.setSCL(15); 29 | Wire.begin(); 30 | 31 | as5600.begin(4); // set direction pin. 32 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 33 | int b = as5600.isConnected(); 34 | Serial.print("Connect: "); 35 | Serial.println(b); 36 | delay(1000); 37 | } 38 | 39 | 40 | void loop() 41 | { 42 | // Serial.print(millis()); 43 | // Serial.print("\t"); 44 | Serial.print(as5600.readAngle()); 45 | Serial.print("\t"); 46 | Serial.println(as5600.rawAngle()); 47 | // Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); 48 | 49 | delay(1000); 50 | } 51 | 52 | 53 | // -- END OF FILE -- 54 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo_offset/AS5600_demo_offset.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo_offset.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600 as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | } 30 | 31 | 32 | void loop() 33 | { 34 | float offset = 0; 35 | while (offset < 360) 36 | { 37 | as5600.setOffset(offset); 38 | Serial.print(millis()); 39 | Serial.print("\t"); 40 | Serial.print(as5600.getOffset(), 2); 41 | Serial.print("\t"); 42 | Serial.print(as5600.readAngle()); 43 | Serial.print("\t"); 44 | Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); 45 | delay(100); 46 | offset += 12.34; 47 | } 48 | Serial.println(); 49 | delay(1000); 50 | } 51 | 52 | 53 | // -- END OF FILE -- 54 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_demo_radians/AS5600_demo_radians.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_demo_radians.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // Examples may use AS5600 or AS5600L devices. 8 | // Check if your sensor matches the one used in the example. 9 | // Optionally adjust the code. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600 as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | } 30 | 31 | 32 | void loop() 33 | { 34 | Serial.print(millis()); 35 | Serial.print("\t"); 36 | Serial.print(as5600.readAngle()); 37 | Serial.print("\t"); 38 | Serial.println(as5600.rawAngle() * AS5600_RAW_TO_RADIANS); 39 | 40 | delay(1000); 41 | } 42 | 43 | 44 | // -- END OF FILE -- 45 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_outmode_analog_100/AS5600_outmode_analog_100.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_outmode_analog_100.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: experimental demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // 7 | // connect the OUT pin to the analog port of the processor 8 | // 9 | // The AS5600L does not support analog OUT. 10 | 11 | 12 | #include "AS5600.h" 13 | 14 | 15 | AS5600 as5600; // use default Wire 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("AS5600_LIB_VERSION: "); 23 | Serial.println(AS5600_LIB_VERSION); 24 | 25 | Wire.begin(); 26 | 27 | as5600.begin(4); // set direction pin. 28 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 29 | as5600.setOutputMode(AS5600_OUTMODE_ANALOG_100); 30 | } 31 | 32 | 33 | void loop() 34 | { 35 | Serial.print(millis()); 36 | Serial.print("\t"); 37 | Serial.print(as5600.readAngle()); 38 | Serial.print("\t"); 39 | Serial.println(analogRead(A0)); 40 | 41 | delay(1000); 42 | } 43 | 44 | 45 | // -- END OF FILE -- 46 | -------------------------------------------------------------------------------- /libraries/AS5600/examples/AS5600_outmode_analog_90/AS5600_outmode_analog_90.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: AS5600_outmode_analog_90.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: experimental demo 5 | // URL: https://github.com/RobTillaart/AS5600 6 | // connect the OUT pin to the analog port of the processor 7 | // 8 | // The AS5600L does not support analog OUT. 9 | 10 | 11 | #include "AS5600.h" 12 | 13 | 14 | AS5600 as5600; // use default Wire 15 | 16 | 17 | void setup() 18 | { 19 | Serial.begin(115200); 20 | Serial.println(__FILE__); 21 | Serial.print("AS5600_LIB_VERSION: "); 22 | Serial.println(AS5600_LIB_VERSION); 23 | 24 | Wire.begin(); 25 | 26 | as5600.begin(4); // set direction pin. 27 | as5600.setDirection(AS5600_CLOCK_WISE); // default, just be explicit. 28 | as5600.setOutputMode(AS5600_OUTMODE_ANALOG_90); 29 | } 30 | 31 | 32 | void loop() 33 | { 34 | Serial.print(millis()); 35 | Serial.print("\t"); 36 | Serial.print(as5600.readAngle()); 37 | Serial.print("\t"); 38 | Serial.println(analogRead(A0)); 39 | 40 | delay(1000); 41 | } 42 | 43 | 44 | // -- END OF FILE -- 45 | -------------------------------------------------------------------------------- /libraries/AS5600/library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AS5600", 3 | "keywords": "AS5600,AS5600L", 4 | "description": "Arduino library for AS5600 and AS5600L magnetic rotation meter.", 5 | "authors": 6 | [ 7 | { 8 | "name": "Rob Tillaart", 9 | "email": "Rob.Tillaart@gmail.com", 10 | "maintainer": true 11 | } 12 | ], 13 | "repository": 14 | { 15 | "type": "git", 16 | "url": "https://github.com/RobTillaart/AS5600.git" 17 | }, 18 | "version": "0.6.1", 19 | "license": "MIT", 20 | "frameworks": "*", 21 | "platforms": "*", 22 | "headers": "AS5600.h" 23 | } 24 | -------------------------------------------------------------------------------- /libraries/AS5600/library.properties: -------------------------------------------------------------------------------- 1 | name=AS5600 2 | version=0.6.1 3 | author=Rob Tillaart 4 | maintainer=Rob Tillaart 5 | sentence=Arduino library for AS5600 and AS5600L magnetic rotation meter. 6 | paragraph= 7 | category=Sensors 8 | url=https://github.com/RobTillaart/AS5600 9 | architectures=* 10 | includes=AS5600.h 11 | depends= 12 | -------------------------------------------------------------------------------- /libraries/AS5600_TEST-main/AS5600_TEST.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "config.h" 5 | #include "AS5600.h" 6 | 7 | void setup() { 8 | // put your setup code here, to run once: 9 | Serial.begin(9600); 10 | Wire.begin(); 11 | 12 | // set register to read once 13 | init_position_sensor(); 14 | 15 | } 16 | 17 | void loop() { 18 | // put your main code here, to run repeatedly: 19 | // read position from sensor 20 | update_current_position(STEPPER_DEFAULT_MICRO_STEPS); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /libraries/AS5600_TEST-main/README.md: -------------------------------------------------------------------------------- 1 | # AS5600_TEST 2 | Modifly Niryo one robot with Stepper driver A4988 or DRV8825 3 | Test Magnetic Position Sensor Encoder AS5600 4 | ![](https://camo.githubusercontent.com/7daf86d8e671834647e6f3fab527117ef0b283bd8f70449d7a91319604f33f16/68747470733a2f2f6e6972796f2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031382f30392f6e6972796f5f6f6e655f776974685f67726970706572312e6a7067) 5 | -------------------------------------------------------------------------------- /libraries/AS5600_TEST-main/config.h: -------------------------------------------------------------------------------- 1 | #ifndef NIRYO_CONFIG_H 2 | #define NIRYO_CONFIG_H 3 | 4 | /* 5 | * ----------- AS5600 Position sensor ------------- 6 | */ 7 | 8 | #define AS5600_CPR 4096 9 | #define AS5600_CPR_HALF 2048 10 | 11 | #define AS5600_ADDRESS 0x36 12 | 13 | #define AS5600_REG_CONF 0x07 14 | #define AS5600_REG_ANGLE_H 0x0E 15 | #define AS5600_REG_ANGLE_L 0x0F 16 | 17 | /* 18 | * ----------- Stepper controller ------------- 19 | */ 20 | 21 | #define STEPPER_CPR 200 22 | 23 | #define STEPPER_CONTROL_MODE_RELAX 0 24 | #define STEPPER_CONTROL_MODE_STANDARD 1 25 | 26 | #define STEPPER_DELAY_MIN 200 27 | 28 | #define STEPPER_DEFAULT_MICRO_STEPS 8 // default 8 29 | #define ONE_FULL_STEP 1800 // default 1800 30 | 31 | #define STEPPER_CALIBRATION_OK 1 32 | #define STEPPER_CALIBRATION_TIMEOUT 2 33 | #define STEPPER_CALIBRATION_BAD_PARAM 3 34 | 35 | 36 | 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /libraries/AccelStepper/LICENSE: -------------------------------------------------------------------------------- 1 | This software is Copyright (C) Mike McCauley. Use is subject to license 2 | conditions. The main licensing options available are GPL V3 or Commercial: 3 | 4 | Open Source Licensing GPL V3 5 | 6 | This is the appropriate option if you want to share the source code of your 7 | application with everyone you distribute it to, and you also want to give them 8 | the right to share who uses it. If you wish to use this software under Open 9 | Source Licensing, you must contribute all your source code to the open source 10 | community in accordance with the GPL Version 3 when your application is 11 | distributed. See http://www.gnu.org/copyleft/gpl.html 12 | 13 | Commercial Licensing 14 | 15 | This is the appropriate option if you are creating proprietary applications 16 | and you are not prepared to distribute and share the source code of your 17 | application. Contact info@airspayce for details. 18 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/AFMotor_ConstantSpeed/AFMotor_ConstantSpeed.pde: -------------------------------------------------------------------------------- 1 | // AFMotor_ConstantSpeed.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Shows how to run AccelStepper in the simplest, 5 | // fixed speed mode with no accelerations 6 | // Requires the AFMotor library 7 | // (https://github.com/adafruit/Adafruit-Motor-Shield-library) 8 | // Caution, does not work with Adafruit Motor Shield V2 9 | // See https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library 10 | // for examples that work with Adafruit Motor Shield V2. 11 | 12 | #include 13 | #include 14 | 15 | AF_Stepper motor1(200, 1); 16 | 17 | 18 | // you can change these to DOUBLE or INTERLEAVE or MICROSTEP! 19 | void forwardstep() { 20 | motor1.onestep(FORWARD, SINGLE); 21 | } 22 | void backwardstep() { 23 | motor1.onestep(BACKWARD, SINGLE); 24 | } 25 | 26 | AccelStepper stepper(forwardstep, backwardstep); // use functions to step 27 | 28 | void setup() 29 | { 30 | Serial.begin(9600); // set up Serial library at 9600 bps 31 | Serial.println("Stepper test!"); 32 | 33 | stepper.setMaxSpeed(50); 34 | stepper.setSpeed(50); 35 | } 36 | 37 | void loop() 38 | { 39 | stepper.runSpeed(); 40 | } 41 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/Blocking/Blocking.pde: -------------------------------------------------------------------------------- 1 | // Blocking.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Shows how to use the blocking call runToNewPosition 5 | // Which sets a new target position and then waits until the stepper has 6 | // achieved it. 7 | // 8 | // Copyright (C) 2009 Mike McCauley 9 | // $Id: Blocking.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 10 | 11 | #include 12 | 13 | // Define a stepper and the pins it will use 14 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 15 | 16 | void setup() 17 | { 18 | stepper.setMaxSpeed(200.0); 19 | stepper.setAcceleration(100.0); 20 | } 21 | 22 | void loop() 23 | { 24 | stepper.runToNewPosition(0); 25 | stepper.runToNewPosition(500); 26 | stepper.runToNewPosition(100); 27 | stepper.runToNewPosition(120); 28 | } 29 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/Bounce/Bounce.pde: -------------------------------------------------------------------------------- 1 | // Bounce.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Make a single stepper bounce from one limit to another 5 | // 6 | // Copyright (C) 2012 Mike McCauley 7 | // $Id: Random.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 8 | 9 | #include 10 | 11 | // Define a stepper and the pins it will use 12 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 13 | 14 | void setup() 15 | { 16 | // Change these to suit your stepper if you want 17 | stepper.setMaxSpeed(100); 18 | stepper.setAcceleration(20); 19 | stepper.moveTo(500); 20 | } 21 | 22 | void loop() 23 | { 24 | // If at the end of travel go to the other end 25 | if (stepper.distanceToGo() == 0) 26 | stepper.moveTo(-stepper.currentPosition()); 27 | 28 | stepper.run(); 29 | } 30 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/ConstantSpeed/ConstantSpeed.pde: -------------------------------------------------------------------------------- 1 | // ConstantSpeed.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Shows how to run AccelStepper in the simplest, 5 | // fixed speed mode with no accelerations 6 | /// \author Mike McCauley (mikem@airspayce.com) 7 | // Copyright (C) 2009 Mike McCauley 8 | // $Id: ConstantSpeed.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 9 | 10 | #include 11 | 12 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 13 | 14 | void setup() 15 | { 16 | stepper.setMaxSpeed(1000); 17 | stepper.setSpeed(50); 18 | } 19 | 20 | void loop() 21 | { 22 | stepper.runSpeed(); 23 | } 24 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/MultipleSteppers/MultipleSteppers.pde: -------------------------------------------------------------------------------- 1 | // MultiStepper.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Shows how to multiple simultaneous steppers 5 | // Runs one stepper forwards and backwards, accelerating and decelerating 6 | // at the limits. Runs other steppers at the same time 7 | // 8 | // Copyright (C) 2009 Mike McCauley 9 | // $Id: MultiStepper.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 10 | 11 | #include 12 | 13 | // Define some steppers and the pins the will use 14 | AccelStepper stepper1; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 15 | AccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9); 16 | AccelStepper stepper3(AccelStepper::FULL2WIRE, 10, 11); 17 | 18 | void setup() 19 | { 20 | stepper1.setMaxSpeed(200.0); 21 | stepper1.setAcceleration(100.0); 22 | stepper1.moveTo(24); 23 | 24 | stepper2.setMaxSpeed(300.0); 25 | stepper2.setAcceleration(100.0); 26 | stepper2.moveTo(1000000); 27 | 28 | stepper3.setMaxSpeed(300.0); 29 | stepper3.setAcceleration(100.0); 30 | stepper3.moveTo(1000000); 31 | } 32 | 33 | void loop() 34 | { 35 | // Change direction at the limits 36 | if (stepper1.distanceToGo() == 0) 37 | stepper1.moveTo(-stepper1.currentPosition()); 38 | stepper1.run(); 39 | stepper2.run(); 40 | stepper3.run(); 41 | } 42 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/Overshoot/Overshoot.pde: -------------------------------------------------------------------------------- 1 | // Overshoot.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Check overshoot handling 5 | // which sets a new target position and then waits until the stepper has 6 | // achieved it. This is used for testing the handling of overshoots 7 | // 8 | // Copyright (C) 2009 Mike McCauley 9 | // $Id: Overshoot.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 10 | 11 | #include 12 | 13 | // Define a stepper and the pins it will use 14 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 15 | 16 | void setup() 17 | { 18 | stepper.setMaxSpeed(150); 19 | stepper.setAcceleration(100); 20 | } 21 | 22 | void loop() 23 | { 24 | stepper.moveTo(500); 25 | while (stepper.currentPosition() != 300) // Full speed up to 300 26 | stepper.run(); 27 | stepper.runToNewPosition(0); // Cause an overshoot then back to 0 28 | } 29 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/ProportionalControl/ProportionalControl.pde: -------------------------------------------------------------------------------- 1 | // ProportionalControl.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Make a single stepper follow the analog value read from a pot or whatever 5 | // The stepper will move at a constant speed to each newly set posiiton, 6 | // depending on the value of the pot. 7 | // 8 | // Copyright (C) 2012 Mike McCauley 9 | // $Id: ProportionalControl.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 10 | 11 | #include 12 | 13 | // Define a stepper and the pins it will use 14 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 15 | 16 | // This defines the analog input pin for reading the control voltage 17 | // Tested with a 10k linear pot between 5v and GND 18 | #define ANALOG_IN A0 19 | 20 | void setup() 21 | { 22 | stepper.setMaxSpeed(1000); 23 | } 24 | 25 | void loop() 26 | { 27 | // Read new position 28 | int analog_in = analogRead(ANALOG_IN); 29 | stepper.moveTo(analog_in); 30 | stepper.setSpeed(100); 31 | stepper.runSpeedToPosition(); 32 | } 33 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/Quickstop/Quickstop.pde: -------------------------------------------------------------------------------- 1 | // Quickstop.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Check stop handling. 5 | // Calls stop() while the stepper is travelling at full speed, causing 6 | // the stepper to stop as quickly as possible, within the constraints of the 7 | // current acceleration. 8 | // 9 | // Copyright (C) 2012 Mike McCauley 10 | // $Id: $ 11 | 12 | #include 13 | 14 | // Define a stepper and the pins it will use 15 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 16 | 17 | void setup() 18 | { 19 | stepper.setMaxSpeed(150); 20 | stepper.setAcceleration(100); 21 | } 22 | 23 | void loop() 24 | { 25 | stepper.moveTo(500); 26 | while (stepper.currentPosition() != 300) // Full speed up to 300 27 | stepper.run(); 28 | stepper.stop(); // Stop as fast as possible: sets new target 29 | stepper.runToPosition(); 30 | // Now stopped after quickstop 31 | 32 | // Now go backwards 33 | stepper.moveTo(-500); 34 | while (stepper.currentPosition() != 0) // Full speed basck to 0 35 | stepper.run(); 36 | stepper.stop(); // Stop as fast as possible: sets new target 37 | stepper.runToPosition(); 38 | // Now stopped after quickstop 39 | 40 | } 41 | -------------------------------------------------------------------------------- /libraries/AccelStepper/examples/Random/Random.pde: -------------------------------------------------------------------------------- 1 | // Random.pde 2 | // -*- mode: C++ -*- 3 | // 4 | // Make a single stepper perform random changes in speed, position and acceleration 5 | // 6 | // Copyright (C) 2009 Mike McCauley 7 | // $Id: Random.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ 8 | 9 | #include 10 | 11 | // Define a stepper and the pins it will use 12 | AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 13 | 14 | void setup() 15 | { 16 | } 17 | 18 | void loop() 19 | { 20 | if (stepper.distanceToGo() == 0) 21 | { 22 | // Random change to speed, position and acceleration 23 | // Make sure we dont get 0 speed or accelerations 24 | delay(1000); 25 | stepper.moveTo(rand() % 200); 26 | stepper.setMaxSpeed((rand() % 200) + 1); 27 | stepper.setAcceleration((rand() % 200) + 1); 28 | } 29 | stepper.run(); 30 | } 31 | -------------------------------------------------------------------------------- /libraries/AccelStepper/extras/doc/doxygen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/AccelStepper/extras/doc/doxygen.png -------------------------------------------------------------------------------- /libraries/AccelStepper/extras/doc/tab_b.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/AccelStepper/extras/doc/tab_b.gif -------------------------------------------------------------------------------- /libraries/AccelStepper/extras/doc/tab_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/AccelStepper/extras/doc/tab_l.gif -------------------------------------------------------------------------------- /libraries/AccelStepper/extras/doc/tab_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/AccelStepper/extras/doc/tab_r.gif -------------------------------------------------------------------------------- /libraries/AccelStepper/keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map For AccelStepper 3 | ####################################### 4 | 5 | ####################################### 6 | # Datatypes (KEYWORD1) 7 | ####################################### 8 | 9 | AccelStepper KEYWORD1 10 | MultiStepper KEYWORD1 11 | 12 | ####################################### 13 | # Methods and Functions (KEYWORD2) 14 | ####################################### 15 | 16 | moveTo KEYWORD2 17 | move KEYWORD2 18 | run KEYWORD2 19 | runSpeed KEYWORD2 20 | setMaxSpeed KEYWORD2 21 | setAcceleration KEYWORD2 22 | setSpeed KEYWORD2 23 | speed KEYWORD2 24 | distanceToGo KEYWORD2 25 | targetPosition KEYWORD2 26 | currentPosition KEYWORD2 27 | setCurrentPosition KEYWORD2 28 | runToPosition KEYWORD2 29 | runSpeedToPosition KEYWORD2 30 | runToNewPosition KEYWORD2 31 | stop KEYWORD2 32 | disableOutputs KEYWORD2 33 | enableOutputs KEYWORD2 34 | setMinPulseWidth KEYWORD2 35 | setEnablePin KEYWORD2 36 | setPinsInverted KEYWORD2 37 | maxSpeed KEYWORD2 38 | isRunning KEYWORD2 39 | ####################################### 40 | # Constants (LITERAL1) 41 | ####################################### 42 | 43 | -------------------------------------------------------------------------------- /libraries/AccelStepper/library.properties: -------------------------------------------------------------------------------- 1 | name=AccelStepper 2 | version=1.64 3 | author=Mike McCauley 4 | maintainer=Patrick Wasp 5 | sentence=Allows Arduino boards to control a variety of stepper motors. 6 | paragraph=Provides an object-oriented interface for 2, 3 or 4 pin stepper motors and motor drivers. 7 | category=Device Control 8 | url=http://www.airspayce.com/mikem/arduino/AccelStepper/ 9 | architectures=* 10 | -------------------------------------------------------------------------------- /libraries/ClosedCube_TCA9548A/keywords.txt: -------------------------------------------------------------------------------- 1 | ################################################################## 2 | # Syntax Coloring Map For 3 | # Arduino library for Texas Instruments TCA9548A 8-Channel I2C Switch/Multiplexer 4 | ################################################################## 5 | 6 | ################################################################## 7 | # Datatypes (KEYWORD1) 8 | ################################################################## 9 | 10 | ClosedCube KEYWORD1 11 | Wired KEYWORD1 12 | TCA9548A KEYWORD1 13 | 14 | 15 | ################################################################## 16 | # Methods and Functions (KEYWORD2) 17 | ################################################################## 18 | 19 | address KEYWORD2 20 | getChannel KEYWORD2 21 | selectChannel KEYWORD2 22 | nextChannel KEYWORD2 23 | 24 | 25 | 26 | ### Updated: Saturday, 23 March 2019 at 11:59:13 GMT-00:00 27 | -------------------------------------------------------------------------------- /libraries/ClosedCube_TCA9548A/library.properties: -------------------------------------------------------------------------------- 1 | name=ClosedCube TCA9548A 2 | version=2019.3.23 3 | author=ClosedCube 4 | maintainer=ClosedCube GitHub Support 5 | sentence=Arduino library for Arduino library for Texas Instruments TCA9548A 8-Channel I2C Switch/Multiplexer 6 | paragraph=Arduino library for Arduino library for Texas Instruments TCA9548A 8-Channel I2C Switch/Multiplexer 7 | category=Communication 8 | url=https://github.com/closedcube/ClosedCube_TCA9548A_Arduino 9 | architectures=* -------------------------------------------------------------------------------- /libraries/ESP32Servo/AddDoxygenToGHPages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | GITURL=$(git config --get remote.origin.url) 4 | 5 | echo $GITURL 6 | 7 | rm -rf html 8 | git clone $GITURL html 9 | cd html 10 | if ( git checkout origin/gh-pages -b gh-pages) then 11 | echo "Checked out $GITURL gh-pages" 12 | else 13 | echo "Creating out $GITURL gh-pages" 14 | git checkout origin/master -b gh-pages 15 | rm -r * 16 | echo "# A simple README file for the gh-pages branch" > README.md 17 | git add README.md 18 | git commit -m"Replaced gh-pages html with simple readme" 19 | git push -u origin gh-pages 20 | fi 21 | cd .. 22 | 23 | doxygen doxy.doxyfile 24 | 25 | cd html 26 | git add * 27 | git add search/* 28 | git commit -a -m"updating the doxygen" 29 | git push 30 | cd .. 31 | rm -rf html 32 | git checkout master -------------------------------------------------------------------------------- /libraries/ESP32Servo/examples/PWMExample/PWMExample.ino: -------------------------------------------------------------------------------- 1 | #include 2 | int APin = 13; 3 | ESP32PWM pwm; 4 | int freq = 1000; 5 | void setup() { 6 | // Allow allocation of all timers 7 | ESP32PWM::allocateTimer(0); 8 | ESP32PWM::allocateTimer(1); 9 | ESP32PWM::allocateTimer(2); 10 | ESP32PWM::allocateTimer(3); 11 | Serial.begin(115200); 12 | pwm.attachPin(APin, freq, 10); // 1KHz 8 bit 13 | 14 | } 15 | void loop() { 16 | 17 | // fade the LED on thisPin from off to brightest: 18 | for (float brightness = 0; brightness <= 0.5; brightness += 0.001) { 19 | // Write a unit vector value from 0.0 to 1.0 20 | pwm.writeScaled(brightness); 21 | delay(2); 22 | } 23 | //delay(1000); 24 | // fade the LED on thisPin from brithstest to off: 25 | for (float brightness = 0.5; brightness >= 0; brightness -= 0.001) { 26 | freq += 10; 27 | // Adjust the frequency on the fly with a specific brightness 28 | // Frequency is in herts and duty cycle is a unit vector 0.0 to 1.0 29 | pwm.adjustFrequency(freq, brightness); // update the time base of the PWM 30 | delay(2); 31 | } 32 | // pause between LEDs: 33 | delay(1000); 34 | freq = 1000; 35 | pwm.adjustFrequency(freq, 0.0); // reset the time base 36 | } 37 | -------------------------------------------------------------------------------- /libraries/ESP32Servo/examples/ToneExample/ToneExample.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | */ 5 | 6 | #include 7 | int pin = 2; 8 | void setup() { 9 | // Allow allocation of all timers 10 | ESP32PWM::allocateTimer(0); 11 | ESP32PWM::allocateTimer(1); 12 | ESP32PWM::allocateTimer(2); 13 | ESP32PWM::allocateTimer(3); 14 | Serial.begin(115200); 15 | 16 | } 17 | 18 | void loop() { 19 | tone(pin, 4186, // C 20 | 500); // half a second 21 | tone(pin, 5274, // E 22 | 500); // half a second 23 | delay(500); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /libraries/ESP32Servo/keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map ESP32_Servo 3 | ####################################### 4 | 5 | ####################################### 6 | # Datatypes (KEYWORD1) 7 | ####################################### 8 | 9 | Servo KEYWORD1 10 | 11 | ####################################### 12 | # Methods and Functions (KEYWORD2) 13 | ####################################### 14 | attach KEYWORD2 15 | detach KEYWORD2 16 | write KEYWORD2 17 | read KEYWORD2 18 | attached KEYWORD2 19 | writeMicroseconds KEYWORD2 20 | readMicroseconds KEYWORD2 21 | setTimerWidth KEYWORD2 22 | readTimerWidth KEYWORD2 23 | 24 | ####################################### 25 | # Constants (LITERAL1) 26 | ####################################### -------------------------------------------------------------------------------- /libraries/ESP32Servo/library.properties: -------------------------------------------------------------------------------- 1 | name=ESP32Servo 2 | version=3.0.5 3 | author=Kevin Harrington,John K. Bennett 4 | maintainer=Kevin Harrington 5 | sentence=Allows ESP32 boards to control servo, tone and analogWrite motors using Arduino semantics. 6 | paragraph=This library can control a many types of servos.
It makes use of the ESP32 PWM timers: the library can control up to 16 servos on individual channels
No attempt has been made to support multiple servos per channel.
7 | category=Device Control 8 | url=https://madhephaestus.github.io/ESP32Servo/annotated.html 9 | architectures=esp32 10 | includes=ESP32Servo.h,analogWrite.h,tone.h,ESP32Tone.h,ESP32PWM.h 11 | 12 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/docs/wiring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/ESP32Servo360/docs/wiring.jpg -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/Calibrate/Calibrate.ino: -------------------------------------------------------------------------------- 1 | // Calibrate the servo for good angle accuracy, manually or automatically. 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() { 8 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo.adjustSignal(2, 1000); // Setting manually the wrong PWMs, defaults are 32 & 1067, min then max. 10 | servo.setMinimalForce(8); // Minimal force required for the servo to move. 7 is default. minimal force may barely move the servo, bigger force may do infinite bounces 11 | Serial.begin(9600); // Open the console to see the result of the calibration. 12 | servo.calibrate(); // Setting accurate PWMs by comparing while spinning slowly. 13 | } 14 | 15 | void loop() { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/ClosedLoop/ClosedLoop.ino: -------------------------------------------------------------------------------- 1 | // Hold at given angle. Behaves like a closed loop circuit. 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() { 8 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo.setSpeed(140); 10 | servo.rotateTo(0); 11 | servo.wait(); 12 | } 13 | 14 | void loop() { 15 | 16 | servo.rotateTo(0); 17 | servo.wait(); // Turn the motor by hand. 18 | delay(3000); 19 | 20 | servo.rotateTo(360); // Starts decelerating at 45 degrees from target angle. It will overshoot and bounce if spinning too fast. 21 | servo.wait(); 22 | servo.hold(); // Servo is holding to last angle. Rotating by hand is difficult now. 23 | delay(3000); 24 | servo.release(); // Use this function to release, holding state will be removed after any rotation as well. 25 | } 26 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/ConstantSpeed/ConstantSpeed.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | ESP32Servo360 servo; 4 | 5 | void setup() { 6 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 7 | servo.setSpeed(140); // Set turns per minute (RPM), 140 max. 8 | } 9 | 10 | void loop() { 11 | servo.spin(); // Turn at set speed clockwise. 12 | delay(2000); 13 | servo.spin(-40); // Turn at 40 RPM anticlockwise. 14 | delay(2000); 15 | } 16 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/Deceleration/Deceleration.ino: -------------------------------------------------------------------------------- 1 | // Control the deceleration to smoothen the rotation 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() { 8 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo.setSpeed(140); 10 | servo.rotateTo(0); 11 | servo.wait(); 12 | } 13 | 14 | void loop() { 15 | servo.setDeceleration(45); // Starts decelerating at 45 degrees from target angle. It will overshoot and bounce if spinning too fast. 16 | servo.rotateTo(360); 17 | servo.wait(); 18 | servo.setDeceleration(360); // Default deceleration is 180 degrees. 19 | servo.rotateTo(-360); 20 | servo.wait(); 21 | } 22 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/EaseRotate/EaseRotate.ino: -------------------------------------------------------------------------------- 1 | // Set angle and wait for the given amount of time. 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() { 8 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo.setSpeed(140); 10 | servo.rotateTo(0); // Reset position 11 | servo.wait(); // Wait end of movement 12 | servo.easeRotateTo(360); // rotate complete turn clockwise 13 | servo.wait(); 14 | servo.setSpeed(40); 15 | } 16 | 17 | void loop() { 18 | servo.easeRotate(60); // ease in out 19 | servo.wait(); 20 | servo.easeRotate(60); 21 | servo.wait(); 22 | servo.easeRotate(-30); 23 | servo.wait(); 24 | } 25 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/MultiServos/MultiServos.ino: -------------------------------------------------------------------------------- 1 | // Connect up to theoretically 16 servos. (Max number off ledc Channels on the ESP32). 2 | 3 | #include 4 | 5 | ESP32Servo360 servo1, servo2; 6 | 7 | void setup() { 8 | servo1.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo2.attach(25, 26); 10 | 11 | servo1.setSpeed(140); 12 | servo2.setSpeed(140); 13 | } 14 | 15 | void loop() { 16 | servo1.rotateTo(0); 17 | servo2.rotateTo(0); 18 | servo1.wait(); 19 | servo2.wait(); 20 | 21 | servo1.rotateTo(-675); 22 | servo2.spin(50); 23 | servo1.wait(); 24 | servo2.stop(); 25 | 26 | delay(1000); 27 | 28 | servo1.rotate(90); 29 | delay(1000); 30 | servo2.rotateTo(360); 31 | 32 | servo1.wait(); 33 | servo2.wait(); 34 | } 35 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/ReadAngle/ReadAngle.ino: -------------------------------------------------------------------------------- 1 | // Read angle, turns, orientations. 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() 8 | { 9 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 10 | Serial.begin(9600); 11 | } 12 | 13 | void loop() 14 | { 15 | float angle, orientation; 16 | int turns; 17 | 18 | servo.rotateTo(720); 19 | servo.wait(); 20 | angle = servo.getAngle(); // Get complete angle. 21 | Serial.println(angle); 22 | 23 | servo.rotateTo(-475); 24 | servo.wait(); 25 | angle = servo.getAngle(); 26 | orientation = servo.getOrientation(); // 0 to 360 degrees. 27 | turns = servo.getTurns(); // Number of full turns. 28 | Serial.println((String)angle +"° = " + turns + "x, " + orientation + "°"); // Turns won't be saved after a reboot. 29 | } 30 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/examples/RotateToAngle/RotateToAngle.ino: -------------------------------------------------------------------------------- 1 | // Set angle and wait for the given amount of time. 2 | 3 | #include 4 | 5 | ESP32Servo360 servo; 6 | 7 | void setup() { 8 | servo.attach(4, 16); // Control pin (white), signal pin (yellow). 9 | servo.setSpeed(140); 10 | servo.rotateTo(720); // Set absolute angle to 720 degrees. 11 | } 12 | 13 | void loop() { 14 | servo.wait(); // Wait for end of previous rotation. 15 | delay(1000); 16 | servo.rotate(90); // Rotate by 90 degrees. 17 | servo.wait(); 18 | servo.rotate(-45); 19 | servo.wait(); 20 | servo.rotate(180); 21 | } 22 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map ESP32Servo360 3 | ####################################### 4 | 5 | ####################################### 6 | # Datatypes (KEYWORD1) 7 | ####################################### 8 | 9 | ESP32Servo360 KEYWORD1 ESP32Servo360 10 | 11 | ####################################### 12 | # Methods and Functions (KEYWORD2) 13 | ####################################### 14 | attach KEYWORD2 15 | detach KEYWORD2 16 | wait KEYWORD2 17 | stop KEYWORD2 18 | hold KEYWORD2 19 | clearTurns KEYWORD2 20 | release KEYWORD2 21 | busy KEYWORD2 22 | attached KEYWORD2 23 | adjustSignal KEYWORD2 24 | calibrate KEYWORD2 25 | setOffset KEYWORD2 26 | setDeceleration KEYWORD2 27 | spin KEYWORD2 28 | rotate KEYWORD2 29 | easeRotate KEYWORD2 30 | rotateTo KEYWORD2 31 | easeRotateTo KEYWORD2 32 | setSpeed KEYWORD2 33 | setAdditionalTorque KEYWORD2 34 | setMinimalForce KEYWORD2 35 | getAngle KEYWORD2 36 | getTurns KEYWORD2 37 | ####################################### 38 | # Constants (LITERAL1) 39 | ####################################### 40 | -------------------------------------------------------------------------------- /libraries/ESP32Servo360/library.properties: -------------------------------------------------------------------------------- 1 | name=ESP32Servo360 2 | version=0.2.2 3 | author=Sébastien Matos 4 | maintainer=Sébastien Matos 5 | sentence=Initial development release 6 | paragraph=Control Parallax Feedback 360° High Speed Servos with a ESP32 dev-board. 7 | category=Servo 8 | url=https://github.com/ecal-mid/ESP32Servo360 9 | architectures=esp32 10 | -------------------------------------------------------------------------------- /libraries/Fabrik2D/AUTHORS: -------------------------------------------------------------------------------- 1 | 2 | Henrik Söderlund https://github.com/henriksod -------------------------------------------------------------------------------- /libraries/Fabrik2D/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Henrik Söderlund 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_2DOFMoveUpAndDown/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_2DOFMoveUpAndDown/preview.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_3DOFGrippingOffset/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_3DOFGrippingOffset/preview.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_3DOFMoveCircle/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_3DOFMoveCircle/preview.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_3DOFToolAngle/preview1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_3DOFToolAngle/preview1.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_3DOFToolAngle/preview2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_3DOFToolAngle/preview2.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/examples/example_4DOF/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/examples/example_4DOF/preview.gif -------------------------------------------------------------------------------- /libraries/Fabrik2D/images/3DOFSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/images/3DOFSetup.png -------------------------------------------------------------------------------- /libraries/Fabrik2D/images/4DOFSetup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/images/4DOFSetup.png -------------------------------------------------------------------------------- /libraries/Fabrik2D/images/exec_evaluation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Fabrik2D/images/exec_evaluation.png -------------------------------------------------------------------------------- /libraries/Fabrik2D/keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map For Ethernet 3 | ####################################### 4 | 5 | ####################################### 6 | # Datatypes (KEYWORD1) 7 | ####################################### 8 | 9 | Fabrik2D KEYWORD1 10 | 11 | ####################################### 12 | # Methods and Functions (KEYWORD2) 13 | ####################################### 14 | 15 | begin KEYWORD2 16 | solve KEYWORD2 17 | solve2 KEYWORD2 18 | getX KEYWORD2 19 | getY KEYWORD2 20 | getZ KEYWORD2 21 | getAngle KEYWORD2 22 | setTolerance KEYWORD2 23 | setJoints KEYWORD2 24 | getBaseAngle KEYWORD2 25 | setBaseAngle KEYWORD2 26 | 27 | ####################################### 28 | # Constants (LITERAL1) 29 | ####################################### 30 | 31 | -------------------------------------------------------------------------------- /libraries/Fabrik2D/library.properties: -------------------------------------------------------------------------------- 1 | name=Fabrik2D 2 | version=1.0.6 3 | author=Henrik Söderlund 4 | maintainer=Henrik Söderlund 5 | sentence=A library for fast solving of inverse kinematics using the FABRIK algorithm. 6 | paragraph=FABRIK is an iterative inverse kinematics solver algorithm by Andreas Aristidou, Joan Lasenby. 7 | category=Data Processing 8 | url=https://github.com/henriksod/Fabrik2DArduino 9 | architectures=* 10 | includes=FABRIK2D.h 11 | -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 MichaelJonker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/README.md: -------------------------------------------------------------------------------- 1 | # Arduino RS485 communication software 2 | 3 | by Michael Jonker 4 | 5 | [//]: # (This README.md file is written in github flavoured markdown. This file is visualized best by opening the project page on https://github.com/MichaelJonker/HardwareSerialRS485 .) 6 | 7 | [//]: # (for embedding comments in Markdown, see http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax) 8 | [//]: # (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) 9 | [//]: # (https://help.github.com/articles/github-flavored-markdown/) 10 | 11 | This project provides a software suite to support the use of an RS485 transceiver connected to the USART (Tx/Rx pins) in a half-duplex, concurrent multi-drop (i.e. multi-master, multi-slave) environment. For this purpose, the software suite provides capabilities for message addressing and filtering as well as collision detection and collision avoidance. 12 | 13 | 14 | For full information see the wiki pages on https://github.com/MichaelJonker/HardwareSerialRS485/wiki 15 | 16 | Project page: https://github.com/MichaelJonker/HardwareSerialRS485 17 | -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/README.txt: -------------------------------------------------------------------------------- 1 | Arduino RS485 communication software 2 | 3 | by Michael Jonker 4 | 5 | 6 | This project provides a software suite to support the use of an RS485 transceiver connected to the USART (Tx/Rx pins) 7 | in a half-duplex, concurrent multi-drop (i.e. multi-master, multi-slave) environment. For this purpose, the software 8 | suite provides capabilities for message addressing and filtering as well as collision detection and collision avoidance. 9 | 10 | For concise installation instructions, see the file InstallationInstructions.txt 11 | 12 | For full documentation see the project wiki pages: https://github.com/MichaelJonker/HardwareSerialRS485/wiki 13 | 14 | For the latest development, questions and issue reporting, visit the project page: https://github.com/MichaelJonker/HardwareSerialRS485 -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/examples/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #subfolder with a simple command response test program 16 | !RS485CommandResponse 17 | 18 | #subfolder with a RS485 to USB bridge which can serve as a host interface 19 | !RS485_USB -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/examples/RS485CommandResponse/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #the sketch 16 | !RS485CommandResponse.ino -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/examples/RS485_USB/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #the sketch 16 | !RS485_USB.ino -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/extras/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | # the boards.txt and DisableHardwareSerial.h 16 | !boards.txt 17 | !DisableHardwareSerial.h 18 | 19 | #subfolder 20 | !documentation -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/extras/documentation/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #the schema 16 | !Schema.jpg 17 | -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/extras/documentation/Schema.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/HardwareSerial_RS485/extras/documentation/Schema.jpg -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/library.properties: -------------------------------------------------------------------------------- 1 | name=HardwareSerial_RS485 2 | version=2.2.0 3 | author=Michael Jonker 4 | maintainer=Michael Jonker 5 | sentence=Concurrent multi-drop (i.e. multi-master, multi-slave) RS485 communication library 6 | paragraph=This library supports an RS485 transceiver connected to the USART (Tx/Rx) pins of the Arduino in a half-duplex, concurrent multi-drop environment. It provides message addressing and filtering as well as collision detection and avoidance. 7 | category=Communication 8 | url=https://github.com/MichaelJonker/HardwareSerialRS485/wiki 9 | architectures=avr 10 | -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/src/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #the HardwareSerialRS485 header and implementation file 16 | !HardwareSerialRS485.h 17 | !HardwareSerialRS485.cpp 18 | 19 | #the Messagereader header file 20 | !MessageReader.h 21 | 22 | # sub folders 23 | !utility -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/src/utility/.gitignore: -------------------------------------------------------------------------------- 1 | # Note: because this repository is a 'fine' selection of a much larger file structure in my work directory 2 | # I choose to ignore all 3 | * 4 | 5 | # As git does not ignore files specified in .gitignore that are already tracked, 6 | # files can be added to the repository with git add -f. 7 | # However, for completeness, all what should be in the repository is summed up here. 8 | # note: git is case insensitive to the entries in .gitignore 9 | 10 | ### not ignored (hence included) are ====================== 11 | 12 | #this file 13 | !.gitignore 14 | 15 | #the HardwareSerialRS485 helper classes 16 | !HardwareSerialRS485_Enabled.h 17 | !HardwareSerialRS485_Helper.h 18 | !HardwareSerialRS485_Tracer.h 19 | !MessageFilter.h 20 | !SerialUSBSwitch.h 21 | 22 | #template class definition for all possible USART 23 | !USARTdef.h 24 | 25 | #template definitions for generic bit handling 26 | !BitManipulation.h 27 | 28 | #the HardwareSerialRS485_configuration.h 29 | !HardwareSerialRS485_configuration.h -------------------------------------------------------------------------------- /libraries/HardwareSerial_RS485/src/utility/HardwareSerialRS485_Helper.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/HardwareSerial_RS485/src/utility/HardwareSerialRS485_Helper.h -------------------------------------------------------------------------------- /libraries/Kinematics/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Kousheek Chakraborty 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /libraries/Kinematics/README.md: -------------------------------------------------------------------------------- 1 | # Kinematics 2 | Generalised kinematics library for Arduino based microcontrollers. Features transformation matrix manipulation, Jacobian computation and forward and inverse kinematics using Newton Raphson method. 3 | -------------------------------------------------------------------------------- /libraries/Kinematics/examples/forward_kinematics/forward_kinematics.ino: -------------------------------------------------------------------------------- 1 | #include "Kinematics.h" 2 | #include "MatrixUtils.h" 3 | 4 | #define N 3 5 | 6 | void setup() { 7 | // put your setup code here, to run once: 8 | Serial.begin(9600); 9 | 10 | Kinematics kin(N); 11 | MatrixUtils mat_utils; 12 | 13 | kin.add_joint_axis(0, 0, 1, 4, 0, 0); 14 | kin.add_joint_axis(0, 0, 0, 0, 1, 0); 15 | kin.add_joint_axis(0, 0, -1, -6, 0, -0.1); 16 | 17 | kin.add_initial_end_effector_pose(-1, 0, 0, 0, 18 | 0, 1, 0, 6, 19 | 0, 0, -1, 2, 20 | 0, 0, 0, 1); 21 | 22 | float joint_angles[N] = {PI/2.0, 3, PI}; 23 | float transform[4][4]; 24 | 25 | kin.forward(joint_angles, (float*)transform); 26 | mat_utils.print_matrix((float*)transform, 4, 4, "Transform"); 27 | 28 | // Output 29 | // Transform 30 | // 0.00 1.00 0.00 -5.00 31 | // 1.00 -0.00 0.00 4.00 32 | // 0.00 0.00 -1.00 1.69 33 | // 0.00 0.00 0.00 1.00 34 | } 35 | 36 | void loop() { 37 | // put your main code here, to run repeatedly: 38 | 39 | } 40 | -------------------------------------------------------------------------------- /libraries/Kinematics/library.properties: -------------------------------------------------------------------------------- 1 | name=Kinematics 2 | version=1.0.0 3 | author=Kousheek Chakraborty 4 | maintainer=Kousheek Chakraborty 5 | sentence=Kinematics library for robotics 6 | paragraph=The library provides functions to compute the forward and inverse kinematics of a robotic system. Additionally, the library provides functionality for matrix manipulation and the computation of Jacobians. 7 | category=Data Processing 8 | url=https://github.com/kousheekc/Kinematics 9 | architectures=* -------------------------------------------------------------------------------- /libraries/Kinematics/src/Kinematics.h: -------------------------------------------------------------------------------- 1 | #ifndef KINEMATICS_h 2 | #define KINEMATICS_h 3 | 4 | #include 5 | #include "MatrixUtils.h" 6 | 7 | class Kinematics { 8 | private: 9 | int num_of_joints; 10 | int num_of_joints_declared; 11 | float joint_screw_axes[6][6]; 12 | float initial_end_effector_pose[4][4]; 13 | MatrixUtils mat_utils; 14 | 15 | public: 16 | Kinematics(int num_of_joints_); 17 | 18 | void add_joint_axis(float s1, float s2, float s3, float s4, float s5, float s6); 19 | void add_initial_end_effector_pose(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44); 20 | 21 | void forward(float* joint_angles, float* transform); 22 | void inverse(float* transform, float* jac, float* pinv, float* A_t, float* AA_t, float* A_tA, float* initial_joint_angles, float ew, float ev, float max_iterations, float* joint_angles); 23 | void jacobian(float* joint_angles, float* jacobian); 24 | }; 25 | 26 | #endif -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2011..2023 Bill Greiman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/README.md: -------------------------------------------------------------------------------- 1 | Note: Version 1.2.x has several new examples and many changes/new features. 2 | 3 | SSD1306Ascii is an unbuffered character only library for small OLED 4 | displays like the Adafruit 1.3" and 0.96" Monochrome displays. 5 | 6 | Many low cost OLED displays with SSD1306 controllers are available on ebay. 7 | 8 | SSD1306Ascii runs on Arduino AVR boards, Arduino Due and many other 9 | Arduino style boards that have the SPI or Wire library. 10 | 11 | Please read the html documentation in the SSD1306Ascii/doc folder. 12 | 13 | Click on SSD1306Ascii.html in the doc folder. 14 | 15 | Several options can be set by editing SSD1306Ascii/src/SSD1306Ascii.h. 16 | 17 | The SSD1306Ascii library only requires a few bytes of RAM. 18 | 19 | Here is Uno memory use for the SPI "Hello world!" example with 20 | scrolling disabled: 21 | 22 | Sketch uses 2928 bytes (9%) of program storage space. Maximum is 32256 bytes. 23 | 24 | Global variables use 54 bytes (2%) of dynamic memory, leaving 1994 bytes for local variables. Maximum is 2048 bytes. 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/5x7fonts.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/5x7fonts.pdf -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/SH1106.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/SH1106.pdf -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/SSD1306.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/SSD1306.pdf -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/SSD1306Ascii.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | A web page that points a browser to a different page 4 | 5 | 6 | 7 | 8 | Your browser didn't automatically redirect. Open html/index.html manually. 9 | 10 | 11 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/clean_html.bat: -------------------------------------------------------------------------------- 1 | del html\*.md5 2 | del html\*.map 3 | pause -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/del_htm.bat: -------------------------------------------------------------------------------- 1 | rm html/*.* 2 | rm html/search/*.* 3 | pause -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_avr_i2c_8h__dep__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_avr_i2c_8h__dep__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_avr_i2c_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_avr_i2c_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_digital_output_8h__dep__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_digital_output_8h__dep__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_digital_output_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_digital_output_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_8h__dep__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_8h__dep__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_avr_i2c_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_avr_i2c_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_soft_spi_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_soft_spi_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_spi_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_spi_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_wire_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306_ascii_wire_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/_s_s_d1306init_8h__dep__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/_s_s_d1306init_8h__dep__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/all_fonts_8h__dep__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/all_fonts_8h__dep__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/all_fonts_8h__incl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/all_fonts_8h__incl.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/bc_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/bc_s.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/bdwn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/bdwn.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii__coll__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii__coll__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii__inherit__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii__inherit__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_avr_i2c__coll__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_avr_i2c__coll__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_avr_i2c__inherit__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_avr_i2c__inherit__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_soft_spi__coll__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_soft_spi__coll__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_soft_spi__inherit__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_soft_spi__inherit__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_spi__coll__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_spi__coll__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_spi__inherit__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_spi__inherit__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_wire__coll__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_wire__coll__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_wire__inherit__graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/class_s_s_d1306_ascii_wire__inherit__graph.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/closed.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/dir_481cc946b8a81b8d9363a4aad6201160_dep.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/dir_520de49418287da36eb793ef32ea6307_dep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/dir_520de49418287da36eb793ef32ea6307_dep.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/dir_a991eec27578c865874ede3d8ec657c2_dep.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/dir_f52a68bbba56f2c8881f0d9135f8ef6d_dep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/dir_f52a68bbba56f2c8881f0d9135f8ef6d_dep.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/doc.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/folderclosed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/folderclosed.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/folderopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/folderopen.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/graph_legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/graph_legend.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/inherit_graph_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/inherit_graph_0.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/inherit_graph_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/inherit_graph_1.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/inherit_graph_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/inherit_graph_2.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/inherit_graph_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/inherit_graph_3.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/nav_f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/nav_f.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/nav_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/nav_g.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/nav_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/nav_h.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/open.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['adafruit128x32_0',['Adafruit128x32',['../_s_s_d1306init_8h.html#aca13ee8993f8c54a89b4e9c277d036dd',1,'SSD1306init.h']]], 4 | ['adafruit128x32init_1',['Adafruit128x32init',['../_s_s_d1306init_8h.html#ac62ba0354119fb63c2b59b658dfd17ed',1,'SSD1306init.h']]], 5 | ['adafruit128x64_2',['Adafruit128x64',['../_s_s_d1306init_8h.html#a94e03237fa7c0bc74fd01da5ab22c498',1,'SSD1306init.h']]], 6 | ['adafruit128x64init_3',['Adafruit128x64init',['../_s_s_d1306init_8h.html#a5e2aed1174143a2450c07102e19d04bb',1,'SSD1306init.h']]], 7 | ['allfonts_2eh_4',['allFonts.h',['../all_fonts_8h.html',1,'']]], 8 | ['arduino_20_25ssd1306ascii_20library_5',['Arduino %SSD1306Ascii Library',['../index.html',1,'']]], 9 | ['avri2c_2eh_6',['AvrI2c.h',['../_avr_i2c_8h.html',1,'']]], 10 | ['avri2c_5ffastmode_7',['AVRI2C_FASTMODE',['../_s_s_d1306_ascii_8h.html#a61d56be7dc9a4de5f91eda1b646e9f3f',1,'SSD1306Ascii.h']]] 11 | ]; 12 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_11.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['ticker_5fqueue_5fdim_0',['TICKER_QUEUE_DIM',['../_s_s_d1306_ascii_8h.html#a6a40e72c5c91e3b75953fee2087af890',1,'SSD1306Ascii.h']]], 4 | ['tickerinit_1',['tickerInit',['../class_s_s_d1306_ascii.html#a61b9d262f1e01a6d09cd45cd4fb86e2d',1,'SSD1306Ascii']]], 5 | ['tickerstate_2',['TickerState',['../struct_ticker_state.html',1,'']]], 6 | ['tickertext_3',['tickerText',['../class_s_s_d1306_ascii.html#afb477dc1d3f3f65aa28c459d1130305e',1,'SSD1306Ascii::tickerText(TickerState *state, const String &str)'],['../class_s_s_d1306_ascii.html#a6c7b63a8e660addf5a95504106b36eb0',1,'SSD1306Ascii::tickerText(TickerState *state, const char *text)']]], 7 | ['tickertick_4',['tickerTick',['../class_s_s_d1306_ascii.html#a024fef17820a709a1f6f32ce1330cda2',1,'SSD1306Ascii']]] 8 | ]; 9 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_12.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['write_0',['write',['../class_s_s_d1306_ascii.html#a344281335d089b05e63d97de61c988ab',1,'SSD1306Ascii::write()'],['../class_digital_output.html#af78855eb55325dedc24817ee70ae64ed',1,'DigitalOutput::write()']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['charspacing_0',['charSpacing',['../class_s_s_d1306_ascii.html#a3b32ce716a5ea4a6b288a74b0d550683',1,'SSD1306Ascii']]], 4 | ['charwidth_1',['charWidth',['../class_s_s_d1306_ascii.html#a0152829a8c07762690cfc81747e1acf6',1,'SSD1306Ascii']]], 5 | ['clear_2',['clear',['../class_s_s_d1306_ascii.html#adbe509084bf81c4e31392a726c76c4a3',1,'SSD1306Ascii::clear()'],['../class_s_s_d1306_ascii.html#ad0570a4744dd0fa4f21833a1803e7568',1,'SSD1306Ascii::clear(uint8_t c0, uint8_t c1, uint8_t r0, uint8_t r1)']]], 6 | ['clearfield_3',['clearField',['../class_s_s_d1306_ascii.html#aa5211c9019bc9068eab659d718c93cc6',1,'SSD1306Ascii']]], 7 | ['cleartoeol_4',['clearToEOL',['../class_s_s_d1306_ascii.html#a17ad770e14f6791842e5ac26a8304e6e',1,'SSD1306Ascii']]], 8 | ['col_5',['col',['../struct_ticker_state.html#a2693c233a1195781c63e77251fb6e93a',1,'TickerState::col()'],['../class_s_s_d1306_ascii.html#a8807e8386209fb20b9db19ee987e11dc',1,'SSD1306Ascii::col()']]], 9 | ['coloffset_6',['colOffset',['../struct_dev_type.html#a9ffb262e6ccb78389abd291fd446c071',1,'DevType']]] 10 | ]; 11 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['devtype_0',['DevType',['../struct_dev_type.html',1,'']]], 4 | ['digitaloutput_1',['DigitalOutput',['../class_digital_output.html',1,'']]], 5 | ['digitaloutput_2eh_2',['DigitalOutput.h',['../_digital_output_8h.html',1,'']]], 6 | ['displayheight_3',['displayHeight',['../class_s_s_d1306_ascii.html#ad6c0f15653c2d8270ffffbd8d74ebe12',1,'SSD1306Ascii']]], 7 | ['displayremap_4',['displayRemap',['../class_s_s_d1306_ascii.html#ab05fbcc3a2f70c35d93b1aa0fdf61f4d',1,'SSD1306Ascii']]], 8 | ['displayrows_5',['displayRows',['../class_s_s_d1306_ascii.html#ad949fa2fa919f5fa4975f40b4c91f18d',1,'SSD1306Ascii']]], 9 | ['displaywidth_6',['displayWidth',['../class_s_s_d1306_ascii.html#af36e4034fe1c8c90204bd8a14309619f',1,'SSD1306Ascii']]] 10 | ]; 11 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['endcol_0',['endCol',['../struct_ticker_state.html#ade980baf5a975237a3a8212985081beb',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['glcdfontdecl_0',['GLCDFONTDECL',['../all_fonts_8h.html#a757142e1760d3fb2a7abe3c63e1d7bd4',1,'allFonts.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['home_0',['home',['../class_s_s_d1306_ascii.html#a21378e19bc7f92b7d01246c04a6d1cbf',1,'SSD1306Ascii']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['include_5fscrolling_0',['INCLUDE_SCROLLING',['../_s_s_d1306_ascii_8h.html#ac0de102de39ccaab02096339b6ea9ec3',1,'SSD1306Ascii.h']]], 4 | ['init_1',['init',['../struct_ticker_state.html#a26c1dff76fd6f2bafa4d75fe87e224f5',1,'TickerState::init()'],['../class_s_s_d1306_ascii.html#af56b4a437a5913174b976b9b893eeb26',1,'SSD1306Ascii::init()']]], 5 | ['initcmds_2',['initcmds',['../struct_dev_type.html#adb1a2fe45c58f002fe4e535f4dc4c57e',1,'DevType']]], 6 | ['initial_5fscroll_5fmode_3',['INITIAL_SCROLL_MODE',['../_s_s_d1306_ascii_8h.html#a0d9ee90aff33dec356c3f4a059618bac',1,'SSD1306Ascii.h']]], 7 | ['initsize_4',['initSize',['../struct_dev_type.html#a0c7a0aae17eedda9252d9e777605a245',1,'DevType']]], 8 | ['invertdisplay_5',['invertDisplay',['../class_s_s_d1306_ascii.html#a112237bb1921f42259fa017d8aea982e',1,'SSD1306Ascii']]], 9 | ['invertmode_6',['invertMode',['../class_s_s_d1306_ascii.html#abb50cc9cf620f7cc61785b169e8f7af4',1,'SSD1306Ascii']]] 10 | ]; 11 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['lcdheight_0',['lcdHeight',['../struct_dev_type.html#ac05d347b65a6698b28ac6f7e1b3038c1',1,'DevType']]], 4 | ['lcdwidth_1',['lcdWidth',['../struct_dev_type.html#a1fd12d94aa7af1547f228623d51d7481',1,'DevType']]], 5 | ['letterspacing_2',['letterSpacing',['../class_s_s_d1306_ascii.html#a4d22729261450299263dc509a0d85f44',1,'SSD1306Ascii']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_a.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['mag2x_0',['mag2X',['../struct_ticker_state.html#ad42e223edc1c2911c4c432be2c1cc135',1,'TickerState']]], 4 | ['magfactor_1',['magFactor',['../class_s_s_d1306_ascii.html#aad6f28f24db21b1f796ac00514b3f8fc',1,'SSD1306Ascii']]], 5 | ['mem_5ftype_2',['MEM_TYPE',['../_s_s_d1306init_8h.html#a1ce6cd37363aa5055be41ef5d6f968f6',1,'SSD1306init.h']]], 6 | ['microoled64x48_3',['MicroOLED64x48',['../_s_s_d1306init_8h.html#a5de387de70a2dd94a4f920ff332b5fab',1,'SSD1306init.h']]], 7 | ['microoled64x48init_4',['MicroOLED64x48init',['../_s_s_d1306init_8h.html#ad2f73800e9213a83f9be245db7bf7c52',1,'SSD1306init.h']]], 8 | ['multiple_5fi2c_5fports_5',['MULTIPLE_I2C_PORTS',['../_s_s_d1306_ascii_8h.html#a2b454b9dfb5ee9b6510fa89a8c767b10',1,'SSD1306Ascii.h']]] 9 | ]; 10 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_b.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['nqueue_0',['nQueue',['../struct_ticker_state.html#a8b0175a247979bcc7cf03cd24da1aa09',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_c.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['oledreset_0',['oledReset',['../_s_s_d1306_ascii_8h.html#a2d24b58760aa70ba784ac7a43b2d3b16',1,'SSD1306Ascii.h']]], 4 | ['optimize_5fi2c_1',['OPTIMIZE_I2C',['../_s_s_d1306_ascii_8h.html#a6dad8e64264884e4d7534b237a188e4a',1,'SSD1306Ascii.h']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_d.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pageoffset_0',['pageOffset',['../class_s_s_d1306_ascii.html#a3500df5b7eb58d9a9fed0666dd32499e',1,'SSD1306Ascii']]], 4 | ['pageoffsetline_1',['pageOffsetLine',['../class_s_s_d1306_ascii.html#a5a45029ed9541b48bfe399c42e04ed85',1,'SSD1306Ascii']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_e.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['queue_0',['queue',['../struct_ticker_state.html#a62c6821b8397205a667c3f5785f12bd7',1,'TickerState']]], 4 | ['queuefree_1',['queueFree',['../struct_ticker_state.html#a942a4c5388669138ad9518b3e14c3cb4',1,'TickerState']]], 5 | ['queueused_2',['queueUsed',['../struct_ticker_state.html#a99d84731b9512a573efd4d40d1ce6b07',1,'TickerState']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/all_f.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['readfontbyte_0',['readFontByte',['../all_fonts_8h.html#a0519cefdee34f5982ca1ba8521a13ae8',1,'allFonts.h']]], 4 | ['row_1',['row',['../struct_ticker_state.html#aac2945af8db1582f4dc78e31f8d6154c',1,'TickerState::row()'],['../class_s_s_d1306_ascii.html#acaa73cbce657f3863a261c897d586f5b',1,'SSD1306Ascii::row()']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/classes_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['devtype_0',['DevType',['../struct_dev_type.html',1,'']]], 4 | ['digitaloutput_1',['DigitalOutput',['../class_digital_output.html',1,'']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/classes_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['ssd1306ascii_0',['SSD1306Ascii',['../class_s_s_d1306_ascii.html',1,'']]], 4 | ['ssd1306asciiavri2c_1',['SSD1306AsciiAvrI2c',['../class_s_s_d1306_ascii_avr_i2c.html',1,'']]], 5 | ['ssd1306asciisoftspi_2',['SSD1306AsciiSoftSpi',['../class_s_s_d1306_ascii_soft_spi.html',1,'']]], 6 | ['ssd1306asciispi_3',['SSD1306AsciiSpi',['../class_s_s_d1306_ascii_spi.html',1,'']]], 7 | ['ssd1306asciiwire_4',['SSD1306AsciiWire',['../class_s_s_d1306_ascii_wire.html',1,'']]] 8 | ]; 9 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/classes_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['tickerstate_0',['TickerState',['../struct_ticker_state.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['avri2c_5ffastmode_0',['AVRI2C_FASTMODE',['../_s_s_d1306_ascii_8h.html#a61d56be7dc9a4de5f91eda1b646e9f3f',1,'SSD1306Ascii.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['font_5fchar_5fcount_0',['FONT_CHAR_COUNT',['../all_fonts_8h.html#a4546cd12e3ae03bca0659ed77eeb872e',1,'allFonts.h']]], 4 | ['font_5ffirst_5fchar_1',['FONT_FIRST_CHAR',['../all_fonts_8h.html#abf840ca631179d25994d5f1dc3594646',1,'allFonts.h']]], 5 | ['font_5fheight_2',['FONT_HEIGHT',['../all_fonts_8h.html#a33f4fac49f2a5e27e2857eb27f054510',1,'allFonts.h']]], 6 | ['font_5flength_3',['FONT_LENGTH',['../all_fonts_8h.html#ae06dc7b9804bb102859f0e32754e79a5',1,'allFonts.h']]], 7 | ['font_5fwidth_4',['FONT_WIDTH',['../all_fonts_8h.html#a7b2e9cc063e140c50b67a4f224988a45',1,'allFonts.h']]], 8 | ['font_5fwidth_5ftable_5',['FONT_WIDTH_TABLE',['../all_fonts_8h.html#ae6bf0901cff58e47324da9487d0ee938',1,'allFonts.h']]] 9 | ]; 10 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['glcdfontdecl_0',['GLCDFONTDECL',['../all_fonts_8h.html#a757142e1760d3fb2a7abe3c63e1d7bd4',1,'allFonts.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['include_5fscrolling_0',['INCLUDE_SCROLLING',['../_s_s_d1306_ascii_8h.html#ac0de102de39ccaab02096339b6ea9ec3',1,'SSD1306Ascii.h']]], 4 | ['initial_5fscroll_5fmode_1',['INITIAL_SCROLL_MODE',['../_s_s_d1306_ascii_8h.html#a0d9ee90aff33dec356c3f4a059618bac',1,'SSD1306Ascii.h']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['mem_5ftype_0',['MEM_TYPE',['../_s_s_d1306init_8h.html#a1ce6cd37363aa5055be41ef5d6f968f6',1,'SSD1306init.h']]], 4 | ['multiple_5fi2c_5fports_1',['MULTIPLE_I2C_PORTS',['../_s_s_d1306_ascii_8h.html#a2b454b9dfb5ee9b6510fa89a8c767b10',1,'SSD1306Ascii.h']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['optimize_5fi2c_0',['OPTIMIZE_I2C',['../_s_s_d1306_ascii_8h.html#a6dad8e64264884e4d7534b237a188e4a',1,'SSD1306Ascii.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['readfontbyte_0',['readFontByte',['../all_fonts_8h.html#a0519cefdee34f5982ca1ba8521a13ae8',1,'allFonts.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/defines_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['ticker_5fqueue_5fdim_0',['TICKER_QUEUE_DIM',['../_s_s_d1306_ascii_8h.html#a6a40e72c5c91e3b75953fee2087af890',1,'SSD1306Ascii.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/files_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['allfonts_2eh_0',['allFonts.h',['../all_fonts_8h.html',1,'']]], 4 | ['avri2c_2eh_1',['AvrI2c.h',['../_avr_i2c_8h.html',1,'']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/files_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['digitaloutput_2eh_0',['DigitalOutput.h',['../_digital_output_8h.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/files_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['ssd1306ascii_2eh_0',['SSD1306Ascii.h',['../_s_s_d1306_ascii_8h.html',1,'']]], 4 | ['ssd1306asciiavri2c_2eh_1',['SSD1306AsciiAvrI2c.h',['../_s_s_d1306_ascii_avr_i2c_8h.html',1,'']]], 5 | ['ssd1306asciisoftspi_2eh_2',['SSD1306AsciiSoftSpi.h',['../_s_s_d1306_ascii_soft_spi_8h.html',1,'']]], 6 | ['ssd1306asciispi_2eh_3',['SSD1306AsciiSpi.h',['../_s_s_d1306_ascii_spi_8h.html',1,'']]], 7 | ['ssd1306asciiwire_2eh_4',['SSD1306AsciiWire.h',['../_s_s_d1306_ascii_wire_8h.html',1,'']]], 8 | ['ssd1306init_2eh_5',['SSD1306init.h',['../_s_s_d1306init_8h.html',1,'']]] 9 | ]; 10 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['charspacing_0',['charSpacing',['../class_s_s_d1306_ascii.html#a3b32ce716a5ea4a6b288a74b0d550683',1,'SSD1306Ascii']]], 4 | ['charwidth_1',['charWidth',['../class_s_s_d1306_ascii.html#a0152829a8c07762690cfc81747e1acf6',1,'SSD1306Ascii']]], 5 | ['clear_2',['clear',['../class_s_s_d1306_ascii.html#adbe509084bf81c4e31392a726c76c4a3',1,'SSD1306Ascii::clear()'],['../class_s_s_d1306_ascii.html#ad0570a4744dd0fa4f21833a1803e7568',1,'SSD1306Ascii::clear(uint8_t c0, uint8_t c1, uint8_t r0, uint8_t r1)']]], 6 | ['clearfield_3',['clearField',['../class_s_s_d1306_ascii.html#aa5211c9019bc9068eab659d718c93cc6',1,'SSD1306Ascii']]], 7 | ['cleartoeol_4',['clearToEOL',['../class_s_s_d1306_ascii.html#a17ad770e14f6791842e5ac26a8304e6e',1,'SSD1306Ascii']]], 8 | ['col_5',['col',['../class_s_s_d1306_ascii.html#a8807e8386209fb20b9db19ee987e11dc',1,'SSD1306Ascii']]] 9 | ]; 10 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['displayheight_0',['displayHeight',['../class_s_s_d1306_ascii.html#ad6c0f15653c2d8270ffffbd8d74ebe12',1,'SSD1306Ascii']]], 4 | ['displayremap_1',['displayRemap',['../class_s_s_d1306_ascii.html#ab05fbcc3a2f70c35d93b1aa0fdf61f4d',1,'SSD1306Ascii']]], 5 | ['displayrows_2',['displayRows',['../class_s_s_d1306_ascii.html#ad949fa2fa919f5fa4975f40b4c91f18d',1,'SSD1306Ascii']]], 6 | ['displaywidth_3',['displayWidth',['../class_s_s_d1306_ascii.html#af36e4034fe1c8c90204bd8a14309619f',1,'SSD1306Ascii']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['fieldwidth_0',['fieldWidth',['../class_s_s_d1306_ascii.html#a265e65ec1254484edeab3fd747151f9a',1,'SSD1306Ascii']]], 4 | ['font_1',['font',['../class_s_s_d1306_ascii.html#a7e2d434254935f2d461d3f78face4b6d',1,'SSD1306Ascii']]], 5 | ['fontcharcount_2',['fontCharCount',['../class_s_s_d1306_ascii.html#add82df96c9df53995b0d140c3e9af037',1,'SSD1306Ascii']]], 6 | ['fontfirstchar_3',['fontFirstChar',['../class_s_s_d1306_ascii.html#a716e07dc45735fd62bbcb570f5e2b84d',1,'SSD1306Ascii']]], 7 | ['fontheight_4',['fontHeight',['../class_s_s_d1306_ascii.html#a5bcc510507d2b2c6efaf0049fa58a56d',1,'SSD1306Ascii']]], 8 | ['fontrows_5',['fontRows',['../class_s_s_d1306_ascii.html#a429c6f0338ce0e0816b351d2d04e62a8',1,'SSD1306Ascii']]], 9 | ['fontwidth_6',['fontWidth',['../class_s_s_d1306_ascii.html#a513f639bd3c5fed26dce87c447203a75',1,'SSD1306Ascii']]] 10 | ]; 11 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['home_0',['home',['../class_s_s_d1306_ascii.html#a21378e19bc7f92b7d01246c04a6d1cbf',1,'SSD1306Ascii']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['init_0',['init',['../class_s_s_d1306_ascii.html#af56b4a437a5913174b976b9b893eeb26',1,'SSD1306Ascii']]], 4 | ['invertdisplay_1',['invertDisplay',['../class_s_s_d1306_ascii.html#a112237bb1921f42259fa017d8aea982e',1,'SSD1306Ascii']]], 5 | ['invertmode_2',['invertMode',['../class_s_s_d1306_ascii.html#abb50cc9cf620f7cc61785b169e8f7af4',1,'SSD1306Ascii']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['letterspacing_0',['letterSpacing',['../class_s_s_d1306_ascii.html#a4d22729261450299263dc509a0d85f44',1,'SSD1306Ascii']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['magfactor_0',['magFactor',['../class_s_s_d1306_ascii.html#aad6f28f24db21b1f796ac00514b3f8fc',1,'SSD1306Ascii']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['oledreset_0',['oledReset',['../_s_s_d1306_ascii_8h.html#a2d24b58760aa70ba784ac7a43b2d3b16',1,'SSD1306Ascii.h']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pageoffset_0',['pageOffset',['../class_s_s_d1306_ascii.html#a3500df5b7eb58d9a9fed0666dd32499e',1,'SSD1306Ascii']]], 4 | ['pageoffsetline_1',['pageOffsetLine',['../class_s_s_d1306_ascii.html#a5a45029ed9541b48bfe399c42e04ed85',1,'SSD1306Ascii']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_a.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['queuefree_0',['queueFree',['../struct_ticker_state.html#a942a4c5388669138ad9518b3e14c3cb4',1,'TickerState']]], 4 | ['queueused_1',['queueUsed',['../struct_ticker_state.html#a99d84731b9512a573efd4d40d1ce6b07',1,'TickerState']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_b.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['row_0',['row',['../class_s_s_d1306_ascii.html#acaa73cbce657f3863a261c897d586f5b',1,'SSD1306Ascii']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_d.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['tickerinit_0',['tickerInit',['../class_s_s_d1306_ascii.html#a61b9d262f1e01a6d09cd45cd4fb86e2d',1,'SSD1306Ascii']]], 4 | ['tickertext_1',['tickerText',['../class_s_s_d1306_ascii.html#afb477dc1d3f3f65aa28c459d1130305e',1,'SSD1306Ascii::tickerText(TickerState *state, const String &str)'],['../class_s_s_d1306_ascii.html#a6c7b63a8e660addf5a95504106b36eb0',1,'SSD1306Ascii::tickerText(TickerState *state, const char *text)']]], 5 | ['tickertick_2',['tickerTick',['../class_s_s_d1306_ascii.html#a024fef17820a709a1f6f32ce1330cda2',1,'SSD1306Ascii']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/functions_e.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['write_0',['write',['../class_s_s_d1306_ascii.html#a344281335d089b05e63d97de61c988ab',1,'SSD1306Ascii::write()'],['../class_digital_output.html#af78855eb55325dedc24817ee70ae64ed',1,'DigitalOutput::write()']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/nomatches.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
No Matches
11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/pages_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['arduino_20_25ssd1306ascii_20library_0',['Arduino %SSD1306Ascii Library',['../index.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/search_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/search/search_l.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/search_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/search/search_m.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/search_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/search/search_r.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/searchdata.js: -------------------------------------------------------------------------------- 1 | var indexSectionsWithContent = 2 | { 3 | 0: "abcdefghilmnopqrstw", 4 | 1: "dst", 5 | 2: "ads", 6 | 3: "bcdfhilmopqrstw", 7 | 4: "abcefilmnqrs", 8 | 5: "afgimorst", 9 | 6: "a" 10 | }; 11 | 12 | var indexSectionNames = 13 | { 14 | 0: "all", 15 | 1: "classes", 16 | 2: "files", 17 | 3: "functions", 18 | 4: "variables", 19 | 5: "defines", 20 | 6: "pages" 21 | }; 22 | 23 | var indexSectionLabels = 24 | { 25 | 0: "All", 26 | 1: "Classes", 27 | 2: "Files", 28 | 3: "Functions", 29 | 4: "Variables", 30 | 5: "Macros", 31 | 6: "Pages" 32 | }; 33 | 34 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['adafruit128x32_0',['Adafruit128x32',['../_s_s_d1306init_8h.html#aca13ee8993f8c54a89b4e9c277d036dd',1,'SSD1306init.h']]], 4 | ['adafruit128x32init_1',['Adafruit128x32init',['../_s_s_d1306init_8h.html#ac62ba0354119fb63c2b59b658dfd17ed',1,'SSD1306init.h']]], 5 | ['adafruit128x64_2',['Adafruit128x64',['../_s_s_d1306init_8h.html#a94e03237fa7c0bc74fd01da5ab22c498',1,'SSD1306init.h']]], 6 | ['adafruit128x64init_3',['Adafruit128x64init',['../_s_s_d1306init_8h.html#a5e2aed1174143a2450c07102e19d04bb',1,'SSD1306init.h']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['bgncol_0',['bgnCol',['../struct_ticker_state.html#ac9acf7f7afbfff4dd845e152dfa88e4d',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['col_0',['col',['../struct_ticker_state.html#a2693c233a1195781c63e77251fb6e93a',1,'TickerState']]], 4 | ['coloffset_1',['colOffset',['../struct_dev_type.html#a9ffb262e6ccb78389abd291fd446c071',1,'DevType']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['endcol_0',['endCol',['../struct_ticker_state.html#ade980baf5a975237a3a8212985081beb',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['font_0',['font',['../struct_ticker_state.html#adbf427e9ad58d994d4283fc1c5bd89c6',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['init_0',['init',['../struct_ticker_state.html#a26c1dff76fd6f2bafa4d75fe87e224f5',1,'TickerState']]], 4 | ['initcmds_1',['initcmds',['../struct_dev_type.html#adb1a2fe45c58f002fe4e535f4dc4c57e',1,'DevType']]], 5 | ['initsize_2',['initSize',['../struct_dev_type.html#a0c7a0aae17eedda9252d9e777605a245',1,'DevType']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['lcdheight_0',['lcdHeight',['../struct_dev_type.html#ac05d347b65a6698b28ac6f7e1b3038c1',1,'DevType']]], 4 | ['lcdwidth_1',['lcdWidth',['../struct_dev_type.html#a1fd12d94aa7af1547f228623d51d7481',1,'DevType']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['mag2x_0',['mag2X',['../struct_ticker_state.html#ad42e223edc1c2911c4c432be2c1cc135',1,'TickerState']]], 4 | ['microoled64x48_1',['MicroOLED64x48',['../_s_s_d1306init_8h.html#a5de387de70a2dd94a4f920ff332b5fab',1,'SSD1306init.h']]], 5 | ['microoled64x48init_2',['MicroOLED64x48init',['../_s_s_d1306init_8h.html#ad2f73800e9213a83f9be245db7bf7c52',1,'SSD1306init.h']]] 6 | ]; 7 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['nqueue_0',['nQueue',['../struct_ticker_state.html#a8b0175a247979bcc7cf03cd24da1aa09',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['queue_0',['queue',['../struct_ticker_state.html#a62c6821b8397205a667c3f5785f12bd7',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_a.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['row_0',['row',['../struct_ticker_state.html#aac2945af8db1582f4dc78e31f8d6154c',1,'TickerState']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/search/variables_b.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['sh1106_5f128x64_0',['SH1106_128x64',['../_s_s_d1306init_8h.html#a29cff082b59522083f68a451d7e31025',1,'SSD1306init.h']]], 4 | ['sh1106_5f128x64init_1',['SH1106_128x64init',['../_s_s_d1306init_8h.html#ac9f9788202d7665bdecd1b571b3520b2',1,'SSD1306init.h']]], 5 | ['skip_2',['skip',['../struct_ticker_state.html#a3c5b504bbc3261e417910d17ace698c1',1,'TickerState']]], 6 | ['ssd1306_5f96x16_3',['SSD1306_96x16',['../_s_s_d1306init_8h.html#a39e7ccff633d5905d4cfbfe1d4be9ded',1,'SSD1306init.h']]], 7 | ['ssd1306_5f96x16init_4',['SSD1306_96x16init',['../_s_s_d1306init_8h.html#a40317eae5f04d1fa0896d2f2ba5da375',1,'SSD1306init.h']]] 8 | ]; 9 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/splitbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/splitbar.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/sync_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/sync_off.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/sync_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/sync_on.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/tab_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/tab_a.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/tab_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/tab_b.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/tab_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/tab_h.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/html/tab_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/html/tab_s.png -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/sd1306test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/sd1306test.jpg -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/doc/ssd1306sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/doc/ssd1306sample.jpg -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/AvrI2c128x32/AvrI2c128x32.ino: -------------------------------------------------------------------------------- 1 | // Simple I2C test for 128x32 oled. 2 | // Use smaller faster AvrI2c class in place of Wire. 3 | // Edit AVRI2C_FASTMODE in SSD1306Ascii.h to change the default I2C frequency. 4 | // 5 | #include "SSD1306Ascii.h" 6 | #include "SSD1306AsciiAvrI2c.h" 7 | 8 | // 0X3C+SA0 - 0x3C or 0x3D 9 | #define I2C_ADDRESS 0x3C 10 | 11 | // Define proper RST_PIN if required. 12 | #define RST_PIN -1 13 | 14 | SSD1306AsciiAvrI2c oled; 15 | //------------------------------------------------------------------------------ 16 | void setup() { 17 | 18 | #if RST_PIN >= 0 19 | oled.begin(&Adafruit128x32, I2C_ADDRESS, RST_PIN); 20 | #else // RST_PIN >= 0 21 | oled.begin(&Adafruit128x32, I2C_ADDRESS); 22 | #endif // RST_PIN >= 0 23 | // Call oled.setI2cClock(frequency) to change from the default frequency. 24 | 25 | oled.setFont(Adafruit5x7); 26 | 27 | uint32_t m = micros(); 28 | 29 | oled.clear(); 30 | 31 | // first row 32 | oled.println("set1X test"); 33 | 34 | // second row 35 | oled.set2X(); 36 | oled.println("set2X test"); 37 | 38 | // third row 39 | oled.set1X(); 40 | oled.print("micros: "); 41 | oled.print(micros() - m); 42 | } 43 | //------------------------------------------------------------------------------ 44 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/AvrI2c128x64/AvrI2c128x64.ino: -------------------------------------------------------------------------------- 1 | // Simple I2C test for ebay 128x64 oled. 2 | // Use smaller faster AvrI2c class in place of Wire. 3 | // Edit AVRI2C_FASTMODE in SSD1306Ascii.h to change the default I2C frequency. 4 | // 5 | #include "SSD1306Ascii.h" 6 | #include "SSD1306AsciiAvrI2c.h" 7 | 8 | // 0X3C+SA0 - 0x3C or 0x3D 9 | #define I2C_ADDRESS 0x3C 10 | 11 | // Define proper RST_PIN if required. 12 | #define RST_PIN -1 13 | 14 | SSD1306AsciiAvrI2c oled; 15 | //------------------------------------------------------------------------------ 16 | void setup() { 17 | 18 | #if RST_PIN >= 0 19 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 20 | #else // RST_PIN >= 0 21 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 22 | #endif // RST_PIN >= 0 23 | // Call oled.setI2cClock(frequency) to change from the default frequency. 24 | 25 | oled.setFont(Adafruit5x7); 26 | 27 | uint32_t m = micros(); 28 | oled.clear(); 29 | oled.println("Hello world!"); 30 | oled.println("A long line may be truncated"); 31 | oled.println(); 32 | oled.set2X(); 33 | oled.println("2X demo"); 34 | oled.set1X(); 35 | oled.print("\nmicros: "); 36 | oled.print(micros() - m); 37 | } 38 | //------------------------------------------------------------------------------ 39 | void loop() {} 40 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/DisplayRotationSpi/DisplayRotationSpi.ino: -------------------------------------------------------------------------------- 1 | // Set display remap mode. 2 | // displayRemap(bool mode) selects normal mode or 180 degree rotation mode. 3 | 4 | #include 5 | #include "SSD1306Ascii.h" 6 | #include "SSD1306AsciiSpi.h" 7 | 8 | // pin definitions 9 | #define CS_PIN 7 10 | #define RST_PIN 8 11 | #define DC_PIN 9 12 | 13 | SSD1306AsciiSpi oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | // Use next line if no RST_PIN or reset is not required. 17 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 18 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 19 | oled.setFont(System5x7); 20 | 21 | // Use true, normal mode, since default for Adafruit display is remap mode. 22 | oled.displayRemap(true); 23 | 24 | oled.clear(); 25 | oled.println("Hello world!"); 26 | oled.println("displayRemap(false)"); 27 | oled.print("for other mode."); 28 | } 29 | //------------------------------------------------------------------------------ 30 | void loop() {} 31 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/DisplayRotationWire/DisplayRotationWire.ino: -------------------------------------------------------------------------------- 1 | // Set display remap mode. 2 | // displayRemap(bool mode) selects normal mode or 180 degree rotation mode. 3 | 4 | #include 5 | #include "SSD1306Ascii.h" 6 | #include "SSD1306AsciiWire.h" 7 | 8 | // 0X3C+SA0 - 0x3C or 0x3D 9 | #define I2C_ADDRESS 0x3C 10 | 11 | // Define proper RST_PIN if required. 12 | #define RST_PIN -1 13 | 14 | SSD1306AsciiWire oled; 15 | //------------------------------------------------------------------------------ 16 | void setup() { 17 | Wire.begin(); 18 | Wire.setClock(400000L); 19 | 20 | #if RST_PIN >= 0 21 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 22 | #else // RST_PIN >= 0 23 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 24 | #endif // RST_PIN >= 0 25 | oled.setFont(Adafruit5x7); 26 | 27 | // Use true, normal mode, since default for Adafruit display is remap mode. 28 | oled.displayRemap(true); 29 | 30 | oled.clear(); 31 | oled.println("Hello world!"); 32 | oled.println("displayRemap(false)"); 33 | oled.print("for other mode."); 34 | } 35 | //------------------------------------------------------------------------------ 36 | void loop() {} 37 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/HelloWorldAvrI2c/HelloWorldAvrI2c.ino: -------------------------------------------------------------------------------- 1 | // Test for minimum program size. 2 | // Edit AVRI2C_FASTMODE in SSD1306Ascii.h to change the default I2C frequency. 3 | 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiAvrI2c.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiAvrI2c oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | 17 | #if RST_PIN >= 0 18 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 19 | #else // RST_PIN >= 0 20 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 21 | #endif // RST_PIN >= 0 22 | // Call oled.setI2cClock(frequency) to change from the default frequency. 23 | 24 | oled.setFont(System5x7); 25 | oled.clear(); 26 | oled.print("Hello world!"); 27 | } 28 | //------------------------------------------------------------------------------ 29 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/HelloWorldSH1106Spi/HelloWorldSH1106Spi.ino: -------------------------------------------------------------------------------- 1 | // Test for minimum program size. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | 12 | SSD1306AsciiSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&SH1106_128x64, CS_PIN, DC_PIN); 17 | oled.begin(&SH1106_128x64, CS_PIN, DC_PIN, RST_PIN); 18 | oled.setFont(System5x7); 19 | oled.clear(); 20 | oled.print("Hello world!"); 21 | } 22 | //------------------------------------------------------------------------------ 23 | void loop() {} 24 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/HelloWorldSoftSpi/HelloWorldSoftSpi.ino: -------------------------------------------------------------------------------- 1 | // Test for minimum program size. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSoftSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | #define MOSI_PIN 11 12 | #define CLK_PIN 13 13 | 14 | SSD1306AsciiSoftSpi oled; 15 | //------------------------------------------------------------------------------ 16 | void setup() { 17 | // Use next line if no RST_PIN or reset is not required. 18 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, CLK_PIN, MOSI_PIN); 19 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, CLK_PIN, MOSI_PIN, RST_PIN); 20 | oled.setFont(System5x7); 21 | oled.clear(); 22 | oled.print("Hello world!"); 23 | } 24 | //------------------------------------------------------------------------------ 25 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/HelloWorldSpi/HelloWorldSpi.ino: -------------------------------------------------------------------------------- 1 | // Test for minimum program size. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | 12 | SSD1306AsciiSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 17 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 18 | oled.setFont(System5x7); 19 | oled.clear(); 20 | oled.print("Hello world!"); 21 | } 22 | //------------------------------------------------------------------------------ 23 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/HelloWorldWire/HelloWorldWire.ino: -------------------------------------------------------------------------------- 1 | // Test for minimum program size. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(System5x7); 26 | oled.clear(); 27 | oled.print("Hello world!"); 28 | } 29 | //------------------------------------------------------------------------------ 30 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/InvertTextSpi/InvertTextSpi.ino: -------------------------------------------------------------------------------- 1 | // Demo of invertMode and invertDisplay. 2 | #include 3 | #include "SSD1306Ascii.h" 4 | #include "SSD1306AsciiSpi.h" 5 | 6 | // pin definitions 7 | #define CS_PIN 7 8 | #define RST_PIN 8 9 | #define DC_PIN 9 10 | 11 | SSD1306AsciiSpi oled; 12 | //------------------------------------------------------------------------------ 13 | void setup() { 14 | // Use next line if no RST_PIN or reset is not required. 15 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 16 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 17 | oled.setFont(System5x7); 18 | oled.clear(); 19 | oled.println("normal"); 20 | oled.println(); 21 | } 22 | //------------------------------------------------------------------------------ 23 | void loop() { 24 | for (int i = 0; i < 4; i++) { 25 | // Toggle invert mode for next line of text. 26 | oled.setInvertMode(i%2); 27 | oled.print("\rinvert"); 28 | delay(500); 29 | } 30 | for (int i = 0; i < 4; i++) { 31 | // Invert all text on screen. 32 | oled.invertDisplay(!(i%2)); 33 | delay(1000); 34 | } 35 | } -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/InvertTextWire/InvertTextWire.ino: -------------------------------------------------------------------------------- 1 | // Demo of invertMode and invertDisplay. 2 | #include 3 | #include "SSD1306Ascii.h" 4 | #include "SSD1306AsciiWire.h" 5 | 6 | // 0X3C+SA0 - 0x3C or 0x3D 7 | #define I2C_ADDRESS 0x3C 8 | 9 | // Define proper RST_PIN if required. 10 | #define RST_PIN -1 11 | 12 | SSD1306AsciiWire oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | Wire.begin(); 16 | Wire.setClock(400000L); 17 | 18 | #if RST_PIN >= 0 19 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 20 | #else // RST_PIN >= 0 21 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 22 | #endif // RST_PIN >= 0 23 | 24 | oled.setFont(System5x7); 25 | oled.clear(); 26 | oled.println("normal"); 27 | oled.println(); 28 | } 29 | //------------------------------------------------------------------------------ 30 | void loop() { 31 | for (int i = 0; i < 4; i++) { 32 | // Toggle invert mode for next line of text. 33 | oled.setInvertMode(i%2); 34 | oled.print("\rinvert"); 35 | delay(500); 36 | } 37 | for (int i = 0; i < 4; i++) { 38 | // Invert all text on screen. 39 | oled.invertDisplay(!(i%2)); 40 | delay(1000); 41 | } 42 | } -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/LetterSpacingSpi/LetterSpacingSpi.ino: -------------------------------------------------------------------------------- 1 | // LetterSpacing() example. 2 | #include 3 | #include "SSD1306Ascii.h" 4 | #include "SSD1306AsciiSpi.h" 5 | 6 | // pin definitions 7 | #define CS_PIN 7 8 | #define RST_PIN 8 9 | #define DC_PIN 9 10 | 11 | SSD1306AsciiSpi oled; 12 | //------------------------------------------------------------------------------ 13 | void setup() { 14 | // Use next line if no RST_PIN or reset is not required. 15 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 16 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 17 | oled.setFont(Callibri11_bold); 18 | oled.clear(); 19 | oled.println("Hello world!"); 20 | oled.setLetterSpacing(2); 21 | oled.print("Hello world!"); 22 | } 23 | //------------------------------------------------------------------------------ 24 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/LetterSpacingWire/LetterSpacingWire.ino: -------------------------------------------------------------------------------- 1 | // LetterSpacing() example. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(Callibri11_bold); 26 | oled.clear(); 27 | oled.println("Hello world!"); 28 | oled.setLetterSpacing(2); 29 | oled.print("Hello world!"); 30 | } 31 | //------------------------------------------------------------------------------ 32 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/ScrollingSpi/ScrollingSpi.ino: -------------------------------------------------------------------------------- 1 | // Example scrolling display for 64 pixel high display. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | 12 | SSD1306AsciiSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 17 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 18 | oled.setFont(System5x7); 19 | 20 | #if INCLUDE_SCROLLING == 0 21 | #error INCLUDE_SCROLLING must be non-zero. Edit SSD1306Ascii.h 22 | #endif // INCLUDE_SCROLLING 23 | // Set auto scrolling at end of window. 24 | oled.setScrollMode(SCROLL_MODE_AUTO); 25 | 26 | for (int i = 0; i <= 20; i++) { 27 | if (i == 10) { 28 | oled.clear(); 29 | } 30 | oled.print("Line "); 31 | oled.println(i); 32 | delay(500); 33 | } 34 | // don't scroll last line. 35 | oled.print("Done"); 36 | } 37 | //------------------------------------------------------------------------------ 38 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/ScrollingWire/ScrollingWire.ino: -------------------------------------------------------------------------------- 1 | // Example scrolling display for 64 pixel high display. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(System5x7); 26 | 27 | #if INCLUDE_SCROLLING == 0 28 | #error INCLUDE_SCROLLING must be non-zero. Edit SSD1306Ascii.h 29 | #endif // INCLUDE_SCROLLING 30 | // Set auto scrolling at end of window. 31 | oled.setScrollMode(SCROLL_MODE_AUTO); 32 | 33 | for (int i = 0; i <= 20; i++) { 34 | if (i == 10) { 35 | oled.clear(); 36 | } 37 | oled.print("Line "); 38 | oled.println(i); 39 | delay(500); 40 | } 41 | // don't scroll last line. 42 | oled.print("Done"); 43 | } 44 | //------------------------------------------------------------------------------ 45 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/SoftSpi128x32/SoftSpi128x32.ino: -------------------------------------------------------------------------------- 1 | // Simple software SPI test for Adafruit 128x32 oled. 2 | #include "SSD1306Ascii.h" 3 | #include "SSD1306AsciiSoftSpi.h" 4 | 5 | // pin definitions 6 | #define CS_PIN 7 7 | #define RST_PIN 8 8 | #define DC_PIN 9 9 | #define OLED_DATA 11 10 | #define OLED_CLK 13 11 | 12 | SSD1306AsciiSoftSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&Adafruit128x32, CS_PIN, DC_PIN, OLED_CLK, OLED_DATA); 17 | oled.begin(&Adafruit128x32, CS_PIN, DC_PIN, OLED_CLK, OLED_DATA, RST_PIN); 18 | oled.setFont(Adafruit5x7); 19 | 20 | uint32_t m = micros(); 21 | oled.clear(); 22 | oled.println("Hello world!"); 23 | oled.println("A long line may be truncated"); 24 | oled.print("\nmicros: "); 25 | oled.print(micros() - m); 26 | } 27 | //------------------------------------------------------------------------------ 28 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/SoftSpi128x64/SoftSpi128x64.ino: -------------------------------------------------------------------------------- 1 | // Simple software SPI test for ebay 128x64 oled. 2 | 3 | #include "SSD1306Ascii.h" 4 | #include "SSD1306AsciiSoftSpi.h" 5 | 6 | // pin definitions 7 | #define CS_PIN 7 8 | #define RST_PIN 8 9 | #define DC_PIN 9 10 | #define MOSI_PIN 11 11 | #define CLK_PIN 13 12 | 13 | SSD1306AsciiSoftSpi oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | // Use next line if no RST_PIN or reset is not required. 17 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, CLK_PIN, MOSI_PIN); 18 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, CLK_PIN, MOSI_PIN, RST_PIN); 19 | oled.setFont(Adafruit5x7); 20 | 21 | uint32_t m = micros(); 22 | oled.clear(); 23 | oled.println("Hello world!"); 24 | oled.println("A long line may be truncated"); 25 | oled.println(); 26 | oled.set2X(); 27 | oled.println("2X demo"); 28 | oled.set1X(); 29 | oled.print("\nmicros: "); 30 | oled.print(micros() - m); 31 | } 32 | //------------------------------------------------------------------------------ 33 | void loop() {} 34 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Spi128x32/Spi128x32.ino: -------------------------------------------------------------------------------- 1 | // Simple SPI test for Adafruit 128x32 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | 12 | SSD1306AsciiSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&Adafruit128x32, CS_PIN, DC_PIN); 17 | oled.begin(&Adafruit128x32, CS_PIN, DC_PIN, RST_PIN); 18 | oled.setFont(Adafruit5x7); 19 | 20 | uint32_t m = micros(); 21 | oled.clear(); 22 | oled.println("Hello world!"); 23 | oled.println("A long line may be truncated"); 24 | oled.print("\nmicros: "); 25 | oled.print(micros() - m); 26 | } 27 | //------------------------------------------------------------------------------ 28 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Spi128x64/Spi128x64.ino: -------------------------------------------------------------------------------- 1 | // Simple SPI test for ebay 128x64 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | 9 | #define CS_PIN 7 10 | #define RST_PIN 8 11 | #define DC_PIN 9 12 | 13 | SSD1306AsciiSpi oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | // Use next line if no RST_PIN or reset is not required. 17 | // oled.begin(&Adafruit128x64, CS_PIN, DC_PIN); 18 | oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN); 19 | oled.setFont(Adafruit5x7); 20 | 21 | uint32_t m = micros(); 22 | oled.clear(); 23 | oled.println("Hello world!"); 24 | oled.println("A long line may be truncated"); 25 | oled.println(); 26 | oled.set2X(); 27 | oled.println("2X demo"); 28 | oled.set1X(); 29 | oled.print("\nmicros: "); 30 | oled.print(micros() - m); 31 | } 32 | //------------------------------------------------------------------------------ 33 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Spi128x64SH1106/Spi128x64SH1106.ino: -------------------------------------------------------------------------------- 1 | // Simple SPI test for ebay SH1106 128x64 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiSpi.h" 6 | 7 | // pin definitions 8 | #define CS_PIN 7 9 | #define RST_PIN 8 10 | #define DC_PIN 9 11 | 12 | SSD1306AsciiSpi oled; 13 | //------------------------------------------------------------------------------ 14 | void setup() { 15 | // Use next line if no RST_PIN or reset is not required. 16 | // oled.begin(&SH1106_128x64, CS_PIN, DC_PIN); 17 | oled.begin(&SH1106_128x64, CS_PIN, DC_PIN, RST_PIN); 18 | oled.setFont(System5x7); 19 | oled.clear(); 20 | uint32_t m = micros(); 21 | oled.clear(); 22 | oled.println("Hello world!"); 23 | oled.println("A long line may be truncated"); 24 | oled.println(); 25 | oled.set2X(); 26 | oled.println("2X demo"); 27 | oled.set1X(); 28 | oled.print("\nmicros: "); 29 | oled.print(micros() - m); 30 | } 31 | //------------------------------------------------------------------------------ 32 | void loop() {} -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Wire128x32/Wire128x32.ino: -------------------------------------------------------------------------------- 1 | // Simple I2C test for ebay 128x32 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&Adafruit128x32, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&Adafruit128x32, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(Adafruit5x7); 26 | 27 | uint32_t m = micros(); 28 | oled.clear(); 29 | // first row 30 | oled.println("set1X test"); 31 | 32 | // second row 33 | oled.set2X(); 34 | oled.println("set2X test"); 35 | 36 | // third row 37 | oled.set1X(); 38 | oled.print("micros: "); 39 | oled.print(micros() - m); 40 | } 41 | //------------------------------------------------------------------------------ 42 | void loop() {} 43 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Wire128x64/Wire128x64.ino: -------------------------------------------------------------------------------- 1 | // Simple I2C test for ebay 128x64 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&Adafruit128x64, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(Adafruit5x7); 26 | 27 | uint32_t m = micros(); 28 | oled.clear(); 29 | oled.println("Hello world!"); 30 | oled.println("A long line may be truncated"); 31 | oled.println(); 32 | oled.set2X(); 33 | oled.println("2X demo"); 34 | oled.set1X(); 35 | oled.print("\nmicros: "); 36 | oled.print(micros() - m); 37 | } 38 | //------------------------------------------------------------------------------ 39 | void loop() {} 40 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/examples/Wire128x64SH1106/Wire128x64SH1106.ino: -------------------------------------------------------------------------------- 1 | // Simple I2C test for ebay SH1106 128x64 oled. 2 | 3 | #include 4 | #include "SSD1306Ascii.h" 5 | #include "SSD1306AsciiWire.h" 6 | 7 | // 0X3C+SA0 - 0x3C or 0x3D 8 | #define I2C_ADDRESS 0x3C 9 | 10 | // Define proper RST_PIN if required. 11 | #define RST_PIN -1 12 | 13 | SSD1306AsciiWire oled; 14 | //------------------------------------------------------------------------------ 15 | void setup() { 16 | Wire.begin(); 17 | Wire.setClock(400000L); 18 | 19 | #if RST_PIN >= 0 20 | oled.begin(&SH1106_128x64, I2C_ADDRESS, RST_PIN); 21 | #else // RST_PIN >= 0 22 | oled.begin(&SH1106_128x64, I2C_ADDRESS); 23 | #endif // RST_PIN >= 0 24 | 25 | oled.setFont(Adafruit5x7); 26 | 27 | uint32_t m = micros(); 28 | oled.clear(); 29 | oled.println("Hello world!"); 30 | oled.println("A long line may be truncated"); 31 | oled.println(); 32 | oled.set2X(); 33 | oled.println("2X demo"); 34 | oled.set1X(); 35 | oled.print("\nmicros: "); 36 | oled.print(micros() - m); 37 | } 38 | //------------------------------------------------------------------------------ 39 | void loop() {} 40 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/extras/cpplint.bat: -------------------------------------------------------------------------------- 1 | sh cpplint.sh 2 | pause 3 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/extras/cpplint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | export PATH=/cygdrive/c/Python27:/cygdrive/c/Python27/DLLs:/cygdrive/c/Python27/Scripts:$PATH 3 | echo $PATH 4 | python cpplint.py --filter=-build/include,-runtime/references,-build/header_guard ../src/*.* ../src/utility/*.* ../src/fonts/allfonts.h 2>cpplint.txt 5 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/extras/openGLCDFontCreator.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/extras/openGLCDFontCreator.zip -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/library.properties: -------------------------------------------------------------------------------- 1 | name=SSD1306Ascii 2 | version=1.3.5 3 | author=Bill Greiman 4 | maintainer=Bill Greiman 5 | sentence=Text display on small monochrome OLED modules. 6 | paragraph=A basic SSD1306 text only library optimized for minimum memory usage. 7 | category=Display 8 | url=https://github.com/greiman/SSD1306Ascii 9 | architectures=* 10 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/src/fonts/SystemFont5x7.h: -------------------------------------------------------------------------------- 1 | #ifndef SYSTEMFONT5x7_H 2 | #define SYSTEMFONT5x7_H 3 | 4 | /* 5 | * added to allow fontname to match header file name. 6 | * as well as keep the old header filename for backward compability 7 | */ 8 | 9 | #define SYSTEMFONT5x7_WIDTH 5 10 | #define SYSTEMFONT5x7_HEIGHT 7 11 | 12 | #define SystemFont5x7 System5x7 13 | 14 | #include "System5x7.h" 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /libraries/SSD1306Ascii/src/fonts/cp437font8x8.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/SSD1306Ascii/src/fonts/cp437font8x8.h -------------------------------------------------------------------------------- /libraries/Simple_FOC/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Antun Skuric 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/hardware_specific_examples/B_G431B_ESC1/build_opt.h: -------------------------------------------------------------------------------- 1 | -DHAL_OPAMP_MODULE_ENABLED -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/hardware_specific_examples/Teensy/Teensy3/bldc_driver_6pwm_standalone/bldc_driver_6pwm_standalone.ino: -------------------------------------------------------------------------------- 1 | // 6pwm standalone example code for Teensy 3.x boards 2 | #include 3 | 4 | 5 | // BLDC driver instance 6 | // using FTM0 timer 7 | BLDCDriver6PWM driver = BLDCDriver6PWM(22,23, 9,10, 6,20, 8); 8 | // using FTM3 timer - available on Teensy3.5 and Teensy3.6 9 | // BLDCDriver6PWM driver = BLDCDriver6PWM(2,14, 7,8, 35,36, 8); 10 | 11 | void setup() { 12 | Serial.begin(115200); 13 | // Enable debugging 14 | // Driver init will show debugging output 15 | SimpleFOCDebug::enable(&Serial); 16 | 17 | // pwm frequency to be used [Hz] 18 | driver.pwm_frequency = 30000; 19 | // dead zone percentage of the duty cycle - default 0.02 - 2% 20 | driver.dead_zone=0.02; 21 | // power supply voltage [V] 22 | driver.voltage_power_supply = 12; 23 | // Max DC voltage allowed - default voltage_power_supply 24 | driver.voltage_limit = 12; 25 | 26 | // driver init 27 | driver.init(); 28 | 29 | // enable driver 30 | driver.enable(); 31 | 32 | _delay(1000); 33 | } 34 | 35 | void loop() { 36 | // setting pwm 37 | // phase A: 3V 38 | // phase B: 6V 39 | // phase C: 5V 40 | driver.setPwm(3,6,5); 41 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/osc_control_examples/osc_esp32_3pwm/layout1.touchosc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Simple_FOC/examples/osc_control_examples/osc_esp32_3pwm/layout1.touchosc -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/osc_control_examples/osc_esp32_fullcontrol/ssid.h_rename_me: -------------------------------------------------------------------------------- 1 | 2 | #define MYSSID "yourssid" 3 | #define MYPASS "yourpassword" 4 | 5 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/osc_control_examples/osc_fullcontrol_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JeongSeoJin/arduino/baf1e8fe3ec184aa3bfad5556f10d0a118ebb36b/libraries/Simple_FOC/examples/osc_control_examples/osc_fullcontrol_screenshot.png -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/communication_test/step_dir/step_dir_listener_simple/step_dir_listener_simple.ino: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple example of reading step/dir communication 3 | * - this example uses hadware interrupts 4 | */ 5 | 6 | #include 7 | 8 | // angle 9 | float received_angle = 0; 10 | 11 | // StepDirListener( step_pin, dir_pin, counter_to_value) 12 | StepDirListener step_dir = StepDirListener(2, 3, 360.0/200.0); // receive the angle in degrees 13 | void onStep() { step_dir.handle(); } 14 | 15 | void setup() { 16 | 17 | Serial.begin(115200); 18 | 19 | // init step and dir pins 20 | step_dir.init(); 21 | // enable interrupts 22 | step_dir.enableInterrupt(onStep); 23 | // attach the variable to be updated on each step (optional) 24 | // the same can be done asynchronously by caling step_dir.getValue(); 25 | step_dir.attach(&received_angle); 26 | 27 | Serial.println(F("Step/Dir listenning.")); 28 | _delay(1000); 29 | } 30 | 31 | void loop() { 32 | Serial.print(received_angle); 33 | Serial.print("\t"); 34 | Serial.println(step_dir.getValue()); 35 | _delay(500); 36 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/driver_standalone_test/bldc_driver_3pwm_standalone/bldc_driver_3pwm_standalone.ino: -------------------------------------------------------------------------------- 1 | // BLDC driver standalone example 2 | #include 3 | 4 | 5 | // BLDC driver instance 6 | BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8); 7 | 8 | void setup() { 9 | 10 | // use monitoring with serial 11 | Serial.begin(115200); 12 | // enable more verbose output for debugging 13 | // comment out if not needed 14 | SimpleFOCDebug::enable(&Serial); 15 | 16 | // pwm frequency to be used [Hz] 17 | // for atmega328 fixed to 32kHz 18 | // esp32/stm32/teensy configurable 19 | driver.pwm_frequency = 50000; 20 | // power supply voltage [V] 21 | driver.voltage_power_supply = 12; 22 | // Max DC voltage allowed - default voltage_power_supply 23 | driver.voltage_limit = 12; 24 | 25 | // driver init 26 | if (!driver.init()){ 27 | Serial.println("Driver init failed!"); 28 | return; 29 | } 30 | 31 | // enable driver 32 | driver.enable(); 33 | Serial.println("Driver ready!"); 34 | _delay(1000); 35 | } 36 | 37 | void loop() { 38 | // setting pwm 39 | // phase A: 3V 40 | // phase B: 6V 41 | // phase C: 5V 42 | driver.setPwm(3,6,5); 43 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/driver_standalone_test/bldc_driver_6pwm_standalone/bldc_driver_6pwm_standalone.ino: -------------------------------------------------------------------------------- 1 | // BLDC driver standalone example 2 | #include 3 | 4 | // BLDC driver instance 5 | BLDCDriver6PWM driver = BLDCDriver6PWM(5, 6, 9,10, 3, 11, 8); 6 | 7 | void setup() { 8 | 9 | // use monitoring with serial 10 | Serial.begin(115200); 11 | // enable more verbose output for debugging 12 | // comment out if not needed 13 | SimpleFOCDebug::enable(&Serial); 14 | 15 | // pwm frequency to be used [Hz] 16 | // for atmega328 fixed to 32kHz 17 | // esp32/stm32/teensy configurable 18 | driver.pwm_frequency = 50000; 19 | // power supply voltage [V] 20 | driver.voltage_power_supply = 12; 21 | // Max DC voltage allowed - default voltage_power_supply 22 | driver.voltage_limit = 12; 23 | // daad_zone [0,1] - default 0.02f - 2% 24 | driver.dead_zone = 0.05f; 25 | 26 | // driver init 27 | if (!driver.init()){ 28 | Serial.println("Driver init failed!"); 29 | return; 30 | } 31 | 32 | // enable driver 33 | driver.enable(); 34 | Serial.println("Driver ready!"); 35 | _delay(1000); 36 | } 37 | 38 | void loop() { 39 | // setting pwm 40 | // phase A: 3V 41 | // phase B: 6V 42 | // phase C: 5V 43 | driver.setPwm(3,6,5); 44 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/driver_standalone_test/stepper_driver_4pwm_standalone/stepper_driver_4pwm_standalone.ino: -------------------------------------------------------------------------------- 1 | // Stepper driver standalone example 2 | #include 3 | 4 | 5 | // Stepper driver instance 6 | // StepperDriver4PWM(ph1A, ph1B, ph2A, ph2B, (en1, en2 optional)) 7 | StepperDriver4PWM driver = StepperDriver4PWM(5, 6, 9,10, 7, 8); 8 | 9 | void setup() { 10 | 11 | // use monitoring with serial 12 | Serial.begin(115200); 13 | // enable more verbose output for debugging 14 | // comment out if not needed 15 | SimpleFOCDebug::enable(&Serial); 16 | 17 | // pwm frequency to be used [Hz] 18 | // for atmega328 fixed to 32kHz 19 | // esp32/stm32/teensy configurable 20 | driver.pwm_frequency = 30000; 21 | // power supply voltage [V] 22 | driver.voltage_power_supply = 12; 23 | // Max DC voltage allowed - default voltage_power_supply 24 | driver.voltage_limit = 12; 25 | 26 | // driver init 27 | if (!driver.init()){ 28 | Serial.println("Driver init failed!"); 29 | return; 30 | } 31 | 32 | // enable driver 33 | driver.enable(); 34 | Serial.println("Driver ready!"); 35 | _delay(1000); 36 | } 37 | 38 | void loop() { 39 | // setting pwm 40 | // phase A: 3V 41 | // phase B: 6V 42 | driver.setPwm(3,6); 43 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/sensor_test/encoder/encoder_example/encoder_example.ino: -------------------------------------------------------------------------------- 1 | /** 2 | * Encoder example code 3 | * 4 | * This is a code intended to test the encoder connections and to demonstrate the encoder setup. 5 | * 6 | */ 7 | 8 | #include 9 | 10 | 11 | Encoder encoder = Encoder(2, 3, 8192); 12 | // interrupt routine intialisation 13 | void doA(){encoder.handleA();} 14 | void doB(){encoder.handleB();} 15 | 16 | void setup() { 17 | // monitoring port 18 | Serial.begin(115200); 19 | 20 | // enable/disable quadrature mode 21 | encoder.quadrature = Quadrature::ON; 22 | 23 | // check if you need internal pullups 24 | encoder.pullup = Pullup::USE_EXTERN; 25 | 26 | // initialise encoder hardware 27 | encoder.init(); 28 | // hardware interrupt enable 29 | encoder.enableInterrupts(doA, doB); 30 | 31 | Serial.println("Encoder ready"); 32 | _delay(1000); 33 | } 34 | 35 | void loop() { 36 | // iterative function updating the sensor internal variables 37 | // it is usually called in motor.loopFOC() 38 | // not doing much for the encoder though 39 | encoder.update(); 40 | // display the angle and the angular velocity to the terminal 41 | Serial.print(encoder.getAngle()); 42 | Serial.print("\t"); 43 | Serial.println(encoder.getVelocity()); 44 | } 45 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/sensor_test/hall_sensors/hall_sensor_example/hall_sensor_example.ino: -------------------------------------------------------------------------------- 1 | /** 2 | * Hall sensor example code 3 | * 4 | * This is a code intended to test the hall sensors connections and to demonstrate the hall sensor setup. 5 | * 6 | */ 7 | 8 | #include 9 | 10 | // Hall sensor instance 11 | // HallSensor(int hallA, int hallB , int cpr, int index) 12 | // - hallA, hallB, hallC - HallSensor A, B and C pins 13 | // - pp - pole pairs 14 | HallSensor sensor = HallSensor(2, 3, 4, 14); 15 | 16 | void setup() { 17 | // monitoring port 18 | Serial.begin(115200); 19 | 20 | // check if you need internal pullups 21 | sensor.pullup = Pullup::USE_EXTERN; 22 | 23 | // initialise encoder hardware 24 | sensor.init(); 25 | 26 | Serial.println("Sensor ready"); 27 | _delay(1000); 28 | } 29 | 30 | void loop() { 31 | // iterative function updating the sensor internal variables 32 | // it is usually called in motor.loopFOC() 33 | sensor.update(); 34 | // display the angle and the angular velocity to the terminal 35 | Serial.print(sensor.getAngle()); 36 | Serial.print("\t"); 37 | Serial.println(sensor.getVelocity()); 38 | delay(100); 39 | } 40 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/sensor_test/magnetic_sensors/magnetic_sensor_i2c/magnetic_sensor_i2c_dual_bus_examples/stm32_i2c_dual_bus_example/stm32_i2c_dual_bus_example.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | /** Annoyingly some i2c sensors (e.g. AS5600) have a fixed chip address. This means only one of these devices can be addressed on a single bus 4 | * This example shows how a second i2c bus can be used to communicate with a second sensor. 5 | */ 6 | 7 | MagneticSensorI2C sensor0 = MagneticSensorI2C(AS5600_I2C); 8 | MagneticSensorI2C sensor1 = MagneticSensorI2C(AS5600_I2C); 9 | 10 | // example of stm32 defining 2nd bus 11 | TwoWire Wire1(PB11, PB10); 12 | 13 | 14 | void setup() { 15 | 16 | Serial.begin(115200); 17 | _delay(750); 18 | 19 | Wire.setClock(400000); 20 | Wire1.setClock(400000); 21 | 22 | sensor0.init(); 23 | sensor1.init(&Wire1); 24 | } 25 | 26 | void loop() { 27 | // iterative function updating the sensor internal variables 28 | // it is usually called in motor.loopFOC() 29 | // this function reads the sensor hardware and 30 | // has to be called before getAngle nad getVelocity 31 | sensor0.update(); 32 | sensor1.update(); 33 | 34 | _delay(200); 35 | Serial.print(sensor0.getAngle()); 36 | Serial.print(" - "); 37 | Serial.print(sensor1.getAngle()); 38 | Serial.println(); 39 | } 40 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/sensor_test/magnetic_sensors/magnetic_sensor_spi/magnetic_sensor_spi_alternative_examples/stm32_spi_alt_example/stm32_spi_alt_example.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // MagneticSensorSPI(int cs, float _cpr, int _angle_register) 4 | // config - SPI config 5 | // cs - SPI chip select pin 6 | MagneticSensorSPI sensor = MagneticSensorSPI(AS5147_SPI, PA15); 7 | 8 | // these are valid pins (mosi, miso, sclk) for 2nd SPI bus on storm32 board (stm32f107rc) 9 | SPIClass SPI_2(PB15, PB14, PB13); 10 | 11 | void setup() { 12 | // monitoring port 13 | Serial.begin(115200); 14 | 15 | // initialise magnetic sensor hardware 16 | sensor.init(&SPI_2); 17 | 18 | Serial.println("Sensor ready"); 19 | _delay(1000); 20 | } 21 | 22 | void loop() { 23 | // iterative function updating the sensor internal variables 24 | // it is usually called in motor.loopFOC() 25 | // this function reads the sensor hardware and 26 | // has to be called before getAngle nad getVelocity 27 | sensor.update(); 28 | // display the angle and the angular velocity to the terminal 29 | Serial.print(sensor.getAngle()); 30 | Serial.print("\t"); 31 | Serial.println(sensor.getVelocity()); 32 | } 33 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/examples/utils/sensor_test/magnetic_sensors/magnetic_sensor_spi/magnetic_sensor_spi_example/magnetic_sensor_spi_example.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // MagneticSensorSPI(MagneticSensorSPIConfig_s config, int cs) 4 | // config - SPI config 5 | // cs - SPI chip select pin 6 | // magnetic sensor instance - SPI 7 | MagneticSensorSPI sensor = MagneticSensorSPI(AS5147_SPI, 10); 8 | // alternative constructor (chipselsect, bit_resolution, angle_read_register, ) 9 | // MagneticSensorSPI sensor = MagneticSensorSPI(10, 14, 0x3FFF); 10 | 11 | void setup() { 12 | // monitoring port 13 | Serial.begin(115200); 14 | 15 | // initialise magnetic sensor hardware 16 | sensor.init(); 17 | 18 | Serial.println("Sensor ready"); 19 | _delay(1000); 20 | } 21 | 22 | void loop() { 23 | // iterative function updating the sensor internal variables 24 | // it is usually called in motor.loopFOC() 25 | // this function reads the sensor hardware and 26 | // has to be called before getAngle nad getVelocity 27 | sensor.update(); 28 | // display the angle and the angular velocity to the terminal 29 | Serial.print(sensor.getAngle()); 30 | Serial.print("\t"); 31 | Serial.println(sensor.getVelocity()); 32 | } 33 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/library.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": { 3 | "libArchive": false 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/library.properties: -------------------------------------------------------------------------------- 1 | name=Simple FOC 2 | version=2.3.4 3 | author=Simplefoc 4 | maintainer=Simplefoc 5 | sentence=A library demistifying FOC for BLDC motors 6 | paragraph=Simple library intended for hobby comunity to run the BLDC and Stepper motor using FOC algorithm. It is intended to support as many BLDC/Stepper motor+sensor+driver combinations as possible and in the same time maintain simplicity of usage. Library supports Arudino devices such as Arduino UNO, MEGA, NANO and similar, stm32 boards such as Nucleo and Bluepill, ESP32 and Teensy boards. 7 | category=Device Control 8 | url=https://docs.simplefoc.com 9 | architectures=* 10 | includes=SimpleFOC.h 11 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/base_classes/BLDCDriver.h: -------------------------------------------------------------------------------- 1 | #ifndef BLDCDRIVER_H 2 | #define BLDCDRIVER_H 3 | 4 | #include "Arduino.h" 5 | #include "FOCDriver.h" 6 | 7 | class BLDCDriver: public FOCDriver{ 8 | public: 9 | 10 | float dc_a; //!< currently set duty cycle on phaseA 11 | float dc_b; //!< currently set duty cycle on phaseB 12 | float dc_c; //!< currently set duty cycle on phaseC 13 | 14 | /** 15 | * Set phase voltages to the hardware 16 | * 17 | * @param Ua - phase A voltage 18 | * @param Ub - phase B voltage 19 | * @param Uc - phase C voltage 20 | */ 21 | virtual void setPwm(float Ua, float Ub, float Uc) = 0; 22 | 23 | /** 24 | * Set phase state, enable/disable 25 | * 26 | * @param sc - phase A state : active / disabled ( high impedance ) 27 | * @param sb - phase B state : active / disabled ( high impedance ) 28 | * @param sa - phase C state : active / disabled ( high impedance ) 29 | */ 30 | virtual void setPhaseState(PhaseState sa, PhaseState sb, PhaseState sc) = 0; 31 | 32 | /** driver type getter function */ 33 | virtual DriverType type() override { return DriverType::BLDC; }; 34 | }; 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/base_classes/StepperDriver.h: -------------------------------------------------------------------------------- 1 | #ifndef STEPPERDRIVER_H 2 | #define STEPPERDRIVER_H 3 | 4 | #include "Arduino.h" 5 | #include "FOCDriver.h" 6 | 7 | class StepperDriver: public FOCDriver{ 8 | public: 9 | 10 | /** 11 | * Set phase voltages to the hardware 12 | * 13 | * @param Ua phase A voltage 14 | * @param Ub phase B voltage 15 | */ 16 | virtual void setPwm(float Ua, float Ub) = 0; 17 | 18 | /** 19 | * Set phase state, enable/disable 20 | * 21 | * @param sc - phase A state : active / disabled ( high impedance ) 22 | * @param sb - phase B state : active / disabled ( high impedance ) 23 | */ 24 | virtual void setPhaseState(PhaseState sa, PhaseState sb) = 0; 25 | 26 | /** driver type getter function */ 27 | virtual DriverType type() override { return DriverType::Stepper; } ; 28 | }; 29 | 30 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/lowpass_filter.cpp: -------------------------------------------------------------------------------- 1 | #include "lowpass_filter.h" 2 | 3 | LowPassFilter::LowPassFilter(float time_constant) 4 | : Tf(time_constant) 5 | , y_prev(0.0f) 6 | { 7 | timestamp_prev = _micros(); 8 | } 9 | 10 | 11 | float LowPassFilter::operator() (float x) 12 | { 13 | unsigned long timestamp = _micros(); 14 | float dt = (timestamp - timestamp_prev)*1e-6f; 15 | 16 | if (dt < 0.0f ) dt = 1e-3f; 17 | else if(dt > 0.3f) { 18 | y_prev = x; 19 | timestamp_prev = timestamp; 20 | return x; 21 | } 22 | 23 | float alpha = Tf/(Tf + dt); 24 | float y = alpha*y_prev + (1.0f - alpha)*x; 25 | y_prev = y; 26 | timestamp_prev = timestamp; 27 | return y; 28 | } 29 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/lowpass_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef LOWPASS_FILTER_H 2 | #define LOWPASS_FILTER_H 3 | 4 | 5 | #include "time_utils.h" 6 | #include "foc_utils.h" 7 | 8 | /** 9 | * Low pass filter class 10 | */ 11 | class LowPassFilter 12 | { 13 | public: 14 | /** 15 | * @param Tf - Low pass filter time constant 16 | */ 17 | LowPassFilter(float Tf); 18 | ~LowPassFilter() = default; 19 | 20 | float operator() (float x); 21 | float Tf; //!< Low pass filter time constant 22 | 23 | protected: 24 | unsigned long timestamp_prev; //!< Last execution timestamp 25 | float y_prev; //!< filtered value in previous execution step 26 | }; 27 | 28 | #endif // LOWPASS_FILTER_H -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/pid.h: -------------------------------------------------------------------------------- 1 | #ifndef PID_H 2 | #define PID_H 3 | 4 | 5 | #include "time_utils.h" 6 | #include "foc_utils.h" 7 | 8 | /** 9 | * PID controller class 10 | */ 11 | class PIDController 12 | { 13 | public: 14 | /** 15 | * 16 | * @param P - Proportional gain 17 | * @param I - Integral gain 18 | * @param D - Derivative gain 19 | * @param ramp - Maximum speed of change of the output value 20 | * @param limit - Maximum output value 21 | */ 22 | PIDController(float P, float I, float D, float ramp, float limit); 23 | ~PIDController() = default; 24 | 25 | float operator() (float error); 26 | void reset(); 27 | 28 | float P; //!< Proportional gain 29 | float I; //!< Integral gain 30 | float D; //!< Derivative gain 31 | float output_ramp; //!< Maximum speed of change of the output value 32 | float limit; //!< Maximum output value 33 | 34 | protected: 35 | float error_prev; //!< last tracking error value 36 | float output_prev; //!< last pid output value 37 | float integral_prev; //!< last integral component value 38 | unsigned long timestamp_prev; //!< Last execution timestamp 39 | }; 40 | 41 | #endif // PID_H -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/time_utils.cpp: -------------------------------------------------------------------------------- 1 | #include "time_utils.h" 2 | 3 | // function buffering delay() 4 | // arduino uno function doesn't work well with interrupts 5 | void _delay(unsigned long ms){ 6 | #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__) 7 | // if arduino uno and other atmega328p chips 8 | // use while instad of delay, 9 | // due to wrong measurement based on changed timer0 10 | unsigned long t = _micros() + ms*1000; 11 | while( _micros() < t ){}; 12 | #else 13 | // regular micros 14 | delay(ms); 15 | #endif 16 | } 17 | 18 | 19 | // function buffering _micros() 20 | // arduino function doesn't work well with interrupts 21 | unsigned long _micros(){ 22 | #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__) 23 | // if arduino uno and other atmega328p chips 24 | //return the value based on the prescaler 25 | if((TCCR0B & 0b00000111) == 0x01) return (micros()/32); 26 | else return (micros()); 27 | #else 28 | // regular micros 29 | return micros(); 30 | #endif 31 | } 32 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/common/time_utils.h: -------------------------------------------------------------------------------- 1 | #ifndef TIME_UTILS_H 2 | #define TIME_UTILS_H 3 | 4 | #include "foc_utils.h" 5 | 6 | /** 7 | * Function implementing delay() function in milliseconds 8 | * - blocking function 9 | * - hardware specific 10 | 11 | * @param ms number of milliseconds to wait 12 | */ 13 | void _delay(unsigned long ms); 14 | 15 | /** 16 | * Function implementing timestamp getting function in microseconds 17 | * hardware specific 18 | */ 19 | unsigned long _micros(); 20 | 21 | 22 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/communication/StepDirListener.cpp: -------------------------------------------------------------------------------- 1 | #include "StepDirListener.h" 2 | 3 | StepDirListener::StepDirListener(int _pinStep, int _pinDir, float _counter_to_value){ 4 | pin_step = _pinStep; 5 | pin_dir = _pinDir; 6 | counter_to_value = _counter_to_value; 7 | } 8 | 9 | void StepDirListener::init(){ 10 | pinMode(pin_dir, INPUT); 11 | pinMode(pin_step, INPUT_PULLUP); 12 | count = 0; 13 | } 14 | 15 | void StepDirListener::enableInterrupt(void (*doA)()){ 16 | attachInterrupt(digitalPinToInterrupt(pin_step), doA, polarity); 17 | } 18 | 19 | void StepDirListener::attach(float* variable){ 20 | attached_variable = variable; 21 | } 22 | 23 | void StepDirListener::handle(){ 24 | // read step status 25 | //bool step = digitalRead(pin_step); 26 | // update counter only on rising edge 27 | //if(step && step != step_active){ 28 | if(digitalRead(pin_dir)) 29 | count++; 30 | else 31 | count--; 32 | //} 33 | //step_active = step; 34 | // if attached variable update it 35 | if(attached_variable) *attached_variable = getValue(); 36 | } 37 | // calculate the position from counter 38 | float StepDirListener::getValue(){ 39 | return (float) count * counter_to_value; 40 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/due_mcu.cpp: -------------------------------------------------------------------------------- 1 | #include "../hardware_api.h" 2 | 3 | #if defined(__arm__) && defined(__SAM3X8E__) 4 | 5 | #define _ADC_VOLTAGE 3.3f 6 | #define _ADC_RESOLUTION 1024.0f 7 | 8 | 9 | // function reading an ADC value and returning the read voltage 10 | void* _configureADCInline(const void* driver_params, const int pinA,const int pinB,const int pinC){ 11 | _UNUSED(driver_params); 12 | 13 | if( _isset(pinA) ) pinMode(pinA, INPUT); 14 | if( _isset(pinB) ) pinMode(pinB, INPUT); 15 | if( _isset(pinC) ) pinMode(pinC, INPUT); 16 | 17 | GenericCurrentSenseParams* params = new GenericCurrentSenseParams { 18 | .pins = { pinA, pinB, pinC }, 19 | .adc_voltage_conv = (_ADC_VOLTAGE)/(_ADC_RESOLUTION) 20 | }; 21 | 22 | return params; 23 | } 24 | 25 | 26 | 27 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/esp32/esp32_adc_driver.h: -------------------------------------------------------------------------------- 1 | #ifndef SIMPLEFOC_ESP32_HAL_ADC_DRIVER_H_ 2 | #define SIMPLEFOC_ESP32_HAL_ADC_DRIVER_H_ 3 | 4 | #if defined(ESP_H) && defined(ARDUINO_ARCH_ESP32) 5 | 6 | /** 7 | * Get ADC value for pin 8 | * @param pin - pin number 9 | * @return ADC value (0 - 4095) 10 | * */ 11 | uint16_t adcRead(uint8_t pin); 12 | 13 | /** 14 | * Initialize ADC pin 15 | * @param pin - pin number 16 | * 17 | * @return true if success 18 | * false if pin is not an ADC pin 19 | */ 20 | bool adcInit(uint8_t pin); 21 | 22 | 23 | #endif /* SIMPLEFOC_ESP32_HAL_ADC_DRIVER_H_ */ 24 | #endif /* ESP32 */ -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/esp32/esp32_mcu.cpp: -------------------------------------------------------------------------------- 1 | #include "esp32_mcu.h" 2 | 3 | #if defined(ESP_H) && defined(ARDUINO_ARCH_ESP32) 4 | 5 | /** 6 | * Inline adc reading implementation 7 | */ 8 | // function reading an ADC value and returning the read voltage 9 | float _readADCVoltageInline(const int pinA, const void* cs_params){ 10 | uint32_t raw_adc = adcRead(pinA); 11 | return raw_adc * ((ESP32CurrentSenseParams*)cs_params)->adc_voltage_conv; 12 | } 13 | 14 | // function reading an ADC value and returning the read voltage 15 | void* _configureADCInline(const void* driver_params, const int pinA, const int pinB, const int pinC){ 16 | 17 | ESP32CurrentSenseParams* params = new ESP32CurrentSenseParams { 18 | .pins = { pinA, pinB, pinC }, 19 | .adc_voltage_conv = (_ADC_VOLTAGE)/(_ADC_RESOLUTION) 20 | }; 21 | 22 | // initialize the ADC pins 23 | // fail if the pin is not an ADC pin 24 | for (int i = 0; i < 3; i++){ 25 | if(_isset(params->pins[i])){ 26 | pinMode(params->pins[i], ANALOG); 27 | if(!adcInit(params->pins[i])) { 28 | SIMPLEFOC_ESP32_CS_DEBUG("ERROR: Failed to initialise ADC pin: "+String(params->pins[i]) + String(", maybe not an ADC pin?")); 29 | return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED; 30 | } 31 | } 32 | } 33 | 34 | return params; 35 | } 36 | 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/esp32/esp32_mcu.h: -------------------------------------------------------------------------------- 1 | #ifndef ESP32_MCU_CURRENT_SENSING_H 2 | #define ESP32_MCU_CURRENT_SENSING_H 3 | 4 | #include "../../hardware_api.h" 5 | 6 | #if defined(ESP_H) && defined(ARDUINO_ARCH_ESP32) 7 | 8 | 9 | #include "../../../drivers/hardware_api.h" 10 | #include "esp32_adc_driver.h" 11 | 12 | 13 | // esp32 current sense parameters 14 | typedef struct ESP32CurrentSenseParams { 15 | int pins[3]; 16 | float adc_voltage_conv; 17 | int adc_buffer[3] = {}; 18 | int buffer_index = 0; 19 | int no_adc_channels = 0; 20 | } ESP32CurrentSenseParams; 21 | 22 | // macros for debugging wuing the simplefoc debug system 23 | #define SIMPLEFOC_ESP32_CS_DEBUG(str)\ 24 | SimpleFOCDebug::println( "ESP32-CS: "+ String(str));\ 25 | 26 | #define CHECK_CS_ERR(func_call, message) \ 27 | if ((func_call) != ESP_OK) { \ 28 | SIMPLEFOC_ESP32_CS_DEBUG("ERROR - " + String(message)); \ 29 | return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED; \ 30 | } 31 | 32 | 33 | #define _ADC_VOLTAGE 3.3f 34 | #define _ADC_RESOLUTION 4095.0f 35 | 36 | #endif // ESP_H && ARDUINO_ARCH_ESP32 37 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/samd/samd_mcu.cpp: -------------------------------------------------------------------------------- 1 | #include "../../hardware_api.h" 2 | 3 | #if defined(_SAMD21_)|| defined(_SAMD51_) || defined(_SAME51_) 4 | 5 | #define _ADC_VOLTAGE 3.3f 6 | #define _ADC_RESOLUTION 1024.0f 7 | 8 | // function reading an ADC value and returning the read voltage 9 | void* _configureADCInline(const void* driver_params, const int pinA,const int pinB,const int pinC){ 10 | _UNUSED(driver_params); 11 | 12 | if( _isset(pinA) ) pinMode(pinA, INPUT); 13 | if( _isset(pinB) ) pinMode(pinB, INPUT); 14 | if( _isset(pinC) ) pinMode(pinC, INPUT); 15 | 16 | GenericCurrentSenseParams* params = new GenericCurrentSenseParams { 17 | .pins = { pinA, pinB, pinC }, 18 | .adc_voltage_conv = (_ADC_VOLTAGE)/(_ADC_RESOLUTION) 19 | }; 20 | 21 | return params; 22 | } 23 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/b_g431/b_g431_hal.h: -------------------------------------------------------------------------------- 1 | #ifndef B_G431_ESC1_HAL 2 | #define B_G431_ESC1_HAL 3 | 4 | #if defined(ARDUINO_B_G431B_ESC1) 5 | 6 | #include 7 | #include 8 | 9 | void MX_GPIO_Init(void); 10 | void MX_DMA_Init(void); 11 | void MX_ADC1_Init(ADC_HandleTypeDef* hadc1); 12 | void MX_ADC2_Init(ADC_HandleTypeDef* hadc2); 13 | void MX_OPAMP1_Init(OPAMP_HandleTypeDef* hopamp); 14 | void MX_OPAMP2_Init(OPAMP_HandleTypeDef* hopamp); 15 | void MX_OPAMP3_Init(OPAMP_HandleTypeDef* hopamp); 16 | #endif 17 | 18 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32_mcu.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "../../hardware_api.h" 3 | 4 | #if defined(_STM32_DEF_) and !defined(ARDUINO_B_G431B_ESC1) 5 | 6 | #include "stm32_mcu.h" 7 | 8 | #define _ADC_VOLTAGE 3.3f 9 | #define _ADC_RESOLUTION 1024.0f 10 | 11 | // function reading an ADC value and returning the read voltage 12 | void* _configureADCInline(const void* driver_params, const int pinA,const int pinB,const int pinC){ 13 | _UNUSED(driver_params); 14 | 15 | if( _isset(pinA) ) pinMode(pinA, INPUT); 16 | if( _isset(pinB) ) pinMode(pinB, INPUT); 17 | if( _isset(pinC) ) pinMode(pinC, INPUT); 18 | 19 | Stm32CurrentSenseParams* params = new Stm32CurrentSenseParams { 20 | .pins = { pinA, pinB, pinC }, 21 | .adc_voltage_conv = (_ADC_VOLTAGE)/(_ADC_RESOLUTION) 22 | }; 23 | 24 | return params; 25 | } 26 | 27 | // function reading an ADC value and returning the read voltage 28 | __attribute__((weak)) float _readADCVoltageInline(const int pinA, const void* cs_params){ 29 | uint32_t raw_adc = analogRead(pinA); 30 | return raw_adc * ((Stm32CurrentSenseParams*)cs_params)->adc_voltage_conv; 31 | } 32 | 33 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32_mcu.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef STM32_CURRENTSENSE_MCU_DEF 3 | #define STM32_CURRENTSENSE_MCU_DEF 4 | #include "../../hardware_api.h" 5 | #include "../../../common/foc_utils.h" 6 | 7 | #if defined(_STM32_DEF_) 8 | 9 | // generic implementation of the hardware specific structure 10 | // containing all the necessary current sense parameters 11 | // will be returned as a void pointer from the _configureADCx functions 12 | // will be provided to the _readADCVoltageX() as a void pointer 13 | typedef struct Stm32CurrentSenseParams { 14 | int pins[3] = {(int)NOT_SET}; 15 | float adc_voltage_conv; 16 | ADC_HandleTypeDef* adc_handle = NP; 17 | HardwareTimer* timer_handle = NP; 18 | } Stm32CurrentSenseParams; 19 | 20 | #endif 21 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32f1/stm32f1_hal.h: -------------------------------------------------------------------------------- 1 | #ifndef STM32F1_LOWSIDE_HAL 2 | #define STM32F1_LOWSIDE_HAL 3 | 4 | #include "Arduino.h" 5 | 6 | #if defined(STM32F1xx) 7 | #include "stm32f1xx_hal.h" 8 | #include "../../../../common/foc_utils.h" 9 | #include "../../../../drivers/hardware_specific/stm32/stm32_mcu.h" 10 | #include "../stm32_mcu.h" 11 | 12 | int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params); 13 | void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC); 14 | 15 | #endif 16 | 17 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32f4/stm32f4_hal.h: -------------------------------------------------------------------------------- 1 | #ifndef STM32F4_LOWSIDE_HAL 2 | #define STM32F4_LOWSIDE_HAL 3 | 4 | #include "Arduino.h" 5 | 6 | #if defined(STM32F4xx) 7 | #include "stm32f4xx_hal.h" 8 | #include "../../../../common/foc_utils.h" 9 | #include "../../../../drivers/hardware_specific/stm32/stm32_mcu.h" 10 | #include "../stm32_mcu.h" 11 | #include "stm32f4_utils.h" 12 | 13 | int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params); 14 | void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC); 15 | 16 | #endif 17 | 18 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32f4/stm32f4_utils.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef STM32F4_UTILS_HAL 3 | #define STM32F4_UTILS_HAL 4 | 5 | #include "Arduino.h" 6 | 7 | #if defined(STM32F4xx) 8 | 9 | #define _TRGO_NOT_AVAILABLE 12345 10 | 11 | 12 | /* Exported Functions */ 13 | /** 14 | * @brief Return ADC HAL channel linked to a PinName 15 | * @param pin: PinName 16 | * @retval Valid HAL channel 17 | */ 18 | uint32_t _getADCChannel(PinName pin); 19 | 20 | // timer to injected TRGO 21 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/e156c32db24d69cb4818208ccc28894e2f427cfa/system/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h#L179 22 | uint32_t _timerToInjectedTRGO(HardwareTimer* timer); 23 | 24 | // timer to regular TRGO 25 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/e156c32db24d69cb4818208ccc28894e2f427cfa/system/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h#L331 26 | uint32_t _timerToRegularTRGO(HardwareTimer* timer); 27 | 28 | // function returning index of the ADC instance 29 | int _adcToIndex(ADC_HandleTypeDef *AdcHandle); 30 | int _adcToIndex(ADC_TypeDef *AdcHandle); 31 | 32 | #endif 33 | 34 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32f7/stm32f7_hal.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Arduino.h" 4 | 5 | #if defined(STM32F7xx) 6 | #include "stm32f7xx_hal.h" 7 | #include "../../../../common/foc_utils.h" 8 | #include "../../../../drivers/hardware_specific/stm32/stm32_mcu.h" 9 | #include "../stm32_mcu.h" 10 | #include "stm32f7_utils.h" 11 | 12 | int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params); 13 | void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC); 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32f7/stm32f7_utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Arduino.h" 4 | 5 | #if defined(STM32F7xx) 6 | 7 | #define _TRGO_NOT_AVAILABLE 12345 8 | 9 | 10 | /* Exported Functions */ 11 | /** 12 | * @brief Return ADC HAL channel linked to a PinName 13 | * @param pin: PinName 14 | * @retval Valid HAL channel 15 | */ 16 | uint32_t _getADCChannel(PinName pin); 17 | 18 | // timer to injected TRGO 19 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/e156c32db24d69cb4818208ccc28894e2f427cfa/system/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h#L179 20 | uint32_t _timerToInjectedTRGO(HardwareTimer* timer); 21 | 22 | // timer to regular TRGO 23 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/e156c32db24d69cb4818208ccc28894e2f427cfa/system/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h#L331 24 | uint32_t _timerToRegularTRGO(HardwareTimer* timer); 25 | 26 | // function returning index of the ADC instance 27 | int _adcToIndex(ADC_HandleTypeDef *AdcHandle); 28 | int _adcToIndex(ADC_TypeDef *AdcHandle); 29 | 30 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32g4/stm32g4_hal.h: -------------------------------------------------------------------------------- 1 | #ifndef STM32G4_LOWSIDE_HAL 2 | #define STM32G4_LOWSIDE_HAL 3 | 4 | #include "Arduino.h" 5 | 6 | #if defined(STM32G4xx) && !defined(ARDUINO_B_G431B_ESC1) 7 | 8 | #include "stm32g4xx_hal.h" 9 | #include "../../../../common/foc_utils.h" 10 | #include "../../../../drivers/hardware_specific/stm32/stm32_mcu.h" 11 | #include "../stm32_mcu.h" 12 | #include "stm32g4_utils.h" 13 | 14 | int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params); 15 | void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC); 16 | 17 | #endif 18 | 19 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32g4/stm32g4_utils.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef STM32G4_UTILS_HAL 3 | #define STM32G4_UTILS_HAL 4 | 5 | #include "Arduino.h" 6 | 7 | #if defined(STM32G4xx) && !defined(ARDUINO_B_G431B_ESC1) 8 | 9 | #define _TRGO_NOT_AVAILABLE 12345 10 | 11 | 12 | /* Exported Functions */ 13 | /** 14 | * @brief Return ADC HAL channel linked to a PinName 15 | * @param pin: PinName 16 | * @retval Valid HAL channel 17 | */ 18 | uint32_t _getADCChannel(PinName pin); 19 | 20 | // timer to injected TRGO 21 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/6588dee03382e73ed42c4a5e473900ab3b79d6e4/system/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_adc_ex.h#L217 22 | uint32_t _timerToInjectedTRGO(HardwareTimer* timer); 23 | 24 | // timer to regular TRGO 25 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/6588dee03382e73ed42c4a5e473900ab3b79d6e4/system/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_adc.h#L519 26 | uint32_t _timerToRegularTRGO(HardwareTimer* timer); 27 | 28 | // function returning index of the ADC instance 29 | int _adcToIndex(ADC_HandleTypeDef *AdcHandle); 30 | int _adcToIndex(ADC_TypeDef *AdcHandle); 31 | 32 | #endif 33 | 34 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32l4/stm32l4_hal.h: -------------------------------------------------------------------------------- 1 | #ifndef STM32L4_LOWSIDE_HAL 2 | #define STM32L4_LOWSIDE_HAL 3 | 4 | #include "Arduino.h" 5 | 6 | #if defined(STM32L4xx) 7 | 8 | #include "stm32l4xx_hal.h" 9 | #include "../../../../common/foc_utils.h" 10 | #include "../../../../drivers/hardware_specific/stm32/stm32_mcu.h" 11 | #include "../stm32_mcu.h" 12 | #include "stm32l4_utils.h" 13 | 14 | int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params); 15 | void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC); 16 | 17 | #endif 18 | 19 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/stm32/stm32l4/stm32l4_utils.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef STM32L4_UTILS_HAL 3 | #define STM32L4_UTILS_HAL 4 | 5 | #include "Arduino.h" 6 | 7 | #if defined(STM32L4xx) 8 | 9 | #define _TRGO_NOT_AVAILABLE 12345 10 | 11 | 12 | /* Exported Functions */ 13 | /** 14 | * @brief Return ADC HAL channel linked to a PinName 15 | * @param pin: PinName 16 | * @retval Valid HAL channel 17 | */ 18 | uint32_t _getADCChannel(PinName pin); 19 | 20 | // timer to injected TRGO 21 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/6588dee03382e73ed42c4a5e473900ab3b79d6e4/system/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_adc_ex.h#L217 22 | uint32_t _timerToInjectedTRGO(HardwareTimer* timer); 23 | 24 | // timer to regular TRGO 25 | // https://github.com/stm32duino/Arduino_Core_STM32/blob/6588dee03382e73ed42c4a5e473900ab3b79d6e4/system/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_adc.h#L519 26 | uint32_t _timerToRegularTRGO(HardwareTimer* timer); 27 | 28 | // function returning index of the ADC instance 29 | int _adcToIndex(ADC_HandleTypeDef *AdcHandle); 30 | int _adcToIndex(ADC_TypeDef *AdcHandle); 31 | 32 | #endif 33 | 34 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/current_sense/hardware_specific/teensy/teensy_mcu.cpp: -------------------------------------------------------------------------------- 1 | #include "../../hardware_api.h" 2 | 3 | #if defined(__arm__) && defined(CORE_TEENSY) 4 | 5 | #define _ADC_VOLTAGE 3.3f 6 | #define _ADC_RESOLUTION 1024.0f 7 | 8 | // function reading an ADC value and returning the read voltage 9 | void* _configureADCInline(const void* driver_params, const int pinA,const int pinB,const int pinC){ 10 | _UNUSED(driver_params); 11 | 12 | if( _isset(pinA) ) pinMode(pinA, INPUT); 13 | if( _isset(pinB) ) pinMode(pinB, INPUT); 14 | if( _isset(pinC) ) pinMode(pinC, INPUT); 15 | 16 | GenericCurrentSenseParams* params = new GenericCurrentSenseParams { 17 | .pins = { pinA, pinB, pinC }, 18 | .adc_voltage_conv = (_ADC_VOLTAGE)/(_ADC_RESOLUTION) 19 | }; 20 | 21 | return params; 22 | } 23 | 24 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/drivers/hardware_specific/renesas/renesas.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | #include "../../hardware_api.h" 5 | 6 | 7 | #if defined(ARDUINO_UNOR4_WIFI) || defined(ARDUINO_UNOR4_MINIMA) 8 | 9 | // uncomment to enable debug output from Renesas driver 10 | // can set this as build-flag in Arduino IDE or PlatformIO 11 | #define SIMPLEFOC_RENESAS_DEBUG 12 | 13 | #define RENESAS_DEFAULT_PWM_FREQUENCY 24000 14 | #define RENESAS_DEFAULT_DEAD_ZONE 0.05f 15 | 16 | struct RenesasTimerConfig; 17 | 18 | typedef struct RenesasHardwareDriverParams { 19 | uint8_t pins[6]; 20 | uint8_t channels[6]; 21 | RenesasTimerConfig* timer_config[6]; 22 | long pwm_frequency; 23 | float dead_zone; 24 | } RenesasHardwareDriverParams; 25 | 26 | 27 | 28 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/drivers/hardware_specific/rp2040/rp2040_mcu.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | 7 | #if defined(TARGET_RP2040) 8 | 9 | 10 | 11 | typedef struct RP2040DriverParams { 12 | int pins[6]; 13 | uint slice[6]; 14 | uint chan[6]; 15 | long pwm_frequency; 16 | float dead_zone; 17 | } RP2040DriverParams; 18 | 19 | 20 | 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/drivers/hardware_specific/stm32/stm32_mcu.h: -------------------------------------------------------------------------------- 1 | #ifndef STM32_DRIVER_MCU_DEF 2 | #define STM32_DRIVER_MCU_DEF 3 | #include "../../hardware_api.h" 4 | 5 | #if defined(_STM32_DEF_) 6 | 7 | // default pwm parameters 8 | #define _PWM_RESOLUTION 12 // 12bit 9 | #define _PWM_RANGE 4095.0f // 2^12 -1 = 4095 10 | #define _PWM_FREQUENCY 25000 // 25khz 11 | #define _PWM_FREQUENCY_MAX 50000 // 50khz 12 | 13 | // 6pwm parameters 14 | #define _HARDWARE_6PWM 1 15 | #define _SOFTWARE_6PWM 0 16 | #define _ERROR_6PWM -1 17 | 18 | 19 | typedef struct STM32DriverParams { 20 | HardwareTimer* timers[6] = {NULL}; 21 | uint32_t channels[6]; 22 | long pwm_frequency; 23 | float dead_zone; 24 | uint8_t interface_type; 25 | } STM32DriverParams; 26 | 27 | // timer synchornisation functions 28 | void _stopTimers(HardwareTimer **timers_to_stop, int timer_num=6); 29 | void _startTimers(HardwareTimer **timers_to_start, int timer_num=6); 30 | 31 | // timer query functions 32 | bool _getPwmState(void* params); 33 | 34 | #endif 35 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/drivers/hardware_specific/teensy/teensy_mcu.h: -------------------------------------------------------------------------------- 1 | #ifndef TEENSY_MCU_DRIVER_H 2 | #define TEENSY_MCU_DRIVER_H 3 | 4 | #include "../../hardware_api.h" 5 | 6 | #if defined(__arm__) && defined(CORE_TEENSY) 7 | 8 | #define _PWM_FREQUENCY 25000 // 25khz 9 | #define _PWM_FREQUENCY_MAX 50000 // 50khz 10 | 11 | // debugging output 12 | #define SIMPLEFOC_TEENSY_DEBUG 13 | 14 | typedef struct TeensyDriverParams { 15 | int pins[6] = {(int)NOT_SET}; 16 | long pwm_frequency; 17 | void* additional_params; 18 | } TeensyDriverParams; 19 | 20 | // configure High PWM frequency 21 | void _setHighFrequency(const long freq, const int pin); 22 | 23 | void* _configureCenterAligned3PMW(long pwm_frequency, const int pinA, const int pinB, const int pinC); 24 | void _writeCenterAligned3PMW(float dc_a, float dc_b, float dc_c, void* params); 25 | 26 | #endif 27 | #endif -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/sensors/GenericSensor.cpp: -------------------------------------------------------------------------------- 1 | #include "GenericSensor.h" 2 | 3 | 4 | /* 5 | GenericSensor( float (*readCallback)() ) 6 | - readCallback - pointer to the function which reads the sensor angle. 7 | */ 8 | 9 | GenericSensor::GenericSensor(float (*readCallback)(), void (*initCallback)()){ 10 | // if function provided add it to the 11 | if(readCallback != nullptr) this->readCallback = readCallback; 12 | if(initCallback != nullptr) this->initCallback = initCallback; 13 | } 14 | 15 | void GenericSensor::init(){ 16 | // if init callback specified run it 17 | if(initCallback != nullptr) this->initCallback(); 18 | this->Sensor::init(); // call base class init 19 | } 20 | 21 | /* 22 | Shaft angle calculation 23 | */ 24 | float GenericSensor::getSensorAngle(){ 25 | return this->readCallback(); 26 | } -------------------------------------------------------------------------------- /libraries/Simple_FOC/src/sensors/GenericSensor.h: -------------------------------------------------------------------------------- 1 | #ifndef GENERIC_SENSOR_LIB_H 2 | #define GENERIC_SENSOR_LIB_H 3 | 4 | #include "Arduino.h" 5 | #include "../common/foc_utils.h" 6 | #include "../common/time_utils.h" 7 | #include "../common/base_classes/Sensor.h" 8 | 9 | 10 | class GenericSensor: public Sensor{ 11 | public: 12 | /** 13 | GenericSensor class constructor 14 | * @param readCallback pointer to the function reading the sensor angle 15 | * @param initCallback pointer to the function initialising the sensor 16 | */ 17 | GenericSensor(float (*readCallback)() = nullptr, void (*initCallback)() = nullptr); 18 | 19 | float (*readCallback)() = nullptr; //!< function pointer to sensor reading 20 | void (*initCallback)() = nullptr; //!< function pointer to sensor initialisation 21 | 22 | void init() override; 23 | 24 | // Abstract functions of the Sensor class implementation 25 | /** get current angle (rad) */ 26 | float getSensorAngle() override; 27 | 28 | }; 29 | 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /libraries/SoftwareWire/keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map For SoftwareWire 3 | ####################################### 4 | # Datatypes (KEYWORD1) 5 | ####################################### 6 | 7 | SoftwareWire KEYWORD1 8 | 9 | ####################################### 10 | # Methods and Functions (KEYWORD2) 11 | ####################################### 12 | 13 | setPins KEYWORD2 14 | beginTransmission KEYWORD2 15 | write KEYWORD2 16 | requestFrom KEYWORD2 17 | read KEYWORD2 18 | 19 | ####################################### 20 | # Constants (LITERAL1) 21 | ####################################### 22 | 23 | -------------------------------------------------------------------------------- /libraries/SoftwareWire/library.properties: -------------------------------------------------------------------------------- 1 | name=SoftwareWire 2 | version=1.6.0 3 | author=Testato, Koepel 4 | maintainer=Testato 5 | sentence=Creates a software I2C/TWI bus on every pins. 6 | paragraph=The SoftwareWire is only I2C Master mode. More than one software I2C bus can be created. The clock pulse stretching is implemented, so the Slave can be another Arduino board 7 | category=Device Control 8 | url=https://github.com/Testato/SoftwareWire 9 | architectures=* 10 | -------------------------------------------------------------------------------- /libraries/TCA9548/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2024 Rob Tillaart 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /libraries/TCA9548/examples/TCA9548_find/TCA9548_find.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: TCA9548_find.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo TCA9548 I2C multiplexer 5 | // URL: https://github.com/RobTillaart/TCA9548 6 | 7 | 8 | #include "TCA9548.h" 9 | 10 | TCA9548 MP(0x70); 11 | 12 | uint8_t channels = 0; 13 | 14 | 15 | void setup() 16 | { 17 | Serial.begin(115200); 18 | Serial.println(__FILE__); 19 | Serial.print("TCA9548_LIB_VERSION: "); 20 | Serial.println(TCA9548_LIB_VERSION); 21 | Serial.println(); 22 | 23 | Wire.begin(); 24 | if (MP.begin() == false) 25 | { 26 | Serial.println("COULD NOT CONNECT TO MULTIPLEXER"); 27 | } 28 | 29 | channels = MP.channelCount(); 30 | Serial.print("CHAN:\t"); 31 | Serial.println(MP.channelCount()); 32 | 33 | // adjust address range to your needs. 34 | for (uint8_t addr = 60; addr < 70; addr++) 35 | { 36 | if (addr % 10 == 0) Serial.println(); 37 | Serial.print(addr); 38 | Serial.print("\t"); 39 | Serial.print(MP.find(addr), BIN); 40 | Serial.println(); 41 | } 42 | 43 | Serial.println("done..."); 44 | } 45 | 46 | 47 | void loop() 48 | { 49 | } 50 | 51 | 52 | // -- END OF FILE -- 53 | -------------------------------------------------------------------------------- /libraries/TCA9548/examples/tca9548_search_device/tca9548_search_device.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: TCA9548_search_device.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo TCA9548 I2C multiplexer 5 | // URL: https://github.com/RobTillaart/TCA9548 6 | // 7 | // NOTE: since 0.3.0 a find function is added. 8 | 9 | 10 | #include "TCA9548.h" 11 | 12 | TCA9548 MP(0x70); 13 | 14 | // 0x38 is a dummy (in fact a PCF8574), adjust to your needs. 15 | uint8_t searchAddress = 0x38; 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(115200); 21 | Serial.println(__FILE__); 22 | Serial.print("TCA9548_LIB_VERSION: "); 23 | Serial.println(TCA9548_LIB_VERSION); 24 | Serial.println(); 25 | 26 | Wire.begin(); 27 | if (MP.begin() == false) 28 | { 29 | Serial.println("Could not connect to TCA9548 multiplexer."); 30 | } 31 | 32 | Serial.println("\nScan the channels of the multiplexer for searchAddress.\n"); 33 | for (int chan = 0; chan < MP.channelCount(); chan++) 34 | { 35 | MP.selectChannel(chan); 36 | bool b = MP.isConnected(searchAddress); 37 | Serial.print("CHAN: "); 38 | Serial.print(chan); 39 | Serial.print("\t"); 40 | Serial.print( b ? "found!" : "x"); 41 | } 42 | Serial.println(); 43 | 44 | Serial.println("done..."); 45 | } 46 | 47 | 48 | void loop() 49 | { 50 | } 51 | 52 | 53 | // -- END OF FILE -- 54 | 55 | -------------------------------------------------------------------------------- /libraries/TCA9548/keywords.txt: -------------------------------------------------------------------------------- 1 | # Syntax Colouring Map For TCA9548 2 | 3 | # Data types (KEYWORD1) 4 | TCA9548 KEYWORD1 5 | PCA9548 KEYWORD1 6 | PCA9546 KEYWORD1 7 | PCA9545 KEYWORD1 8 | PCA9543 KEYWORD1 9 | 10 | 11 | # Methods and Functions (KEYWORD2) 12 | begin KEYWORD2 13 | isConnected KEYWORD2 14 | find KEYWORD2 15 | 16 | channelCount KEYWORD2 17 | enableChannel KEYWORD2 18 | disableChannel KEYWORD2 19 | selectChannel KEYWORD2 20 | isEnabled KEYWORD2 21 | disableAllChannels KEYWORD2 22 | 23 | setChannelMask KEYWORD2 24 | getChannelMask KEYWORD2 25 | 26 | setResetPin KEYWORD2 27 | reset KEYWORD2 28 | 29 | setForced KEYWORD2 30 | getForced KEYWORD2 31 | 32 | getError KEYWORD2 33 | 34 | 35 | # Devices with interrupt 36 | getInterruptMask KEYWORD2 37 | 38 | 39 | # Constants (LITERAL1) 40 | TCA9548_LIB_VERSION LITERAL1 41 | 42 | TCA9548_OK LITERAL1 43 | TCA9548_ERROR_I2C LITERAL1 44 | TCA9548_ERROR_CHANNEL LITERAL1 45 | 46 | -------------------------------------------------------------------------------- /libraries/TCA9548/library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TCA9548", 3 | "keywords": "TCA9548,TCA9548a,PCA9548,PCA9548a,I2C,multiplexer", 4 | "description": "Arduino Library for TCA9548 I2C multiplexer.\nTCA9548a, PCA9548, PCA9548a, PCA9546, PCA9545, PCA9543", 5 | "authors": 6 | [ 7 | { 8 | "name": "Rob Tillaart", 9 | "email": "Rob.Tillaart@gmail.com", 10 | "maintainer": true 11 | } 12 | ], 13 | "repository": 14 | { 15 | "type": "git", 16 | "url": "https://github.com/RobTillaart/TCA9548" 17 | }, 18 | "version": "0.3.0", 19 | "license": "MIT", 20 | "frameworks": "*", 21 | "platforms": "*", 22 | "headers": "TCA9548.h" 23 | } 24 | -------------------------------------------------------------------------------- /libraries/TCA9548/library.properties: -------------------------------------------------------------------------------- 1 | name=TCA9548 2 | version=0.3.0 3 | author=Rob Tillaart 4 | maintainer=Rob Tillaart 5 | sentence=Arduino Library for TCA9548 I2C multiplexer and compatibles. 6 | paragraph=TCA9548, TCA9548a, PCA9548, PCA9548a, PCA9546, PCA9545, PCA9543 7 | category=Signal Input/Output 8 | url=https://github.com/RobTillaart/TCA9548 9 | architectures=* 10 | includes=TCA9548.h 11 | depends= 12 | -------------------------------------------------------------------------------- /libraries/readme.txt: -------------------------------------------------------------------------------- 1 | 라이브러리 설치에 대한 정보는 다음을 참고하세요: http://www.arduino.cc/en/Guide/Libraries 2 | -------------------------------------------------------------------------------- /limitSwitchTest/limitSwitchTest.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | AccelStepper stepperX = AccelStepper(1, 3, 6); 4 | 5 | #define home_switch 10 6 | 7 | long TravelX; 8 | int move_fineiched = 1; 9 | long initial_homing = -1; 10 | 11 | void setup() { 12 | Serial.begin(9600); 13 | 14 | pinMode(10, INPUT_PULLUP); 15 | 16 | delay(5); 17 | 18 | stepperX.setMaxSpeed(100); 19 | stepperX.setAcceleration(100); 20 | 21 | Serial.println("Stepper is homing .........."); 22 | 23 | while (digitalRead(home_switch)) { 24 | stepperX.moveTo(initial_homing); 25 | initial_homing--; 26 | stepperX.run(); 27 | delay(5); 28 | } 29 | 30 | stepperX.setCurrentPosition(0); 31 | stepperX.setMaxSpeed(100); 32 | stepperX.setAcceleration(100); 33 | initial_homing = 1; 34 | 35 | while (!digitalRead(home_switch)) { 36 | stepperX.moveTo(initial_homing); 37 | stepperX.run(); 38 | initial_homing++; 39 | delay(5); 40 | } 41 | 42 | stepperX.setCurrentPosition(0); 43 | Serial.println("Homing Completed"); 44 | Serial.println(""); 45 | stepperX.setMaxSpeed(1000); 46 | stepperX.setAcceleration(1000); 47 | 48 | Serial.println("Enter Travel distance(Positive for CW / Negative for CCW and Zero for back to home"); 49 | 50 | } 51 | 52 | void loop() { 53 | 54 | } 55 | -------------------------------------------------------------------------------- /microwave_sensor/stepper_motor_potentiometer/stepper_motor_potentiometer.ino: -------------------------------------------------------------------------------- 1 | int steppin = 4; 2 | int dirpin = 3; 3 | int step_delay; 4 | 5 | void setup() { 6 | pinMode(steppin, OUTPUT); 7 | pinMode(dirpin, OUTPUT); 8 | digitalWrite(dirpin, HIGH); 9 | 10 | 11 | } 12 | 13 | void loop() { 14 | int val = analogRead(A0); 15 | step_delay = map(val, 0, 1024, 1, 1000); 16 | digitalWrite(steppin, HIGH); 17 | delayMicroseconds(step_delay); 18 | digitalWrite(steppin, LOW); 19 | delayMicroseconds(step_delay); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /motor_driver/motor_driver.ino: -------------------------------------------------------------------------------- 1 | int a1 = 5; 2 | int a2 = 6; 3 | 4 | void setup() { 5 | pinMode(a1, OUTPUT); 6 | pinMode(a2, OUTPUT); 7 | } 8 | 9 | void loop() { 10 | digitalWrite(a1, HIGH); 11 | digitalWrite(a2, LOW); 12 | delay(2000); 13 | digitalWrite(a1, LOW); 14 | digitalWrite(a2, HIGH); 15 | delay(2000); 16 | digitalWrite(a1, HIGH); 17 | digitalWrite(a2, HIGH); 18 | delay(2000); 19 | } 20 | -------------------------------------------------------------------------------- /resucing_potentiometer_noise/resucing_potentiometer_noise.ino: -------------------------------------------------------------------------------- 1 | //Global Variables 2 | int sensorPin = 0; //pin number to use the ADC 3 | int sensorValue = 0; //initialization of sensor variable, equivalent to EMA Y 4 | float EMA_a = 0.6; //initialization of EMA alpha 5 | int EMA_S = 0; //initialization of EMA S 6 | 7 | void setup(){ 8 | Serial.begin(9600); //setup of Serial module, 115200 bits/second 9 | EMA_S = analogRead(sensorPin); //set EMA S for t=1 10 | } 11 | 12 | void loop(){ 13 | sensorValue = analogRead(sensorPin); //read the sensor value using ADC 14 | sensorValue = map(sensorValue, 0, 1023, 0, 600); 15 | EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S); //run the EMA 16 | Serial.println(EMA_S); //print digital value to serial 17 | delay(10); //50ms delay 18 | } -------------------------------------------------------------------------------- /robot_arm_v3/ras_ar/ras_ar.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define DIR 3 4 | #define STEP 4 5 | 6 | String serial_data = ""; 7 | 8 | AccelStepper stepper = AccelStepper(1, STEP, DIR);//드라이버를 쓸때는 1을쓴다! 9 | 10 | void setup() { 11 | // put your setup code here, to run once: 12 | Serial.begin(9600);//결과를 시리얼모니터에서 볼거야~ 13 | pinMode(DIR,OUTPUT); 14 | pinMode(STEP,OUTPUT); 15 | stepper.setMaxSpeed(1000); //얘는 200이 적절한값! 16 | stepper.setAcceleration(1000); 17 | } 18 | 19 | void loop() { 20 | while(Serial.available()) { 21 | serial_data = Serial.read(); 22 | } 23 | 24 | if(serial_data == '1') { 25 | Serial.println("Hello"); 26 | stepper.setSpeed(1000); 27 | stepper.moveTo(1000); 28 | stepper.runToPosition(); 29 | } 30 | } -------------------------------------------------------------------------------- /robot_arm_v3/ras_ar_serial/ras_ar_serial.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define DIR 3 4 | #define STEP 4 5 | char cmd; 6 | 7 | AccelStepper stepper = AccelStepper(1, STEP, DIR);//드라이버를 쓸때는 1을쓴다! 8 | 9 | void setup() { 10 | // put your setup code here, to run once: 11 | Serial.begin(9600);//결과를 시리얼모니터에서 볼거야~ 12 | pinMode(DIR,OUTPUT); 13 | pinMode(STEP,OUTPUT); 14 | stepper.setMaxSpeed(1000); //얘는 200이 적절한값! 15 | } 16 | 17 | void loop() { 18 | 19 | if(Serial.available()) { 20 | cmd = Serial.read(" : "); 21 | // cmd.trim(); 22 | } 23 | 24 | if(cmd == 'a') { 25 | stepper.setSpeed(500); 26 | stepper.moveTo(400); 27 | stepper.runToPosition(); 28 | } 29 | 30 | else if(cmd == 'b') { 31 | stepper.setSpeed(500); 32 | stepper.moveTo(-400); 33 | stepper.runToPosition(); 34 | } 35 | } -------------------------------------------------------------------------------- /robot_arm_v3/serial_communication/serial_communication.ino: -------------------------------------------------------------------------------- 1 | void setup() { 2 | Serial.begin(9600); 3 | } 4 | 5 | void loop() { 6 | if (Serial.available() > 0) { 7 | String data = Serial.readStringUntil('\n'); 8 | Serial.print("You sent me: "); 9 | Serial.println(data); 10 | } 11 | } -------------------------------------------------------------------------------- /robot_arm_v3/serial_communication/sketch_aug8b/sketch_aug8b.ino: -------------------------------------------------------------------------------- 1 | void setup() { 2 | // 시리얼 통신 초기화 3 | Serial.begin(9600); 4 | while (!Serial) { 5 | ; // 시리얼 포트가 연결될 때까지 대기 6 | } 7 | Serial.println("Arduino is ready"); 8 | } 9 | 10 | void loop() { 11 | // 라즈베리 파이로부터 데이터 수신 12 | if (Serial.available()) { 13 | String receivedData = Serial.readStringUntil('\n'); 14 | Serial.print("Received from Raspberry Pi: "); 15 | Serial.println(receivedData); 16 | 17 | // 데이터 응답 18 | Serial.print("Hello from Arduino!\n"); 19 | } 20 | 21 | delay(100); // 0.1초 대기 22 | } 23 | -------------------------------------------------------------------------------- /robot_arm_v3/sketch_aug8a/sketch_aug8a.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "config.h" 5 | #include "AS5600.h" 6 | 7 | void setup() { 8 | // put your setup code here, to run once: 9 | Serial.begin(9600); 10 | Wire.begin(); 11 | 12 | // set register to read once 13 | init_position_sensor(); 14 | 15 | } 16 | 17 | void loop() { 18 | // put your main code here, to run repeatedly: 19 | // read position from sensor 20 | update_current_position(STEPPER_DEFAULT_MICRO_STEPS); 21 | 22 | } -------------------------------------------------------------------------------- /servo/servo.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int servoPin = 9; 4 | 5 | Servo servo; 6 | 7 | int angle = 0; // servo position in degrees 8 | 9 | void setup() 10 | { 11 | servo.attach(servoPin); 12 | } 13 | 14 | 15 | void loop() 16 | { 17 | // scan from 0 to 180 degrees 18 | for(angle = 0; angle < 180; angle++) 19 | { 20 | servo.write(angle); 21 | delay(15); 22 | } 23 | // now scan back from 180 to 0 degrees 24 | for(angle = 180; angle > 0; angle--) 25 | { 26 | servo.write(angle); 27 | delay(15); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /simplefoc_encoder_test/simplefoc_encoder_test.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | // AS5600 센서 설정 5 | MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C); 6 | 7 | // 센서 초기 오프셋 값 8 | float angle_offset = 0.0; 9 | 10 | void setup() { 11 | // I2C 통신 초기화 12 | Wire.begin(); 13 | Wire.setClock(400000); // 400kHz I2C 고속 모드 14 | Serial.begin(115200); 15 | 16 | // 센서 초기화 17 | sensor.init(); 18 | Serial.println("AS5600 Initialized!"); 19 | 20 | // 초기 오프셋 값 설정 21 | // 주의: 초기 오프셋을 설정하기 전에 sensor.update()를 먼저 한 번 실행하는 것도 방법 22 | sensor.update(); 23 | angle_offset = sensor.getAngle(); 24 | Serial.print("Initial Offset: "); 25 | Serial.println(angle_offset); 26 | } 27 | 28 | void loop() { 29 | // 매 루프마다 센서 값을 갱신 30 | sensor.update(); 31 | 32 | // 센서 값 읽기 (라디안 단위 각도) 33 | float raw_angle = sensor.getAngle(); 34 | float corrected_angle = raw_angle - angle_offset; // 오프셋 보정된 각도 35 | float velocity = sensor.getVelocity(); 36 | 37 | // 각도 출력 38 | 39 | Serial.print(corrected_angle); 40 | Serial.print(" "); 41 | Serial.println(velocity); 42 | 43 | delay(10); // 100ms 주기 44 | } 45 | -------------------------------------------------------------------------------- /sketch_nov14a/sketch_nov14a.ino: -------------------------------------------------------------------------------- 1 | // Define pin connections & motor's steps per revolution 2 | const int dirPin1 = 2; 3 | const int stepPin1 = 3; 4 | const int dirPin2 = 5; 5 | const int stepPin2 = 6; 6 | const int stepsPerRevolution = 1200; //revolve 6times because the one cycle is 200 7 | const int cycle_max = 2000; 8 | const int cycle_min = 400; 9 | 10 | void setup() 11 | { 12 | // Declare pins as Outputs 13 | pinMode(stepPin1, OUTPUT); 14 | pinMode(dirPin1, OUTPUT); 15 | pinMode(stepPin2, OUTPUT); 16 | pinMode(dirPin2, OUTPUT); 17 | } 18 | void loop() 19 | { 20 | // Set motor direction clockwise 21 | digitalWrite(dirPin1, HIGH); 22 | digitalWrite(dirPin2, HIGH); 23 | 24 | for(int x = 0; x < stepsPerRevolution; x++) 25 | { 26 | digitalWrite(stepPin1, HIGH); 27 | delayMicroseconds(800); 28 | digitalWrite(stepPin1, LOW); 29 | delayMicroseconds(800); 30 | } 31 | delay(1000); 32 | // Set motor direction clockwise 33 | digitalWrite(dirPin2, HIGH); 34 | 35 | for(int x = 0; x < stepsPerRevolution; x++) 36 | { 37 | digitalWrite(stepPin2, HIGH); 38 | delayMicroseconds(800); 39 | digitalWrite(stepPin2, LOW); 40 | delayMicroseconds(800); 41 | } 42 | delay(1000); 43 | } 44 | -------------------------------------------------------------------------------- /steppe_motor_accel/steppe_motor_accel.ino: -------------------------------------------------------------------------------- 1 | // Define pin connections & motor's steps per revolution 2 | const int dirPin = 2; 3 | const int stepPin = 3; 4 | const int stepsPerRevolution = 1200; //revolve 6times because the one cycle is 200 5 | const int cycle_max = 2000; 6 | const int cycle_min = 400; 7 | 8 | void setup() 9 | { 10 | // Declare pins as Outputs 11 | pinMode(stepPin, OUTPUT); 12 | pinMode(dirPin, OUTPUT); 13 | } 14 | void loop() 15 | { 16 | // Set motor direction clockwise 17 | digitalWrite(dirPin, HIGH); 18 | 19 | // Spin motor slowly 20 | // for(int x = 0; x < stepsPerRevolution; x++) 21 | // { 22 | for(int x=2000; x > cycle_min; x += -3){ 23 | digitalWrite(stepPin, HIGH); 24 | delayMicroseconds(x); 25 | digitalWrite(stepPin, LOW); 26 | delayMicroseconds(x); 27 | } 28 | 29 | for(int x = 0; x < stepsPerRevolution; x++) 30 | { 31 | digitalWrite(stepPin, HIGH); 32 | delayMicroseconds(400); 33 | digitalWrite(stepPin, LOW); 34 | delayMicroseconds(400); 35 | } 36 | 37 | for(int x = 400; x < cycle_max; x += 3){ 38 | digitalWrite(stepPin, HIGH); 39 | delayMicroseconds(x); 40 | digitalWrite(stepPin, LOW); 41 | delayMicroseconds(x); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /stepper_motor/stepper_motor.ino: -------------------------------------------------------------------------------- 1 | #define stepPin 2 2 | #define dirPin 5 3 | 4 | void setup() { 5 | // Sets the two pins as Outputs 6 | pinMode(stepPin,OUTPUT); 7 | pinMode(dirPin,OUTPUT); 8 | } 9 | void loop() { 10 | digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction 11 | // Makes 200 pulses for making one full cycle rotation 12 | for(int x = 0; x < 800; x++) { 13 | digitalWrite(stepPin,HIGH); 14 | delayMicroseconds(700); // by changing this time delay between the steps we can change the rotation speed 15 | digitalWrite(stepPin,LOW); 16 | delayMicroseconds(700); 17 | } 18 | delay(1000); // One second delay 19 | 20 | digitalWrite(dirPin,LOW); //Changes the rotations direction 21 | // Makes 400 pulses for making two full cycle rotation 22 | for(int x = 0; x < 1600; x++) { 23 | digitalWrite(stepPin,HIGH); 24 | delayMicroseconds(500); 25 | digitalWrite(stepPin,LOW); 26 | delayMicroseconds(500); 27 | } 28 | delay(1000); 29 | } 30 | -------------------------------------------------------------------------------- /stepper_position_potentialmeter/stepper_position_potentialmeter.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define pul 6 4 | #define dir 7 5 | 6 | int position; 7 | 8 | //Global Variables 9 | int sensorPin = 0; //pin number to use the ADC 10 | int sensorValue = 0; //initialization of sensor variable, equivalent to EMA Y 11 | float EMA_a = 0.6; //initialization of EMA alpha 12 | int EMA_S = 0; //initialization of EMA S 13 | 14 | 15 | AccelStepper stepper = AccelStepper(1, pul, dir); 16 | 17 | void setup() { 18 | stepper.setMaxSpeed(500); 19 | EMA_S = analogRead(sensorPin); //set EMA S for t=1 20 | Serial.begin(9600); 21 | } 22 | 23 | void loop() { 24 | sensorValue = map(analogRead(A0), 0, 1023, 0, 399); 25 | EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S); 26 | stepper.setSpeed(2000); 27 | stepper.moveTo(EMA_S); 28 | stepper.runSpeedToPosition(); 29 | Serial.println(EMA_S); 30 | } -------------------------------------------------------------------------------- /stepper_potentialmeter/stepper_potentialmeter.ino: -------------------------------------------------------------------------------- 1 | // Define pin connections & motor's steps per revolution 2 | #define dirPin 2 3 | #define stepPin 3 4 | 5 | int customDelay, customDelayMapped; 6 | 7 | void speedControl() { 8 | customDelay = analogRead(A0); 9 | customDelayMapped = map(customDelay, 0, 1023, 300,3000); 10 | } 11 | 12 | void setup() 13 | { 14 | // Declare pins as Outputs 15 | pinMode(stepPin, OUTPUT); 16 | pinMode(dirPin, OUTPUT); 17 | } 18 | void loop(){ 19 | speedControl(); 20 | digitalWrite(stepPin, HIGH); 21 | delayMicroseconds(customDelayMapped); 22 | digitalWrite(stepPin, LOW); 23 | delayMicroseconds(customDelayMapped); 24 | } 25 | -------------------------------------------------------------------------------- /stepper_speed_potentialmeter/stepper_speed_potentialmeter.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define DIR 2 4 | #define STEP 3 5 | 6 | int speed1; 7 | 8 | AccelStepper stepper1 = AccelStepper(1, STEP, DIR); 9 | 10 | void setup() { 11 | stepper1.setMaxSpeed(500); 12 | 13 | } 14 | 15 | void loop() { 16 | speed1 = map(analogRead(A0), 0, 1023, -500, 500); 17 | stepper1.setSpeed(speed1); 18 | stepper1.runSpeed(); 19 | } 20 | --------------------------------------------------------------------------------