From 78618a02251e269331c57d8471c80b02759ca04c Mon Sep 17 00:00:00 2001 From: Jonas Arnold Date: Fri, 7 Oct 2022 08:57:49 +0200 Subject: [PATCH] simplified initialization of dictionary, added logging, removed splitflaps_flaps.h --- ADIS_tinyK22_SplitFlap/source/splitflap.c | 60 ++++++------------- ADIS_tinyK22_SplitFlap/source/splitflap.h | 6 +- .../source/splitflap_flaps.h | 55 ----------------- 3 files changed, 21 insertions(+), 100 deletions(-) delete mode 100644 ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.c b/ADIS_tinyK22_SplitFlap/source/splitflap.c index 47510b9..8e6cd13 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.c +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.c @@ -7,13 +7,19 @@ */ #include "splitflap.h" +#include "fsl_debug_console.h" #include "McuULN2003.h" #include #include "McuWait.h" #include "lib/dict.h" -#include "splitflap_flaps.h" +/* dynamic dictionary for the letters of the dictionary */ static dict_t **splitFlapDict; +/* all letters of the splitflap in the correct order */ +static char* SF_Letters[] = { " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", + "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", + "!", "?", ":"}; void SF_InitConfig(void){ splitFlapDict = dictAlloc(); @@ -21,46 +27,16 @@ void SF_InitConfig(void){ ((dict_t*)splitFlapDict)->value=NULL; ((dict_t*)splitFlapDict)->next=NULL; float stepsPerSegment = SPLITFLAP_STEPS_PER_SEGMENT; // do division once - addItem(splitFlapDict, SF_SPACE, (int32_t*)0); - addItem(splitFlapDict, SF_A, (int32_t*)(int32_t)(stepsPerSegment * 1.0 + 0.5)); // +0.5 so that the rounding is - addItem(splitFlapDict, SF_B, (int32_t*)(int32_t)(stepsPerSegment * 2.0 + 0.5)); // done correctly - addItem(splitFlapDict, SF_C, (int32_t*)(int32_t)(stepsPerSegment * 3.0 + 0.5)); - addItem(splitFlapDict, SF_D, (int32_t*)(int32_t)(stepsPerSegment * 4.0 + 0.5)); - addItem(splitFlapDict, SF_E, (int32_t*)(int32_t)(stepsPerSegment * 5.0 + 0.5)); - addItem(splitFlapDict, SF_F, (int32_t*)(int32_t)(stepsPerSegment * 6.0 + 0.5)); - addItem(splitFlapDict, SF_G, (int32_t*)(int32_t)(stepsPerSegment * 7.0 + 0.5)); - addItem(splitFlapDict, SF_H, (int32_t*)(int32_t)(stepsPerSegment * 8.0 + 0.5)); - addItem(splitFlapDict, SF_I, (int32_t*)(int32_t)(stepsPerSegment * 9.0 + 0.5)); - addItem(splitFlapDict, SF_J, (int32_t*)(int32_t)(stepsPerSegment * 10.0 + 0.5)); - addItem(splitFlapDict, SF_K, (int32_t*)(int32_t)(stepsPerSegment * 11.0 + 0.5)); - addItem(splitFlapDict, SF_L, (int32_t*)(int32_t)(stepsPerSegment * 12.0 + 0.5)); - addItem(splitFlapDict, SF_M, (int32_t*)(int32_t)(stepsPerSegment * 13.0 + 0.5)); - addItem(splitFlapDict, SF_N, (int32_t*)(int32_t)(stepsPerSegment * 14.0 + 0.5)); - addItem(splitFlapDict, SF_O, (int32_t*)(int32_t)(stepsPerSegment * 15.0 + 0.5)); - addItem(splitFlapDict, SF_P, (int32_t*)(int32_t)(stepsPerSegment * 16.0 + 0.5)); - addItem(splitFlapDict, SF_Q, (int32_t*)(int32_t)(stepsPerSegment * 17.0 + 0.5)); - addItem(splitFlapDict, SF_R, (int32_t*)(int32_t)(stepsPerSegment * 18.0 + 0.5)); - addItem(splitFlapDict, SF_S, (int32_t*)(int32_t)(stepsPerSegment * 19.0 + 0.5)); - addItem(splitFlapDict, SF_T, (int32_t*)(int32_t)(stepsPerSegment * 20.0 + 0.5)); - addItem(splitFlapDict, SF_U, (int32_t*)(int32_t)(stepsPerSegment * 21.0 + 0.5)); - addItem(splitFlapDict, SF_V, (int32_t*)(int32_t)(stepsPerSegment * 22.0 + 0.5)); - addItem(splitFlapDict, SF_W, (int32_t*)(int32_t)(stepsPerSegment * 23.0 + 0.5)); - addItem(splitFlapDict, SF_X, (int32_t*)(int32_t)(stepsPerSegment * 24.0 + 0.5)); - addItem(splitFlapDict, SF_Y, (int32_t*)(int32_t)(stepsPerSegment * 25.0 + 0.5)); - addItem(splitFlapDict, SF_Z, (int32_t*)(int32_t)(stepsPerSegment * 26.0 + 0.5)); - addItem(splitFlapDict, SF_0, (int32_t*)(int32_t)(stepsPerSegment * 27.0 + 0.5)); - addItem(splitFlapDict, SF_1, (int32_t*)(int32_t)(stepsPerSegment * 28.0 + 0.5)); - addItem(splitFlapDict, SF_2, (int32_t*)(int32_t)(stepsPerSegment * 29.0 + 0.5)); - addItem(splitFlapDict, SF_3, (int32_t*)(int32_t)(stepsPerSegment * 30.0 + 0.5)); - addItem(splitFlapDict, SF_4, (int32_t*)(int32_t)(stepsPerSegment * 31.0 + 0.5)); - addItem(splitFlapDict, SF_5, (int32_t*)(int32_t)(stepsPerSegment * 32.0 + 0.5)); - addItem(splitFlapDict, SF_6, (int32_t*)(int32_t)(stepsPerSegment * 33.0 + 0.5)); - addItem(splitFlapDict, SF_7, (int32_t*)(int32_t)(stepsPerSegment * 34.0 + 0.5)); - addItem(splitFlapDict, SF_8, (int32_t*)(int32_t)(stepsPerSegment * 35.0 + 0.5)); - addItem(splitFlapDict, SF_9, (int32_t*)(int32_t)(stepsPerSegment * 36.0 + 0.5)); - addItem(splitFlapDict, SF_EXCLAMATION, (int32_t*)(int32_t)(stepsPerSegment * 37.0 + 0.5)); - addItem(splitFlapDict, SF_QUESTION, (int32_t*)(int32_t)(stepsPerSegment * 38.0 + 0.5)); - addItem(splitFlapDict, SF_COLON, (int32_t*)(int32_t)(stepsPerSegment * 39.0 + 0.5)); + + // add all splitflap flaps to the dictionary, calculating the position automatically + // print out for debugging + PRINTF("Splitflap positioning data is automatically calculated:\n"); + for(int i = 0; i < SPLITFLAP_AMOUNT_OF_SEGMENTS; i ++){ + // + 0.5 so the rounding is done correctly + int32_t position = (stepsPerSegment * (float)i); + addItem(splitFlapDict, SF_Letters[i], (int32_t*)position); + PRINTF("Letter '%s': Position %i\n", SF_Letters[i], (int)position); + } } void SF_DeInitConfig(void){ @@ -102,7 +78,7 @@ bool SF_MoveMotorToZeroPosition(SF_Handle_t instance, int8_t offsetSegments){ // one more segment if not already one round if(numStepsMoved < SPLITFLAP_STEPS_ONE_ROUND){ // +0.5 so that the rounding is done correctly - int8_t offsetSteps = (int8_t)((float)offsetSegments*SPLITFLAP_STEPS_PER_SEGMENT + 0.5); + int8_t offsetSteps = offsetSegments * SPLITFLAP_STEPS_ONE_ROUND/SPLITFLAP_AMOUNT_OF_SEGMENTS; // (int8_t)((float)offsetSegments*SPLITFLAP_STEPS_PER_SEGMENT + 0.5); for(int i=0; i < offsetSteps; i++){ McuULN2003_IncStep(((SF_t*)instance)->motor); McuWait_Waitms(20); diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.h b/ADIS_tinyK22_SplitFlap/source/splitflap.h index 4de8ea6..0a28ac3 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.h +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.h @@ -12,13 +12,14 @@ #include "McuULN2003.h" #include "McuGPIO.h" #include "lib/dict.h" +#include /****** SETTINGS ******/ #define SPLITFLAP_CONFIG_USE_FREERTOS_HEAP 0 #define SPLITFLAP_STEPS_ONE_ROUND 512 -#define SPLITFLAP_AMOUNT_OF_SEGMENTS 40 -#define SPLITFLAP_STEPS_PER_SEGMENT (float)SPLITFLAP_STEPS_ONE_ROUND/(float)SPLITFLAP_AMOUNT_OF_SEGMENTS +#define SPLITFLAP_AMOUNT_OF_SEGMENTS (sizeof(SF_Letters)/sizeof(SF_Letters[0])) +#define SPLITFLAP_STEPS_PER_SEGMENT ((float)SPLITFLAP_STEPS_ONE_ROUND/(float)SPLITFLAP_AMOUNT_OF_SEGMENTS) /****** TYPES ******/ @@ -36,7 +37,6 @@ typedef struct { McuGPIO_Config_t magSensorConfig; } SF_Config_t; - /****** FUNCTIONS ******/ /* initializes dictonary with splitflap flaps position */ void SF_InitConfig(void); diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h b/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h deleted file mode 100644 index 33e4fe5..0000000 --- a/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * splitflap_display.h - * - * Created on: 30 Sep 2022 - * Author: simon - */ - -#ifndef SPLITFLAP_FLAPS_H_ -#define SPLITFLAP_FLAPS_H_ - -#include -#define SF_A "A" -#define SF_B "B" -#define SF_C "C" -#define SF_D "D" -#define SF_E "E" -#define SF_F "F" -#define SF_G "G" -#define SF_H "H" -#define SF_I "I" -#define SF_J "J" -#define SF_K "K" -#define SF_L "L" -#define SF_M "M" -#define SF_N "N" -#define SF_O "O" -#define SF_P "P" -#define SF_Q "Q" -#define SF_R "R" -#define SF_S "S" -#define SF_T "T" -#define SF_U "U" -#define SF_V "V" -#define SF_W "W" -#define SF_X "X" -#define SF_Y "Y" -#define SF_Z "Z" -#define SF_0 "0" -#define SF_1 "1" -#define SF_2 "2" -#define SF_3 "3" -#define SF_4 "4" -#define SF_5 "5" -#define SF_6 "6" -#define SF_7 "7" -#define SF_8 "8" -#define SF_9 "9" -#define SF_EXCLAMATION "!" -#define SF_QUESTION "?" -#define SF_COLON ":" -#define SF_SPACE " " - - - -#endif /* SPLITFLAP_FLAPS_H_ */