/* Отрисовка графика значений в плоттере

* Вы можете точно настроить показания, изменив STALL_VALUE.
 * Это позволит вам контролировать, при какой нагрузке значение будет равно 0
 * и сработает флаг остановки. Это также установит высокий уровень на выводе DIAG1.
 * Более высокое значение STALL_VALUE сделает чтение менее чувствительным и
 * меньшее значение STALL_VALUE сделает его более чувствительным.
 *
 * Если отправить 0 в консоль - остановка
 * 1 - движение
 * + увеличить скорость / При слишком большой скорости шаги будут проскакивать. 
 * - Уменьшить скорость
 */
#include "Arduino.h" 
#include <SPI.h>
#include <TMCStepper.h>  

#define MAX_SPEED 40 // Значение таймера в Millis для скорости
#define MIN_SPEED 1000

#define STALL_VALUE 15 // [-64..63]

/*
Меньшее значение дает более высокую чувствительность. Нуль
начальное значение, которое работает с большинством двигателей.
От -64 до +63: чем выше значение, тем меньше stallGuard2.
чувствителен и требует большего крутящего момента для
определения остановки (залипания).
*/

//Настройка пинов для Software SPI. На Arduino Mega все пины кроме Аналоговых

#define EN_PIN 32   // Enable
#define DIR_PIN 25  // Direction
#define STEP_PIN 21 // Step

#define CS_PIN 23   // Chip select
#define SW_MOSI 19 // Software Master Out Slave In (MOSI)
#define SW_MISO 33  // Software Master In Slave Out (MISO)
#define SW_SCK 22   // Software Slave Clock (SCK)

 


#define R_SENSE 0.11f // Резистор с которого будет делаться замер на драйвере - уточнить. \
                      // SilentStepStick series use 0.11 - выбрать данный параметр                                        \
                      // UltiMachine Einsy and Archim2 boards use 0.2                                                                          \
                      // Panucatt BSD2660 uses 0.1                                                                                             \
                      // Watterott TMC5160 uses 0.075

//Silent-Step-Stick 0.11 - это плата драйвера шагового двигателя для двухфазных двигателей,
//основанная на драйверах Trinamic: TMC 2100 / TMC 2130 / TMC 2208 / TMC 2209 / TMC 5160 / TMC 5161.

// Тип подключения
//TMC2130Stepper driver(CS_PIN, R_SENSE);                           // Hardware SPI будут использоваться стандратные пины
TMC2130Stepper driver(CS_PIN, R_SENSE, SW_MOSI, SW_MISO, SW_SCK); // Software SPI

bool dir = true;

void setup() {
	Serial.begin(9600);
	while(!Serial);
	Serial.println("Start...");
	driver.begin();  			// Initiate pins and registeries
	driver.rms_current(1000); 	// Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
	driver.en_pwm_mode(1);  	// Enable extremely quiet stepping
     
	pinMode(EN_PIN, OUTPUT);
	pinMode(STEP_PIN, OUTPUT);
	digitalWrite(EN_PIN, LOW); 	// Enable driver in hardware

	Serial.print("DRV_STATUS=0b");
	Serial.println(driver.DRV_STATUS(), BIN);
}

void loop() {
	digitalWrite(STEP_PIN, HIGH);
	delayMicroseconds(10);
	digitalWrite(STEP_PIN, LOW);
	delayMicroseconds(10);
	uint32_t ms = millis();
	static uint32_t last_time = 0;
	if ((ms - last_time) > 2000) {
		if (dir) {
			Serial.println("Dir -> 0");
			driver.shaft(0);
		} else {
			Serial.println("Dir -> 1");
			driver.shaft(1);
		}
		dir = !dir;
		last_time = ms;
	}
}