Advanced Distributed Systems module at HSLU
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

102 lines
2.9 KiB

/*
* application.c
*
* Created on: 22.09.2022
* Author: jonas
*/
#include "fsl_debug_console.h"
#include "application.h"
#include "McuWait.h"
#include "McuLED.h"
#include "McuGPIO.h"
#include "McuULN2003.h"
#include "splitflap_pins.h"
#include "splitflap.h"
/* blue led pins */
#define LED_BLUE_GPIO GPIOC
#define LED_BLUE_PORT PORTC
#define LED_BLUE_PIN 2U
static McuLED_Handle_t LED_blue;
static SF_Handle_t splitflap0;
/* Application initialization */
void App_Init(void){
/* configure blue LED */
McuLED_Config_t config;
McuLED_GetDefaultConfig(&config);
config.isLowActive = true;
config.isOnInit = false;
config.hw.gpio = LED_BLUE_GPIO;
config.hw.port = LED_BLUE_PORT;
config.hw.pin = LED_BLUE_PIN;
LED_blue = McuLED_InitLed(&config);
/* configure the motor */
McuULN2003_Config_t motor0Config;
McuULN2003_GetDefaultConfig(&motor0Config);
motor0Config.hw[0].gpio = STEPPER_MOTOR0_IN1_GPIO;
motor0Config.hw[0].port = STEPPER_MOTOR0_IN1_PORT;
motor0Config.hw[0].pin = STEPPER_MOTOR0_IN1_PIN;
motor0Config.hw[1].gpio = STEPPER_MOTOR0_IN2_GPIO;
motor0Config.hw[1].port = STEPPER_MOTOR0_IN2_PORT;
motor0Config.hw[1].pin = STEPPER_MOTOR0_IN2_PIN;
motor0Config.hw[2].gpio = STEPPER_MOTOR0_IN3_GPIO;
motor0Config.hw[2].port = STEPPER_MOTOR0_IN3_PORT;
motor0Config.hw[2].pin = STEPPER_MOTOR0_IN3_PIN;
motor0Config.hw[3].gpio = STEPPER_MOTOR0_IN4_GPIO;
motor0Config.hw[3].port = STEPPER_MOTOR0_IN4_PORT;
motor0Config.hw[3].pin = STEPPER_MOTOR0_IN4_PIN;
motor0Config.inverted = true;
/* configure magnetic sensor for motor 0 */
McuGPIO_Config_t magSensor0Config;
McuGPIO_GetDefaultConfig(&magSensor0Config);
magSensor0Config.hw.gpio = MAG_MOTOR0_GPIO;
magSensor0Config.hw.port = MAG_MOTOR0_PORT;
magSensor0Config.hw.pin = MAG_MOTOR0_PIN;
magSensor0Config.isInput = true;
magSensor0Config.hw.pull = McuGPIO_PULL_UP;
/* create config instance for splitflap 0 */
SF_Config_t sfConfig;
sfConfig.magSensorConfig = magSensor0Config;
sfConfig.motorConfig = motor0Config;
/* initialize splitflap 0 */
splitflap0 = SF_Init(&sfConfig, 0);
}
/* Application run */
void App_Run(void){
PRINTF("Initializing split flap motors.\n");
bool successfulInit = SF_MoveMotorToZeroPosition(splitflap0, 20);
PRINTF("Init of motors done. Success = %s\n\n", successfulInit ? "true" : "false");
// if init failed => stop
if(successfulInit == false){
return;
}
// go through the following letters
char* letters[] = {"J", "O", "N", "A", "S", "!"};
PRINTF("Amount of letters %i\n", sizeof(letters)/sizeof(letters[0]));
while(1){
for(int i = 0; i < sizeof(letters)/sizeof(letters[0]); i++){
McuWait_Waitms(1000);
PRINTF("Moving to letter '%s', position is %i\n", letters[i], (int)SF_GetMotorPosition(splitflap0));
SF_MoveToFlap(splitflap0, letters[i]);
PRINTF("Position after move is is %i\n", (int)SF_GetMotorPosition(splitflap0));
}
}
}
/* Application de-initialization */
void App_Deinit(void){
}