Data receiving function and tidy up

added functions to receive Output commands and changed lots of code for broader functionality
This commit is contained in:
Alexander Richter 2022-11-25 00:38:01 +01:00
parent eec6583569
commit f4aabdc99c
3 changed files with 783 additions and 152 deletions

537
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,537 @@
{
"version": 4,
"configurations": [
{
"name": "Arduino",
"compilerPath": "C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr\\bin\\avr-g++",
"compilerArgs": [
"-w",
"-std=gnu++11",
"-fpermissive",
"-fno-exceptions",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-Wno-error=narrowing"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino",
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\mega",
"c:\\program files (x86)\\arduino\\hardware\\tools\\avr\\lib\\gcc\\avr\\7.3.0\\include",
"c:\\program files (x86)\\arduino\\hardware\\tools\\avr\\lib\\gcc\\avr\\7.3.0\\include-fixed",
"c:\\program files (x86)\\arduino\\hardware\\tools\\avr\\avr\\include"
],
"forcedInclude": [
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [
"F_CPU=16000000L",
"ARDUINO=10816",
"ARDUINO_AVR_MEGA2560",
"ARDUINO_ARCH_AVR",
"__DBL_MIN_EXP__=(-125)",
"__HQ_FBIT__=15",
"__cpp_attributes=200809",
"__UINT_LEAST16_MAX__=0xffffU",
"__ATOMIC_ACQUIRE=2",
"__SFRACT_IBIT__=0",
"__FLT_MIN__=1.17549435e-38F",
"__GCC_IEC_559_COMPLEX=0",
"__BUILTIN_AVR_SLEEP=1",
"__BUILTIN_AVR_COUNTLSULLK=1",
"__cpp_aggregate_nsdmi=201304",
"__BUILTIN_AVR_COUNTLSULLR=1",
"__UFRACT_MAX__=0XFFFFP-16UR",
"__UINT_LEAST8_TYPE__=unsigned char",
"__DQ_FBIT__=63",
"__INTMAX_C(c)=c ## LL",
"__ULFRACT_FBIT__=32",
"__SACCUM_EPSILON__=0x1P-7HK",
"__CHAR_BIT__=8",
"__USQ_IBIT__=0",
"__UINT8_MAX__=0xff",
"__ACCUM_FBIT__=15",
"__WINT_MAX__=0x7fff",
"__FLT32_MIN_EXP__=(-125)",
"__cpp_static_assert=200410",
"__USFRACT_FBIT__=8",
"__ORDER_LITTLE_ENDIAN__=1234",
"__SIZE_MAX__=0xffffU",
"__WCHAR_MAX__=0x7fff",
"__LACCUM_IBIT__=32",
"__DBL_DENORM_MIN__=double(1.40129846e-45L)",
"__GCC_ATOMIC_CHAR_LOCK_FREE=1",
"__GCC_IEC_559=0",
"__FLT_EVAL_METHOD__=0",
"__BUILTIN_AVR_LLKBITS=1",
"__cpp_binary_literals=201304",
"__LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-47LLK",
"__GCC_ATOMIC_CHAR32_T_LOCK_FREE=1",
"__BUILTIN_AVR_HKBITS=1",
"__BUILTIN_AVR_BITSLLK=1",
"__FRACT_FBIT__=15",
"__BUILTIN_AVR_BITSLLR=1",
"__cpp_variadic_templates=200704",
"__UINT_FAST64_MAX__=0xffffffffffffffffULL",
"__SIG_ATOMIC_TYPE__=char",
"__BUILTIN_AVR_UHKBITS=1",
"__UACCUM_FBIT__=16",
"__DBL_MIN_10_EXP__=(-37)",
"__FINITE_MATH_ONLY__=0",
"__cpp_variable_templates=201304",
"__LFRACT_IBIT__=0",
"__GNUC_PATCHLEVEL__=0",
"__FLT32_HAS_DENORM__=1",
"__LFRACT_MAX__=0X7FFFFFFFP-31LR",
"__UINT_FAST8_MAX__=0xff",
"__has_include(STR)=__has_include__(STR)",
"__DEC64_MAX_EXP__=385",
"__INT8_C(c)=c",
"__INT_LEAST8_WIDTH__=8",
"__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
"__SA_FBIT__=15",
"__SHRT_MAX__=0x7fff",
"__LDBL_MAX__=3.40282347e+38L",
"__FRACT_MAX__=0X7FFFP-15R",
"__UFRACT_FBIT__=16",
"__UFRACT_MIN__=0.0UR",
"__UINT_LEAST8_MAX__=0xff",
"__GCC_ATOMIC_BOOL_LOCK_FREE=1",
"__UINTMAX_TYPE__=long long unsigned int",
"__LLFRACT_EPSILON__=0x1P-63LLR",
"__BUILTIN_AVR_DELAY_CYCLES=1",
"__DEC32_EPSILON__=1E-6DF",
"__FLT_EVAL_METHOD_TS_18661_3__=0",
"__UINT32_MAX__=0xffffffffUL",
"__GXX_EXPERIMENTAL_CXX0X__=1",
"__ULFRACT_MAX__=0XFFFFFFFFP-32ULR",
"__TA_IBIT__=16",
"__LDBL_MAX_EXP__=128",
"__WINT_MIN__=(-__WINT_MAX__ - 1)",
"__INT_LEAST16_WIDTH__=16",
"__ULLFRACT_MIN__=0.0ULLR",
"__SCHAR_MAX__=0x7f",
"__WCHAR_MIN__=(-__WCHAR_MAX__ - 1)",
"__INT64_C(c)=c ## LL",
"__DBL_DIG__=6",
"__GCC_ATOMIC_POINTER_LOCK_FREE=1",
"__AVR_HAVE_SPH__=1",
"__LLACCUM_MIN__=(-0X1P15LLK-0X1P15LLK)",
"__BUILTIN_AVR_KBITS=1",
"__BUILTIN_AVR_ABSK=1",
"__BUILTIN_AVR_ABSR=1",
"__SIZEOF_INT__=2",
"__SIZEOF_POINTER__=2",
"__GCC_ATOMIC_CHAR16_T_LOCK_FREE=1",
"__USACCUM_IBIT__=8",
"__USER_LABEL_PREFIX__",
"__STDC_HOSTED__=1",
"__LDBL_HAS_INFINITY__=1",
"__LFRACT_MIN__=(-0.5LR-0.5LR)",
"__HA_IBIT__=8",
"__FLT32_DIG__=6",
"__TQ_IBIT__=0",
"__FLT_EPSILON__=1.19209290e-7F",
"__GXX_WEAK__=1",
"__SHRT_WIDTH__=16",
"__USFRACT_IBIT__=0",
"__LDBL_MIN__=1.17549435e-38L",
"__FRACT_MIN__=(-0.5R-0.5R)",
"__AVR_SFR_OFFSET__=0x20",
"__DEC32_MAX__=9.999999E96DF",
"__cpp_threadsafe_static_init=200806",
"__DA_IBIT__=32",
"__INT32_MAX__=0x7fffffffL",
"__UQQ_FBIT__=8",
"__INT_WIDTH__=16",
"__SIZEOF_LONG__=4",
"__UACCUM_MAX__=0XFFFFFFFFP-16UK",
"__UINT16_C(c)=c ## U",
"__PTRDIFF_WIDTH__=16",
"__DECIMAL_DIG__=9",
"__LFRACT_EPSILON__=0x1P-31LR",
"__AVR_2_BYTE_PC__=1",
"__ULFRACT_MIN__=0.0ULR",
"__INTMAX_WIDTH__=64",
"__has_include_next(STR)=__has_include_next__(STR)",
"__BUILTIN_AVR_ULLRBITS=1",
"__LDBL_HAS_QUIET_NAN__=1",
"__ULACCUM_IBIT__=32",
"__UACCUM_EPSILON__=0x1P-16UK",
"__BUILTIN_AVR_SEI=1",
"__GNUC__=7",
"__ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-48ULLK",
"__cpp_delegating_constructors=200604",
"__HQ_IBIT__=0",
"__BUILTIN_AVR_SWAP=1",
"__FLT_HAS_DENORM__=1",
"__SIZEOF_LONG_DOUBLE__=4",
"__BIGGEST_ALIGNMENT__=1",
"__STDC_UTF_16__=1",
"__UINT24_MAX__=16777215UL",
"__BUILTIN_AVR_NOP=1",
"__GNUC_STDC_INLINE__=1",
"__DQ_IBIT__=0",
"__FLT32_HAS_INFINITY__=1",
"__DBL_MAX__=double(3.40282347e+38L)",
"__ULFRACT_IBIT__=0",
"__cpp_raw_strings=200710",
"__INT_FAST32_MAX__=0x7fffffffL",
"__DBL_HAS_INFINITY__=1",
"__INT64_MAX__=0x7fffffffffffffffLL",
"__ACCUM_IBIT__=16",
"__DEC32_MIN_EXP__=(-94)",
"__BUILTIN_AVR_UKBITS=1",
"__INTPTR_WIDTH__=16",
"__BUILTIN_AVR_FMULSU=1",
"__LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK",
"__INT_FAST16_TYPE__=int",
"__LDBL_HAS_DENORM__=1",
"__BUILTIN_AVR_BITSK=1",
"__BUILTIN_AVR_BITSR=1",
"__cplusplus=201402L",
"__cpp_ref_qualifiers=200710",
"__DEC128_MAX__=9.999999999999999999999999999999999E6144DL",
"__INT_LEAST32_MAX__=0x7fffffffL",
"__USING_SJLJ_EXCEPTIONS__=1",
"__DEC32_MIN__=1E-95DF",
"__ACCUM_MAX__=0X7FFFFFFFP-15K",
"__DEPRECATED=1",
"__cpp_rvalue_references=200610",
"__DBL_MAX_EXP__=128",
"__USACCUM_EPSILON__=0x1P-8UHK",
"__WCHAR_WIDTH__=16",
"__FLT32_MAX__=3.40282347e+38F32",
"__DEC128_EPSILON__=1E-33DL",
"__SFRACT_MAX__=0X7FP-7HR",
"__FRACT_IBIT__=0",
"__PTRDIFF_MAX__=0x7fff",
"__UACCUM_MIN__=0.0UK",
"__UACCUM_IBIT__=16",
"__BUILTIN_AVR_NOPS=1",
"__BUILTIN_AVR_WDR=1",
"__FLT32_HAS_QUIET_NAN__=1",
"__GNUG__=7",
"__LONG_LONG_MAX__=0x7fffffffffffffffLL",
"__SIZEOF_SIZE_T__=2",
"__ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK",
"__cpp_rvalue_reference=200610",
"__cpp_nsdmi=200809",
"__SIZEOF_WINT_T__=2",
"__LONG_LONG_WIDTH__=64",
"__cpp_initializer_lists=200806",
"__FLT32_MAX_EXP__=128",
"__SA_IBIT__=16",
"__ULLACCUM_MIN__=0.0ULLK",
"__BUILTIN_AVR_ROUNDUHK=1",
"__BUILTIN_AVR_ROUNDUHR=1",
"__cpp_hex_float=201603",
"__GXX_ABI_VERSION=1011",
"__INT24_MAX__=8388607L",
"__UTA_FBIT__=48",
"__FLT_MIN_EXP__=(-125)",
"__USFRACT_MAX__=0XFFP-8UHR",
"__UFRACT_IBIT__=0",
"__BUILTIN_AVR_ROUNDFX=1",
"__BUILTIN_AVR_ROUNDULK=1",
"__BUILTIN_AVR_ROUNDULR=1",
"__cpp_lambdas=200907",
"__BUILTIN_AVR_COUNTLSLLK=1",
"__BUILTIN_AVR_COUNTLSLLR=1",
"__BUILTIN_AVR_ROUNDHK=1",
"__INT_FAST64_TYPE__=long long int",
"__BUILTIN_AVR_ROUNDHR=1",
"__DBL_MIN__=double(1.17549435e-38L)",
"__BUILTIN_AVR_COUNTLSK=1",
"__BUILTIN_AVR_ROUNDLK=1",
"__BUILTIN_AVR_COUNTLSR=1",
"__BUILTIN_AVR_ROUNDLR=1",
"__LACCUM_MIN__=(-0X1P31LK-0X1P31LK)",
"__ULLACCUM_FBIT__=48",
"__BUILTIN_AVR_LKBITS=1",
"__ULLFRACT_EPSILON__=0x1P-64ULLR",
"__DEC128_MIN__=1E-6143DL",
"__REGISTER_PREFIX__",
"__UINT16_MAX__=0xffffU",
"__DBL_HAS_DENORM__=1",
"__BUILTIN_AVR_ULKBITS=1",
"__ACCUM_MIN__=(-0X1P15K-0X1P15K)",
"__AVR_ARCH__=2",
"__SQ_IBIT__=0",
"__FLT32_MIN__=1.17549435e-38F32",
"__UINT8_TYPE__=unsigned char",
"__BUILTIN_AVR_ROUNDUK=1",
"__BUILTIN_AVR_ROUNDUR=1",
"__UHA_FBIT__=8",
"__NO_INLINE__=1",
"__SFRACT_MIN__=(-0.5HR-0.5HR)",
"__UTQ_FBIT__=128",
"__FLT_MANT_DIG__=24",
"__LDBL_DECIMAL_DIG__=9",
"__VERSION__=\"7.3.0\"",
"__UINT64_C(c)=c ## ULL",
"__ULLFRACT_FBIT__=64",
"__cpp_unicode_characters=200704",
"__FRACT_EPSILON__=0x1P-15R",
"__ULACCUM_MIN__=0.0ULK",
"__UDA_FBIT__=32",
"__cpp_decltype_auto=201304",
"__LLACCUM_EPSILON__=0x1P-47LLK",
"__GCC_ATOMIC_INT_LOCK_FREE=1",
"__FLT32_MANT_DIG__=24",
"__BUILTIN_AVR_BITSUHK=1",
"__BUILTIN_AVR_BITSUHR=1",
"__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__USFRACT_MIN__=0.0UHR",
"__BUILTIN_AVR_BITSULK=1",
"__ULLACCUM_IBIT__=16",
"__BUILTIN_AVR_BITSULR=1",
"__UQQ_IBIT__=0",
"__BUILTIN_AVR_LLRBITS=1",
"__SCHAR_WIDTH__=8",
"__BUILTIN_AVR_BITSULLK=1",
"__BUILTIN_AVR_BITSULLR=1",
"__INT32_C(c)=c ## L",
"__DEC64_EPSILON__=1E-15DD",
"__ORDER_PDP_ENDIAN__=3412",
"__DEC128_MIN_EXP__=(-6142)",
"__UHQ_FBIT__=16",
"__LLACCUM_FBIT__=47",
"__FLT32_MAX_10_EXP__=38",
"__BUILTIN_AVR_ROUNDULLK=1",
"__BUILTIN_AVR_ROUNDULLR=1",
"__INT_FAST32_TYPE__=long int",
"__BUILTIN_AVR_HRBITS=1",
"__UINT_LEAST16_TYPE__=unsigned int",
"__BUILTIN_AVR_UHRBITS=1",
"__INT16_MAX__=0x7fff",
"__SIZE_TYPE__=unsigned int",
"__UINT64_MAX__=0xffffffffffffffffULL",
"__UDQ_FBIT__=64",
"__INT8_TYPE__=signed char",
"__cpp_digit_separators=201309",
"__ELF__=1",
"__ULFRACT_EPSILON__=0x1P-32ULR",
"__LLFRACT_FBIT__=63",
"__FLT_RADIX__=2",
"__INT_LEAST16_TYPE__=int",
"__BUILTIN_AVR_ABSFX=1",
"__LDBL_EPSILON__=1.19209290e-7L",
"__UINTMAX_C(c)=c ## ULL",
"__INT24_MIN__=(-__INT24_MAX__-1)",
"__SACCUM_MAX__=0X7FFFP-7HK",
"__BUILTIN_AVR_ABSHR=1",
"__SIG_ATOMIC_MAX__=0x7f",
"__GCC_ATOMIC_WCHAR_T_LOCK_FREE=1",
"__cpp_sized_deallocation=201309",
"__SIZEOF_PTRDIFF_T__=2",
"__AVR=1",
"__BUILTIN_AVR_ABSLK=1",
"__BUILTIN_AVR_ABSLR=1",
"__LACCUM_EPSILON__=0x1P-31LK",
"__DEC32_SUBNORMAL_MIN__=0.000001E-95DF",
"__INT_FAST16_MAX__=0x7fff",
"__UINT_FAST32_MAX__=0xffffffffUL",
"__UINT_LEAST64_TYPE__=long long unsigned int",
"__USACCUM_MAX__=0XFFFFP-8UHK",
"__SFRACT_EPSILON__=0x1P-7HR",
"__FLT_HAS_QUIET_NAN__=1",
"__FLT_MAX_10_EXP__=38",
"__LONG_MAX__=0x7fffffffL",
"__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL",
"__FLT_HAS_INFINITY__=1",
"__cpp_unicode_literals=200710",
"__USA_FBIT__=16",
"__UINT_FAST16_TYPE__=unsigned int",
"__DEC64_MAX__=9.999999999999999E384DD",
"__INT_FAST32_WIDTH__=32",
"__BUILTIN_AVR_RBITS=1",
"__CHAR16_TYPE__=unsigned int",
"__PRAGMA_REDEFINE_EXTNAME=1",
"__SIZE_WIDTH__=16",
"__INT_LEAST16_MAX__=0x7fff",
"__DEC64_MANT_DIG__=16",
"__UINT_LEAST32_MAX__=0xffffffffUL",
"__SACCUM_FBIT__=7",
"__FLT32_DENORM_MIN__=1.40129846e-45F32",
"__GCC_ATOMIC_LONG_LOCK_FREE=1",
"__SIG_ATOMIC_WIDTH__=8",
"__INT_LEAST64_TYPE__=long long int",
"__INT16_TYPE__=int",
"__INT_LEAST8_TYPE__=signed char",
"__SQ_FBIT__=31",
"__DEC32_MAX_EXP__=97",
"__INT_FAST8_MAX__=0x7f",
"__INTPTR_MAX__=0x7fff",
"__QQ_FBIT__=7",
"__cpp_range_based_for=200907",
"__UTA_IBIT__=16",
"__AVR_ERRATA_SKIP__=1",
"__FLT32_MIN_10_EXP__=(-37)",
"__LDBL_MANT_DIG__=24",
"__SFRACT_FBIT__=7",
"__SACCUM_MIN__=(-0X1P7HK-0X1P7HK)",
"__DBL_HAS_QUIET_NAN__=1",
"__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
"AVR=1",
"__BUILTIN_AVR_FMULS=1",
"__cpp_return_type_deduction=201304",
"__INTPTR_TYPE__=int",
"__UINT16_TYPE__=unsigned int",
"__WCHAR_TYPE__=int",
"__SIZEOF_FLOAT__=4",
"__AVR__=1",
"__BUILTIN_AVR_INSERT_BITS=1",
"__USQ_FBIT__=32",
"__UINTPTR_MAX__=0xffffU",
"__INT_FAST64_WIDTH__=64",
"__DEC64_MIN_EXP__=(-382)",
"__cpp_decltype=200707",
"__FLT32_DECIMAL_DIG__=9",
"__INT_FAST64_MAX__=0x7fffffffffffffffLL",
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
"__FLT_DIG__=6",
"__UINT_FAST64_TYPE__=long long unsigned int",
"__BUILTIN_AVR_BITSHK=1",
"__BUILTIN_AVR_BITSHR=1",
"__INT_MAX__=0x7fff",
"__LACCUM_FBIT__=31",
"__USACCUM_MIN__=0.0UHK",
"__UHA_IBIT__=8",
"__INT64_TYPE__=long long int",
"__BUILTIN_AVR_BITSLK=1",
"__BUILTIN_AVR_BITSLR=1",
"__FLT_MAX_EXP__=128",
"__UTQ_IBIT__=0",
"__DBL_MANT_DIG__=24",
"__cpp_inheriting_constructors=201511",
"__BUILTIN_AVR_ULLKBITS=1",
"__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
"__DEC64_MIN__=1E-383DD",
"__WINT_TYPE__=int",
"__UINT_LEAST32_TYPE__=long unsigned int",
"__SIZEOF_SHORT__=2",
"__ULLFRACT_IBIT__=0",
"__LDBL_MIN_EXP__=(-125)",
"__UDA_IBIT__=32",
"__WINT_WIDTH__=16",
"__INT_LEAST8_MAX__=0x7f",
"__LFRACT_FBIT__=31",
"__LDBL_MAX_10_EXP__=38",
"__ATOMIC_RELAXED=0",
"__DBL_EPSILON__=double(1.19209290e-7L)",
"__BUILTIN_AVR_BITSUK=1",
"__BUILTIN_AVR_BITSUR=1",
"__UINT8_C(c)=c",
"__INT_LEAST32_TYPE__=long int",
"__BUILTIN_AVR_URBITS=1",
"__SIZEOF_WCHAR_T__=2",
"__LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR",
"__TQ_FBIT__=127",
"__INT_FAST8_TYPE__=signed char",
"__ULLACCUM_EPSILON__=0x1P-48ULLK",
"__BUILTIN_AVR_ROUNDK=1",
"__BUILTIN_AVR_ROUNDR=1",
"__UHQ_IBIT__=0",
"__LLACCUM_IBIT__=16",
"__FLT32_EPSILON__=1.19209290e-7F32",
"__DBL_DECIMAL_DIG__=9",
"__STDC_UTF_32__=1",
"__INT_FAST8_WIDTH__=8",
"__DEC_EVAL_METHOD__=2",
"__TA_FBIT__=47",
"__UDQ_IBIT__=0",
"__ORDER_BIG_ENDIAN__=4321",
"__cpp_runtime_arrays=198712",
"__WITH_AVRLIBC__=1",
"__UINT64_TYPE__=long long unsigned int",
"__ACCUM_EPSILON__=0x1P-15K",
"__UINT32_C(c)=c ## UL",
"__BUILTIN_AVR_COUNTLSUHK=1",
"__INTMAX_MAX__=0x7fffffffffffffffLL",
"__cpp_alias_templates=200704",
"__BUILTIN_AVR_COUNTLSUHR=1",
"__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__FLT_DENORM_MIN__=1.40129846e-45F",
"__LLFRACT_IBIT__=0",
"__INT8_MAX__=0x7f",
"__LONG_WIDTH__=32",
"__UINT_FAST32_TYPE__=long unsigned int",
"__CHAR32_TYPE__=long unsigned int",
"__BUILTIN_AVR_COUNTLSULK=1",
"__BUILTIN_AVR_COUNTLSULR=1",
"__FLT_MAX__=3.40282347e+38F",
"__cpp_constexpr=201304",
"__USACCUM_FBIT__=8",
"__BUILTIN_AVR_COUNTLSFX=1",
"__INT32_TYPE__=long int",
"__SIZEOF_DOUBLE__=4",
"__FLT_MIN_10_EXP__=(-37)",
"__UFRACT_EPSILON__=0x1P-16UR",
"__INT_LEAST32_WIDTH__=32",
"__BUILTIN_AVR_COUNTLSHK=1",
"__BUILTIN_AVR_COUNTLSHR=1",
"__INTMAX_TYPE__=long long int",
"__BUILTIN_AVR_ABSLLK=1",
"__BUILTIN_AVR_ABSLLR=1",
"__DEC128_MAX_EXP__=6145",
"__AVR_HAVE_16BIT_SP__=1",
"__ATOMIC_CONSUME=1",
"__GNUC_MINOR__=3",
"__INT_FAST16_WIDTH__=16",
"__UINTMAX_MAX__=0xffffffffffffffffULL",
"__DEC32_MANT_DIG__=7",
"__HA_FBIT__=7",
"__BUILTIN_AVR_COUNTLSLK=1",
"__BUILTIN_AVR_COUNTLSLR=1",
"__BUILTIN_AVR_CLI=1",
"__DBL_MAX_10_EXP__=38",
"__LDBL_DENORM_MIN__=1.40129846e-45L",
"__INT16_C(c)=c",
"__cpp_generic_lambdas=201304",
"__STDC__=1",
"__PTRDIFF_TYPE__=int",
"__LLFRACT_MIN__=(-0.5LLR-0.5LLR)",
"__BUILTIN_AVR_LRBITS=1",
"__ATOMIC_SEQ_CST=5",
"__DA_FBIT__=31",
"__UINT32_TYPE__=long unsigned int",
"__BUILTIN_AVR_ROUNDLLK=1",
"__UINTPTR_TYPE__=unsigned int",
"__BUILTIN_AVR_ROUNDLLR=1",
"__USA_IBIT__=16",
"__BUILTIN_AVR_ULRBITS=1",
"__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD",
"__DEC128_MANT_DIG__=34",
"__LDBL_MIN_10_EXP__=(-37)",
"__BUILTIN_AVR_COUNTLSUK=1",
"__BUILTIN_AVR_COUNTLSUR=1",
"__SIZEOF_LONG_LONG__=8",
"__ULACCUM_EPSILON__=0x1P-32ULK",
"__cpp_user_defined_literals=200809",
"__SACCUM_IBIT__=8",
"__GCC_ATOMIC_LLONG_LOCK_FREE=1",
"__LDBL_DIG__=6",
"__FLT_DECIMAL_DIG__=9",
"__UINT_FAST16_MAX__=0xffffU",
"__GCC_ATOMIC_SHORT_LOCK_FREE=1",
"__BUILTIN_AVR_ABSHK=1",
"__BUILTIN_AVR_FLASH_SEGMENT=1",
"__INT_LEAST64_WIDTH__=64",
"__ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR",
"__UINT_FAST8_TYPE__=unsigned char",
"__USFRACT_EPSILON__=0x1P-8UHR",
"__ULACCUM_FBIT__=32",
"__QQ_IBIT__=0",
"__cpp_init_captures=201304",
"__ATOMIC_ACQ_REL=4",
"__ATOMIC_RELEASE=3",
"__BUILTIN_AVR_FMUL=1",
"USBCON"
]
}
]
}

View File

@ -1,70 +1,112 @@
/*
This Software is used as IO Expansion for LinuxCNC. Here i am using an Mega 2560.
It can use as many digital & analog Inputs, Outputs and PWM Outputs as your Arduino can handle.
I also generate "virtual Pins" by using latching Potentiometers, which are connected to one analog Pin, but are read in Hal as individual Pins.
The Send Protocol is <Signal><Pin Number>:<Pin State>
Inputs are encoded with Letter 'I'
Keep alive Signal is send with Letter 'E'
Outputs are encoded with Letter 'O'
PWM Outputs are encoded with Letter 'P'
Analog Inputs are encoded with Letter 'A'
Latching Potentiometers are encoded with Letter 'L'
Absolute Encoder input is encoded with Letter 'K'
*/
//###IO's### //###IO's###
#define POTI #define INPUTS
#ifdef POTI #ifdef INPUTS
const int PotiNo = 1; const int Inputs = 16; //number of inputs using internal Pullup resistor. (short to ground to trigger)
int PotiPins[] = {A3}; //Knob Potentiometer for SpindleSpeed in manual mode int InPinmap[] = {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48};
#endif #endif
#define LPOTI
#ifdef LPOTI #define OUTPUTS
const int LPotiNo = 2; #ifdef OUTPUTS
int LPotiPins[LPotiNo][2] = { const int Outputs = 9; //number of outputs
int OutPinmap[] = {10,9,8,7,6,5,4,3,2,21};
#endif
#define PWMOUTPUTS
#ifdef PWMOUTPUTS
const int PwmOutput = 2; //number of outputs
int PwmOutPinmap[] = {12,11};
#endif
#define AINPUTS
#ifdef AINPUTS
const int AInputs = 1;
int AInPinmap[] = {A3}; //Potentiometer for SpindleSpeed override
#endif
#define LPOTIS
#ifdef LPOTIS
const int LPotis = 2;
int LPotiPins[LPotis][2] = {
{A1,8}, //Latching Knob Spindle Overdrive on A1, has 9 Positions {A1,8}, //Latching Knob Spindle Overdrive on A1, has 9 Positions
{A2,3} //Latching Knob Feed Resolution on A2, has 4 Positions {A2,3} //Latching Knob Feed Resolution on A2, has 4 Positions
}; };
#endif #endif
#define ABSENCODER #define ABSENCODER
#ifdef ABSENCODER #ifdef ABSENCODER
int AbsEncPins[] = {27,28,31,29,30}; //1,2,4,8,16 const int AbsEncPins[] = {27,28,31,29,30}; //1,2,4,8,16
#endif #endif
#define INPUTS #define STATUSLED
#ifdef INPUTS
const int InputNo = 16; //number of inputs using internal Pullup resistor. (short to ground to trigger)
int InPins[] = {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48};
#endif
#define OUTPUTS
#ifdef OUTPUTS
const int OutputNo = 22; //number of outputs
int OutPins[] = {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48};
#endif
#define STATUSLED
#ifdef STATUSLED #ifdef STATUSLED
const int StatLedPin = 13; //Pin for Status LED const int StatLedPin = 13; //Pin for Status LED
const int StatLedErrDel[] = {1000,10}; //Blink Timing for Status LED Error (no connection) const int StatLedErrDel[] = {1000,10}; //Blink Timing for Status LED Error (no connection)
#endif #endif
//###Misc Settings###
const int timeout = 10000; // timeout after 10 sec not receiving Stuff
#define DEBUG
//Variables for Saving States //Variables for Saving States
#ifdef POTI #ifdef INPUTS
int oldPoti[PotiNo]; int InState[Inputs];
int oldInState[Inputs];
#endif #endif
#ifdef LPOTI #ifdef OUTPUTS
int oldLpoti[LPotiNo]; int OutState[Outputs];
int oldOutState[Outputs];
#endif
#ifdef AINPUTS
int oldAinput[AInputs];
#endif
#ifdef LPOTIS
int oldLpoti[LPotis];
#endif #endif
#ifdef ABSENCODER #ifdef ABSENCODER
int oldAbsEncState; int oldAbsEncState;
#endif #endif
#ifdef INPUTS
int InState[InputNo];
int oldInState[InputNo];
#endif
#ifdef OUTPUTS
int OutState[OutputNo];
int oldOutState[OutputNo];
#endif
int FirstSend = 0;
//### global Variables setup###
//Diese variablen nicht von außen anfassen
unsigned long oldmillis = 0; unsigned long oldmillis = 0;
unsigned long newcom = 0;
unsigned long lastcom = 0;
#define STATE_CMD 0
#define STATE_IO 1
#define STATE_VALUE 2
byte state = STATE_CMD;
char inputbuffer[5];
byte bufferIndex = 0;
char cmd = 0;
uint16_t io = 0;
uint16_t value = 0;
void setup() { void setup() {
@ -78,16 +120,17 @@ void setup() {
pinMode(AbsEncPins[4], INPUT_PULLUP); pinMode(AbsEncPins[4], INPUT_PULLUP);
#endif #endif
#ifdef INPUT #ifdef INPUTS
//setting Inputs with internal Pullup Resistors //setting Inputs with internal Pullup Resistors
for(int i= 0; i<InputNo;i++){ for(int i= 0; i<Inputs;i++){
pinMode(InPins[i], INPUT_PULLUP); pinMode(InPinmap[i], INPUT_PULLUP);
oldInState[i] = -1; oldInState[i] = -1;
} }
#endif #endif
#ifdef OUTPUT
for(int o= 0; o<OutputNo;o++){ #ifdef OUTPUTS
pinMode(OutPins[o], OUTPUT); for(int o= 0; o<Outputs;o++){
pinMode(OutPinmap[o], OUTPUT);
oldOutState[o] = 0; oldOutState[o] = 0;
} }
#endif #endif
@ -105,7 +148,12 @@ void setup() {
StatLedErr(); StatLedErr();
#endif #endif
} }
if (Serial){delay(1000);} if (Serial){
delay(1000);
flushSerial();
Serial.println("Ready");
}
} }
@ -116,15 +164,23 @@ void loop() {
#endif #endif
} }
readCommands();
#ifdef INPUTS
// readInputs();
#endif
} }
void comalive(){
if(millis() - lastcom > timeout){
StatLedErr();
}
}
void StatLedErr(){
int StatLedErr(){
unsigned long newMillis = millis(); unsigned long newMillis = millis();
if (newMillis - oldmillis >= StatLedErrDel[0]){ if (newMillis - oldmillis >= StatLedErrDel[0]){
@ -139,10 +195,51 @@ int StatLedErr(){
} }
void sendData(char sig, int pin, int state){
Serial.print(sig);
Serial.print(pin);
Serial.print(":");
Serial.println(state);
}
int writeOutputs(){ void flushSerial(){
for(int x = 0; x<OutputNo;x++){ while (Serial.available() > 0) {
digitalWrite(OutPins[x], OutState[x]); Serial.read();
}
}
/*
void readData(){
int pin = 0;
int state = 0;
byte terminated = false;
if (Serial.available() > 0) {
char inChar = Serial.read();
Serial.println(inChar);
if (inChar == 'o'){
Serial.println("O erkannt");
while (!terminated && comalive()){
inChar = Serial.read();
if (inChar == ':'){
}
}
if (inChar == 'p'){
Serial.println("p erkannt");
sig = 'p';
}
}
}
}
*/
void writeOutputs(){
for(int x = 0; x<Outputs;x++){
digitalWrite(OutPinmap[x], OutState[x]);
} }
} }
@ -151,85 +248,32 @@ int readLPoti(int Pin,int Pos, int Stat){
int var = analogRead(Pin)+20; //giving it some margin so Numbers dont jitter int var = analogRead(Pin)+20; //giving it some margin so Numbers dont jitter
Pos = 1024/Pos; Pos = 1024/Pos;
var = var/Pos; var = var/Pos;
if(var != Stat){ return (Stat);
Stat = var;
Serial.print("LP");
Serial.print(Pin);
Serial.print(":");
Serial.println(Stat);
}
return (Stat);
} }
int readAIn(int Pin){
/* unsigned long var = 0;
int listenSerial(){
long rec=0;
if(Serial.available()){
rec = Serial.parseInt();
if(rec >= 10 && rec % 2){
rec --;
rec = rec/10;
if(rec < Buttons){
OutState[rec]=1;
}
}
if(rec >= 10 && !(rec % 2)){
rec = rec/10;
if(rec < Buttons){
OutState[rec]=0;
}
}
rec= 0;
}
}
int readPoti(int Pin){
unsigned long var = 0;;
for(int i= 0;i<500; i++){ for(int i= 0;i<500; i++){
var = var+ analogRead(Pin); var = var+ analogRead(Pin);
} }
var = var / 500; var = var / 500;
if (SpSpSt!=var){
Serial.print("Pt");
Serial.print(Pin);
Serial.print(":");
Serial.println(var);
SpSpSt = var;
}
return (var); return (var);
} }
void readInputs(){
for(int i= 0;i<Inputs; i++){
int State = digitalRead(InPinmap[i]);
int readInputs(){ if(InState[i]!= State){
for(int i= 0;i<Buttons; i++){ InState[i] = State;
int State = digitalRead(Button[i]); sendData('I',InPinmap[i],InState[i]);
if(ButtonState[i]!= State){
ButtonState[i] = State;
Serial.print("I");
Serial.print(i);
Serial.print(":");
Serial.println(ButtonState[i]);
} }
} }
} }
/*
int readAbsKnob(){ int readAbsKnob(){
int var = 0; int var = 0;
if(digitalRead(DI0)==1){ if(digitalRead(DI0)==1){
var += 1; var += 1;
} }
@ -245,13 +289,70 @@ int readAbsKnob(){
if(digitalRead(DI4)==1){ if(digitalRead(DI4)==1){
var += 16; var += 16;
} }
if(var != oldvar){ if(var != oldvar){
Serial.print("AK:"); Serial.print("AK:");
Serial.println(var); Serial.println(var);
} }
oldvar = var; oldvar = var;
return (var); return (var);
}
*/ */
void commandReceived(char cmd, uint16_t io, uint16_t value){
switch(state){
case
} Serial.print(cmd);
Serial.print(io);
Serial.print(":");
Serial.println(value);
}
int isCmdChar(char cmd){
if(cmd == 'O'||cmd == 'P'||cmd == 'E') {return true;}
else{return false;}
}
void readCommands(){
byte current;
while(Serial.available() > 0){
current = Serial.read();
switch(state){
case STATE_CMD:
if(isCmdChar(current)){
cmd = current;
state = STATE_IO;
bufferIndex = 0;
}
break;
case STATE_IO:
if(isDigit(current)){
inputbuffer[bufferIndex++] = current;
}else if(current == ':'){
inputbuffer[bufferIndex] = 0;
io = atoi(inputbuffer);
state = STATE_VALUE;
bufferIndex = 0;
}else{
Serial.print("Ungültiges zeichen: ");
Serial.println(current);
}
break;
case STATE_VALUE:
if(isDigit(current)){
inputbuffer[bufferIndex++] = current;
}else if(current == '\n'){
inputbuffer[bufferIndex] = 0;
value = atoi(inputbuffer);
commandReceived(cmd, io, value);
state = STATE_CMD;
}else{
Serial.print("Ungültiges zeichen: ");
Serial.println(current);
}
break;
}
}
}

View File

@ -51,8 +51,8 @@ AInPinmap = [79]
# Set how many Latching Analog Inputs you have programmed in Arduino and how many latches there are # Set how many Latching Analog Inputs you have programmed in Arduino and how many latches there are
LPotiKnobs = 2 LPoti = 2
LPotiKnobLatches = [8,4] LPotiLatches = [9,4]
# Set if you have an Absolute Encoder Knob and how many positions it has (only one supported, as i don't think they are very common and propably nobody uses these anyway) # Set if you have an Absolute Encoder Knob and how many positions it has (only one supported, as i don't think they are very common and propably nobody uses these anyway)
AbsKnob = 1 AbsKnob = 1
@ -69,40 +69,29 @@ for port in range(Inputs):
# setup Output halpins # setup Output halpins
for port in range(Outputs): for port in range(Outputs):
c.newpin("dOut-%02d" % OutPinmap[port], hal.HAL_BIT, hal.HAL_IN) c.newpin("dOut-%02d" % OutPinmap[port], hal.HAL_BIT, hal.HAL_OUT)
# setup Pwm Output halpins # setup Pwm Output halpins
for port in range(PwmOutputs): for port in range(PwmOutputs):
c.newpin("PwmOut-%02d" % PwmOutPinmap[port], hal.HAL_FLOAT, hal.HAL_IN) c.newpin("PwmOut-%02d" % PwmOutPinmap[port], hal.HAL_FLOAT, hal.HAL_OUT)
# setup Analog Input halpins # setup Analog Input halpins
for port in range(AInputs): for port in range(AInputs):
c.newpin("aIn-%02d" % AInPinmap[port], hal.HAL_FLOAT, hal.HAL_IN) c.newpin("aIn-%02d" % AInPinmap[port], hal.HAL_FLOAT, hal.HAL_IN)
# setup Latching Poti halpins # setup Latching Poti halpins
for latches in range(LPotiKnobs): for latches in range(LPoti):
for port in range(LPotiKnobLatches[latches]): for port in range(LPotiLatches[latches]):
c.newpin("LPotiKnob-%02d" % [port], hal.HAL_BIT, hal.HAL_IN) c.newpin("LPoti-%02d" % [port], hal.HAL_BIT, hal.HAL_IN)
# setup Absolute Encoder Knob halpins # setup Absolute Encoder Knob halpins
if AbsKnob: if AbsKnob:
for port in range(AbsKnobPos): for port in range(AbsKnobPos):
c.newpin("LPotiKnob-%02d" % [port], hal.HAL_BIT, hal.HAL_IN) c.newpin("AbsKnobPos-%02d" % [port], hal.HAL_BIT, hal.HAL_IN)
#c.newpin("analog-in-%02d" % port, hal.HAL_FLOAT, hal.HAL_OUT)
#c.newparam("analog-in-%02d-offset" % port, hal.HAL_FLOAT, hal.HAL_RW)
#c.newparam("analog-in-%02d-gain" % port, hal.HAL_FLOAT, hal.HAL_RW)
c.ready() c.ready()
######## Functions ########
def readinput(input_str): def readinput(input_str):
for i in range(50): for i in range(50):
@ -126,7 +115,7 @@ def extract_nbr(input_str):
######## Detect Serial connection and blink Status LED if connection lost -todo ########
#try: #try:
arduino = serial.Serial('/dev/ttyACM0', 9600, timeout=1, xonxoff=False, rtscts=False, dsrdtr=True) arduino = serial.Serial('/dev/ttyACM0', 9600, timeout=1, xonxoff=False, rtscts=False, dsrdtr=True)
@ -135,32 +124,36 @@ arduino = serial.Serial('/dev/ttyACM0', 9600, timeout=1, xonxoff=False, rtscts=F
while True: while True:
try: try:
data = arduino.readline().decode('utf-8') data = arduino.readline().decode('utf-8')
# I127:1
data = data.split(":",1) data = data.split(":",1)
#[I127]["1"]
if len(data) == 2: if len(data) == 2:
cmd = data[0][0]
io = extract_nbr(data[0])
value = extract_nbr(data[1])
data[1] = extract_nbr(data[1]) data[1] = extract_nbr(data[1])
if data[1]<0: data[1] = 0 if data[1]<0: data[1] = 0
if data[0] == "Pt57": if data[0] == "I":
c.SpSp = data[1] c.dIn = data[1]
elif data[0] == "LP55": elif data[0] == "aI":
c.SpOd = data[1] c.aIn = data[1]
elif data[0] == "LP56": elif data[0] == "lP":
c.FdRes = data[1] for port in range(LPotiLatches[latches]):
if ("LPoti-%02d %" [port]) == data[1]:
#s
else:
c.("LPoti-%02d %" [port]) = 0
c.LPotiKnob = data[1]
elif data[0] == "AK": elif data[0] == "AK":
c.AK = data[1] c.AbsKnob = data[1]
else: pass else: pass
finally: finally:
pass pass
"""except :
print("Lost Connection")
finally :
# serial.close
print("Program closed")
"""