//******************************************************************************
//* RP2354A/GECKODRIVE STEPPER MOTOR DRIVER DEMO
//* VERSION 1.00 DESIGN NEWS
//* COMPILED USING PICO SDK EXTENSION UNDER VS CODE
//* WRITTEN BY FRED EADY
//* LAST UPDATED 09/21/2026
//******************************************************************************
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"

const uint STEP = 16;
const uint DIR = 17;
const uint DISABLE = 18;
const uint HOME = 19;
uint step_cnt;
uint speed;
uint speed2;

void home(void)
{
    if(gpio_get(HOME))
    {
        gpio_put(DISABLE,0);
        gpio_put(DIR,1);
        do{
            gpio_put(STEP,0);
            sleep_us(1000);
            gpio_put(STEP,1);
            sleep_us(1000);
       }while(gpio_get(HOME));
    }
}

int main()
{
    stdio_init_all();

    gpio_init(HOME);
    gpio_set_dir(HOME,GPIO_IN);
    gpio_pull_up(STEP);
    gpio_init(STEP);
    gpio_set_dir(STEP,GPIO_OUT);
    gpio_init(DIR);
    gpio_set_dir(DIR,GPIO_OUT);
    gpio_init(DISABLE);
    gpio_set_dir(DISABLE,GPIO_OUT);
    gpio_put(STEP,0);
    gpio_put(DIR,0);
    gpio_put(DISABLE,1);
    speed = 60;
    speed2 = 60;
    home();

   while (true) {
        gpio_put(DISABLE,0);
        gpio_put(DIR,0);
        for(step_cnt=0;step_cnt<10000;step_cnt++)
        {
        gpio_put(STEP,0);
        sleep_us(speed);
        gpio_put(STEP,1);
        sleep_us(speed);
        }
        gpio_put(DIR,1);
        for(step_cnt=0;step_cnt<10000;step_cnt++)
        {
        gpio_put(STEP,0);
        sleep_us(speed2);
        gpio_put(STEP,1);
        sleep_us(speed2);
        }
        while(1);
    }
}
