arduino stuffs
car go drive
| -rw-r--r-- | car_driver/.clang-format | 2 | ||||
| -rw-r--r-- | car_driver/.vscode/arduino.json | 6 | ||||
| -rw-r--r-- | car_driver/.vscode/c_cpp_properties.json | 537 | ||||
| -rw-r--r-- | car_driver/.vscode/settings.json | 4 | ||||
| -rw-r--r-- | car_driver/arduino/arduino.ino | 105 | ||||
| -rw-r--r-- | car_driver/arduino/drive.ino | 78 | ||||
| -rw-r--r-- | car_driver/car_driver.ino | 132 | ||||
| -rw-r--r-- | car_driver/move.ino | 241 | ||||
| -rw-r--r-- | car_driver/processing/processing.pde | 45 |
9 files changed, 777 insertions, 373 deletions
diff --git a/car_driver/.clang-format b/car_driver/.clang-format new file mode 100644 index 0000000..0296909 --- /dev/null +++ b/car_driver/.clang-format @@ -0,0 +1,2 @@ + +"BreakBeforeBraces": Attach
\ No newline at end of file diff --git a/car_driver/.vscode/arduino.json b/car_driver/.vscode/arduino.json new file mode 100644 index 0000000..f6fba73 --- /dev/null +++ b/car_driver/.vscode/arduino.json @@ -0,0 +1,6 @@ +{ + "board": "arduino:avr:uno", + "sketch": "arduino/arduino.ino", + "port": "/dev/ttyACM0", + "output": "/tmp/arduinologs" +}
\ No newline at end of file diff --git a/car_driver/.vscode/c_cpp_properties.json b/car_driver/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..3d8779a --- /dev/null +++ b/car_driver/.vscode/c_cpp_properties.json @@ -0,0 +1,537 @@ +{ + "version": 4, + "configurations": [ + { + "name": "Arduino", + "compilerPath": "/home/bendn/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/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": [ + "/home/bendn/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino", + "/home/bendn/.arduino15/packages/arduino/hardware/avr/1.8.4/variants/standard", + "/home/bendn/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include", + "/home/bendn/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include-fixed", + "/home/bendn/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include" + ], + "forcedInclude": [ + "/home/bendn/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Arduino.h" + ], + "cStandard": "c11", + "cppStandard": "c++11", + "defines": [ + "F_CPU=16000000L", + "ARDUINO=10607", + "ARDUINO_AVR_UNO", + "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" + ] + } + ] +}
\ No newline at end of file diff --git a/car_driver/.vscode/settings.json b/car_driver/.vscode/settings.json new file mode 100644 index 0000000..d3ba527 --- /dev/null +++ b/car_driver/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "C_Cpp.errorSquiggles": "Disabled", + "arduino.defaultBaudRate": 9600 +} diff --git a/car_driver/arduino/arduino.ino b/car_driver/arduino/arduino.ino new file mode 100644 index 0000000..a0afd59 --- /dev/null +++ b/car_driver/arduino/arduino.ino @@ -0,0 +1,105 @@ +#define HEADER 'H' + +#define TOTAL_BYTES 2 // hmmm +#define number_of_keys 5 + +enum { MOV_LEFT, MOV_RIGHT, MOV_FORWARD, MOV_BACK, MOV_ROTATE, MOV_STOP }; + +const char tags[] = {'w', 'a', 's', 'd', 'v'}; +const char *states[] = {"Left", "Right", "Forward", "Back", "Rotate", "Stop"}; +const int DIR_LEFT = 0; +const int DIR_RIGHT = 1; +const int DIR_CENTER = 2; + +const char *locationString[] = {"Left", "Right", "Center"}; // labels for debug + +const int LED_PIN = 13; + +int commandState = MOV_STOP; // what robot is told to do + +const char MOVE_FORWARD = 'w'; // move forward +const char MOVE_LEFT = 'a'; // move left +const char MOVE_RIGHT = 'd'; // move right +const char MOVE_BACK = 's'; // move back +const char STOP = 'v'; // stop + +void setup() { + Serial.begin(9600); + Serial.println("initialized"); + begin(); +} + +void loop() { + if (Serial.available() >= TOTAL_BYTES) { + // sample format: Hv or Hd, etc. + char header = Serial.read(); + if (header == HEADER) { // done reading header, next letter is a tag + char tag = Serial.read(); // read the first tag + if (is_tag_valid(tag) == true) { + Serial.write(tag); + Serial.println(" recieved"); + processCommand(tag); // process the command + } else { + Serial.write(tag); + Serial.println(": unknown tag"); + } + } else { + Serial.print("unknown header: "); + Serial.println(header); + } + } +} + +bool is_tag_valid(char tag) { + for (int i = 0; i < number_of_keys; i++) { + Serial.print(tags[i]); + if (tag == tags[i]) { + return true; + } + } + return false; +} + +void changeCmdState(int newState) { + if (newState != commandState) { + Serial.print("cc"); + Serial.print(states[commandState]); + Serial.print("->"); + Serial.println(states[newState]); + commandState = newState; + } +} + +void processCommand(char cmd) { + switch (cmd) { + case STOP: { + changeCmdState(MOV_STOP); + stop(); + break; + } + case MOVE_LEFT: { + changeCmdState(MOV_ROTATE); + left(); + break; + } + case MOVE_RIGHT: { + changeCmdState(MOV_ROTATE); + right(); + break; + } + case MOVE_FORWARD: { + changeCmdState(MOV_FORWARD); + forward(); + } break; + case MOVE_BACK: { // s is hard without 40 buttons + changeCmdState(MOV_BACK); + backward(); + break; + } + default: + Serial.print('['); + Serial.write(cmd); + Serial.println("] Ignored"); + break; + } +}
\ No newline at end of file diff --git a/car_driver/arduino/drive.ino b/car_driver/arduino/drive.ino new file mode 100644 index 0000000..718b532 --- /dev/null +++ b/car_driver/arduino/drive.ino @@ -0,0 +1,78 @@ +#define MotorA 12 // left motor +#define BrakeMotorA 9 +#define MotorASpeed 3 + +#define MotorB 13 // right motor +#define BrakeMotorB 8 +#define MotorBSpeed 11 + +#define SPEED 255 // speed of motors + +void begin() { + // Setup Channel A + pinMode(MotorA, OUTPUT); + pinMode(BrakeMotorA, OUTPUT); + + // Setup Channel B + pinMode(MotorB, OUTPUT); + pinMode(BrakeMotorB, OUTPUT); +} + +void motorAForward(int speed) { + digitalWrite(MotorA, HIGH); // forward + digitalWrite(BrakeMotorA, LOW); // brake off + analogWrite(MotorASpeed, speed); // speed of motor +} + +void motorBForward(int speed) { + digitalWrite(MotorB, HIGH); // forward + digitalWrite(BrakeMotorB, LOW); // brake off + analogWrite(MotorBSpeed, speed); // speed of motor +} + +void motorBBackward(int speed) { + digitalWrite(MotorB, LOW); // backwards + digitalWrite(BrakeMotorB, LOW); // brake off + analogWrite(MotorBSpeed, speed); // speed of motor +} + +void motorABackward(int speed) { + digitalWrite(MotorA, LOW); // backwards + digitalWrite(BrakeMotorA, LOW); // brake off + analogWrite(MotorASpeed, speed); // speed of motor +} + +void forward() { + motorAForward(SPEED); + motorBForward(SPEED); +} + +void backward() { + motorABackward(SPEED); + motorBBackward(SPEED); +} + +void brakeMotorA() { + digitalWrite(brakeMotorA, HIGH); // engage brake + analogWrite(MotorASpeed, 0); // slow +} + +void brakeMotorB() { + digitalWrite(brakeMotorB, HIGH); // engage brake + analogWrite(MotorBSpeed, 0); // slow +} + +void stop() { + brakeMotorA(); + brakeMotorB(); +} + +void left() { + brakeMotorA(); + motorBForward(SPEED); +} + +void right() { + brakeMotorB(); + motorAForward(SPEED); +}
\ No newline at end of file diff --git a/car_driver/car_driver.ino b/car_driver/car_driver.ino deleted file mode 100644 index 53258e2..0000000 --- a/car_driver/car_driver.ino +++ /dev/null @@ -1,132 +0,0 @@ -#include <AFMotor.h> // adafruit motor shield library -#include "RobotMotor.h" // 2wd or 4wd motor library - -#define HEADER 'H' - -#define TOTAL_BYTES 8// hmmm -#define number_of_keys 4 - -enum {MOV_LEFT, MOV_RIGHT, MOV_FORWARD, MOV_BACK, MOV_ROTATE, MOV_STOP}; -const char tags[] = {'w', 'a', 's', 'd'}; -const char* states[] = {"Left", "Right", "Forward", "Back", "Rotate", "Stop"}; -const int DIR_LEFT = 0; -const int DIR_RIGHT = 1; -const int DIR_CENTER = 2; - -const char* locationString[] = {"Left", "Right", "Center"}; // labels for debug - -const int LED_PIN = 13; - -int commandState = MOV_STOP; // what robot is told to do - - -const char MOVE_FORWARD = 'w'; // move forward -const char MOVE_LEFT = 'a'; // move left -const char MOVE_RIGHT = 'd'; // move right -// const char PIVOT_CCW = '?'; // rotate 90 degrees CCW -// const char PIVOT_CW = '?'; // rotate 90 degrees CW -// const char PIVOT = '?'; // rotation angle (minus rotates CCW) - -// not used in this example -// const char MOVE_SPEED = '?'; -// const char MOVE_SLOWER = '?'; // reduce speed -// const char MOVE_FASTER = '?'; // increase speed - -void setup() { - Serial.begin(9600); - Serial.println("initialized"); - moveBegin(); - moveSetSpeed(MIN_SPEED + 5); // 5% of max speed -} - -void loop() { - if ( Serial.available() >= TOTAL_BYTES) { - // sample format: Hw0 or Hd1, etc. - if (Serial.read() == HEADER) { // read header, next letter is a tag - char tag = Serial.read(); // read the first tag - if (is_tag_valid(tag) == true) { - char pressed = Serial.read(); // read the number - Serial.print(tag); Serial.print(": "); Serial.println(pressed); // debug - processCommand(tag, pressed); // process the command - } - else { - Serial.write(tag); - Serial.println( ": unknown tag"); - } - } - else { - Serial.print("missing header: "); - Serial.println(HEADER); - } - } -} - - -bool is_tag_valid(char tag){ - for(int i = 0; i < number_of_keys; i++){ - if(tag == tags[i]){ - return true; - } - } - // else - return false; -} - - -void changeCmdState(int newState) { - if(newState != commandState) { - // Serial.print("Changing Cmd state from "); Serial.print( states[commandState]); // dont need this logged - // Serial.print(" to "); Serial.println(states[newState]); - commandState = newState; - } -} - - -void processCommand(int cmd, int pressed) { - // byte speed; - //Serial.write(cmd); // uncomment to echo - - switch(cmd) - { - case MOVE_LEFT : { - if(pressed == 1) { - changeCmdState(MOV_ROTATE); - moveRotate(-10); - break; - } - } - case MOVE_RIGHT : { - if(pressed == 1) { - changeCmdState(MOV_ROTATE); - moveRotate(10); - break; - } - } - case MOVE_FORWARD : {if(pressed == 1) {changeCmdState(MOV_FORWARD); moveForward(); break;}} - case 's' : { // s is complicated, cause im trying to do this without 40 buttons - if (pressed == 1){ - if (commandState != MOV_STOP) { - changeCmdState(MOV_STOP); - moveStop(); - break; - } - else if (commandState == MOV_STOP) { - changeCmdState(MOV_BACK); - moveBackward(); - break; - } - } - } - - // case PIVOT_CCW : changeCmdState(MOV_ROTATE); moveRotate(-90); break; - // case PIVOT_CW : changeCmdState(MOV_ROTATE); moveRotate(90); break; -// case PIVOT : changeCmdState(MOV_ROTATE); moveRotate(val); break; -// case MOVE_SPEED : speed = val; moveSetSpeed(speed); break; -// case SLOWER : moveSlower(speedIncrement); break; -// case FASTER : moveFaster(speedIncrement); break; - case '\r' : case '\n': break; // ignore cr and lf - default : Serial.print('['); Serial.write(cmd); Serial.println("] Ignored"); break; - } -} - - diff --git a/car_driver/move.ino b/car_driver/move.ino deleted file mode 100644 index e407420..0000000 --- a/car_driver/move.ino +++ /dev/null @@ -1,241 +0,0 @@ -/************************************* - Drive: mid level movement functions -*************************************/ - -int moveState = MOV_STOP; // what robot is doing - -int moveSpeed = 0; // move speed stored here (0-100%) -int speedIncrement = 10; // percent to increase or decrease speed - -void moveBegin() -{ - motorBegin(MOTOR_LEFT); - motorBegin(MOTOR_RIGHT); - moveStop(); -} - -void moveLeft() -{ - changeMoveState(MOV_LEFT); - motorForward(MOTOR_LEFT, 0); - motorForward(MOTOR_RIGHT, moveSpeed); - Serial.println("were going left... maybe????"); -} - -void moveRight() -{ - changeMoveState(MOV_RIGHT); - motorForward(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, 0); - Serial.println("were going right... maybe????"); -} - -void moveForward() -{ - changeMoveState(MOV_FORWARD); - motorForward(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, moveSpeed); -} - -void moveBackward() -{ - changeMoveState(MOV_BACK); - motorReverse(MOTOR_LEFT, moveSpeed); - motorReverse(MOTOR_RIGHT, moveSpeed); -} - -void moveRotate(int angle) -{ - changeMoveState(MOV_ROTATE); - Serial.print("Rotating "); Serial.print(angle); - if(angle < 0) - { - Serial.println(" (left)"); - motorReverse(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, moveSpeed); - angle = -angle; - } - else if(angle > 0) - { - Serial.println(" (right)"); - motorForward(MOTOR_LEFT, moveSpeed); - motorReverse(MOTOR_RIGHT, moveSpeed); - } - int ms = rotationAngleToTime(angle, moveSpeed); - movingDelay(ms); - moveBrake(); -} - -void moveStop() -{ - changeMoveState(MOV_STOP); - motorStop(MOTOR_LEFT); - motorStop(MOTOR_RIGHT); - Serial.println("stop lmao"); -} - -void moveBrake() -{ - changeMoveState(MOV_STOP); - motorBrake(MOTOR_LEFT); - motorBrake(MOTOR_RIGHT); -} - -void moveSetSpeed(int speed) -{ - motorSetSpeed(MOTOR_LEFT, speed) ; - motorSetSpeed(MOTOR_RIGHT, speed) ; - moveSpeed = speed; // save the value -} - -void moveSlower(int decrement) -{ - Serial.print(" Slower: "); - if( moveSpeed >= speedIncrement + MIN_SPEED) - moveSpeed -= speedIncrement; - else moveSpeed = MIN_SPEED; - moveSetSpeed(moveSpeed); -} - - -void moveFaster(int increment) -{ - Serial.print(" Faster: "); - moveSpeed += speedIncrement; - if(moveSpeed > 100) - moveSpeed = 100; - moveSetSpeed(moveSpeed); -} - -int moveGetState() -{ - return moveState; -} - -/************************************* - functions to rotate the robot -*************************************/ - -// return the time in milliseconds to turn the given angle at the given speed -long rotationAngleToTime( int angle, int speed) -{ -int fullRotationTime; // time to rotate 360 degrees at given speed - - if(speed < MIN_SPEED) - return 0; // ignore speeds slower then the first table entry - - angle = abs(angle); - - if(speed >= 100) - fullRotationTime = rotationTime[NBR_SPEEDS-1]; // the last entry is 100% - else - { - int index = (speed - MIN_SPEED) / SPEED_TABLE_INTERVAL ; // index into speed and time tables - int t0 = rotationTime[index]; - int t1 = rotationTime[index+1]; // time of the next higher speed - fullRotationTime = map(speed, speedTable[index], speedTable[index+1], t0, t1); - // Serial.print("index= "); Serial.print(index); Serial.print(", t0 = "); Serial.print(t0); Serial.print(", t1 = "); Serial.print(t1); - } - // Serial.print(" full rotation time = "); Serial.println(fullRotationTime); - long result = map(angle, 0,360, 0, fullRotationTime); - return result; -} - - -// rotate the robot from MIN_SPEED to 100% increasing by SPEED_TABLE_INTERVAL -void calibrateRotationRate(int direction, int angle) -{ - Serial.print(locationString[direction]); - Serial.println(" calibration" ); - for(int speed = MIN_SPEED; speed <= 100; speed += SPEED_TABLE_INTERVAL) - { - - delay(1000); - //blinkNumber(speed/10); - - if( direction == DIR_LEFT) - { // rotate left - motorReverse(MOTOR_LEFT, speed); - motorForward(MOTOR_RIGHT, speed); - } - else if( direction == DIR_RIGHT) - { // rotate right - motorForward(MOTOR_LEFT, speed); - motorReverse(MOTOR_RIGHT, speed); - } - else - Serial.println("Invalid direction"); - - - int time = rotationAngleToTime(angle, speed); - - Serial.print(locationString[direction]); - Serial.print(": rotate "); - Serial.print(angle); - Serial.print(" degrees at speed "); - Serial.print(speed); - Serial.print(" for "); - Serial.print(time); - Serial.println("ms"); - delay(time); - motorStop(MOTOR_LEFT); - motorStop(MOTOR_RIGHT); - delay(2000); // two second delay between speeds - } -} - -// this is the low level movement state. -// it will differ from the command state when the robot is avoiding obstacles -void changeMoveState(int newState) -{ - if(newState != moveState) - { - Serial.print("Changing move state from "); Serial.print( states[moveState]); - Serial.print(" to "); Serial.println(states[newState]); - moveState = newState; - } -} - -/************* high level movement functions ****************/ - -//moves in the given direction at the current speed for the given duration in milliseconds -void timedMove(int direction, int duration) -{ - Serial.print("Timed move "); - if(direction == MOV_FORWARD) { - Serial.println("forward"); - moveForward(); - } - else if(direction == MOV_BACK) { - Serial.println("back"); - moveBackward(); - } - else - Serial.println("?"); - - movingDelay(duration); - moveStop(); -} - -// check for obstacles while delaying the given duration in ms - -void movingDelay(long duration) -{ - long startTime = millis(); - while(millis() - startTime < duration) { - // function in Look module checks for obstacle in direction of movement - if(checkMovement() == false) { - if( moveState != MOV_ROTATE) // rotate is only valid movement - { - Serial.println("Stopping in moving Delay()"); - moveBrake(); - } - } - } -} - -boolean checkMovement() { - return true; -} - - diff --git a/car_driver/processing/processing.pde b/car_driver/processing/processing.pde new file mode 100644 index 0000000..5e10e54 --- /dev/null +++ b/car_driver/processing/processing.pde @@ -0,0 +1,45 @@ +import processing.serial.*; + +private static char STOP = 'v'; +private static char HEADER = 'H'; + +char current = STOP; + +Serial port; + +void setup() { + frameRate(5); + printArray(Serial.list()); + port = new Serial(this, Serial.list()[0], 9600); +} + + +void draw() {} // Empty draw() needed to keep the program running + +void keyPressed() { + updateKeys(key, true); +} + +void keyReleased() { + updateKeys(key, false); +} + +boolean isValidKey(char key) { + return key == 'a' || key == 'w' || key == 's' || key == 'd'; +} + +void write(char key) { + char data[] = {HEADER, key}; + String towrite = new String(data); + println(towrite); + port.write(towrite); +} + +void updateKeys(char key, boolean on) { + if (isValidKey(key)) { + if (!on || key != current) { + current = on ? key : STOP; + write(current); + } + } +} |