arduino stuffs
car go drive
bendn 2022-06-11
parent b2dc0ad · commit d7ae7d7
-rw-r--r--car_driver/.clang-format2
-rw-r--r--car_driver/.vscode/arduino.json6
-rw-r--r--car_driver/.vscode/c_cpp_properties.json537
-rw-r--r--car_driver/.vscode/settings.json4
-rw-r--r--car_driver/arduino/arduino.ino105
-rw-r--r--car_driver/arduino/drive.ino78
-rw-r--r--car_driver/car_driver.ino132
-rw-r--r--car_driver/move.ino241
-rw-r--r--car_driver/processing/processing.pde45
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);
+ }
+ }
+}