Merge pull request #1 from Wessel/feat-ultrasonic

add c++ code for conversion
This commit is contained in:
Tom S
2024-03-26 14:33:40 +01:00
committed by GitHub
6 changed files with 405 additions and 0 deletions

57
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,57 @@
{
"files.associations": {
"array": "cpp",
"string": "cpp",
"string_view": "cpp",
"ranges": "cpp",
"iostream": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"atomic": "cpp",
"bit": "cpp",
"*.tcc": "cpp",
"compare": "cpp",
"concepts": "cpp",
"cstdint": "cpp",
"deque": "cpp",
"map": "cpp",
"set": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"iosfwd": "cpp",
"istream": "cpp",
"limits": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"cinttypes": "cpp",
"typeinfo": "cpp"
}
}

View File

@@ -0,0 +1,91 @@
#
# 'make' build executable file 'main'
# 'make clean' removes all .o and executable files
#
# define the Cpp compiler to use
CXX = g++
# define any compile-time flags
CXXFLAGS := -std=c++17 -Wall -Wextra -g -pthread -MD
# define library paths in addition to /usr/lib
# if I wanted to include libraries not in /usr/lib I'd specify
# their path using -Lpath, something like:
LFLAGS =
# define output directory
OUTPUT := output
# define source directory
SRC := src
# define include directory
INCLUDE := include
# define lib directory
LIB := lib
ifeq ($(OS),Windows_NT)
MAIN := main.exe
SOURCEDIRS := $(SRC)
INCLUDEDIRS := $(INCLUDE)
LIBDIRS := $(LIB)
FIXPATH = $(subst /,\,$1)
RM := del /q /f
MD := mkdir
else
MAIN := main
SOURCEDIRS := $(shell find $(SRC) -type d)
INCLUDEDIRS := $(shell find $(INCLUDE) -type d)
LIBDIRS := $(shell find $(LIB) -type d)
FIXPATH = $1
RM = rm -f
MD := mkdir -p
endif
# define any directories containing header files other than /usr/include
INCLUDES := $(patsubst %,-I%, $(INCLUDEDIRS:%/=%))
# define the C libs
LIBS := $(patsubst %,-L%, $(LIBDIRS:%/=%))
# define the C source files
SOURCES := $(wildcard $(patsubst %,%/*.cpp, $(SOURCEDIRS)))
# define the C object files
OBJECTS := $(SOURCES:.cpp=.o)
#
# The following part of the makefile is generic; it can be used to
# build any executable just by changing the definitions above and by
# deleting dependencies appended to the file from 'make depend'
#
OUTPUTMAIN := $(call FIXPATH,$(OUTPUT)/$(MAIN))
all: $(OUTPUT) $(MAIN)
@echo Executing 'all' complete!
$(OUTPUT):
$(MD) $(OUTPUT)
$(MAIN): $(OBJECTS)
$(CXX) $(CXXFLAGS) $(INCLUDES) -o $(OUTPUTMAIN) $(OBJECTS) $(LFLAGS) $(LIBS)
# this is a suffix replacement rule for building .o's from .c's
# it uses automatic variables $<: the name of the prerequisite of
# the rule(a .c file) and $@: the name of the target of the rule (a .o file)
# (see the gnu make manual section about automatic variables)
.cpp.o:
$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
.PHONY: clean
clean:
$(RM) $(OUTPUTMAIN)
$(RM) $(call FIXPATH,$(OBJECTS))
@echo Cleanup complete!
run: all
./$(OUTPUTMAIN)
@echo Executing 'run: all' complete!

BIN
src/Client/Ultrasonic/Ultrasonic Executable file

Binary file not shown.

View File

@@ -0,0 +1,80 @@
#include "Ultrasonic.h"
int main() {
// Open the serial port. Change device path as needed (currently set to an standard FTDI USB-UART cable type device)
int serial_port = open("/dev/ttyUSB0", O_RDWR);
// Create new termios struct, we call it 'tty' for convention
struct termios tty;
// Read in existing settings, and handle any error
if(tcgetattr(serial_port, &tty) != 0) {
printf("Error %i from tcgetattr: %s\n", errno, strerror(errno));
return 1;
}
tty.c_cflag &= ~PARENB; // Clear parity bit, disabling parity (most common)
tty.c_cflag &= ~CSTOPB; // Clear stop field, only one stop bit used in communication (most common)
tty.c_cflag &= ~CSIZE; // Clear all bits that set the data size
tty.c_cflag |= CS8; // 8 bits per byte (most common)
tty.c_cflag &= ~CRTSCTS; // Disable RTS/CTS hardware flow control (most common)
tty.c_cflag |= CREAD | CLOCAL; // Turn on READ & ignore ctrl lines (CLOCAL = 1)
tty.c_lflag &= ~ICANON;
tty.c_lflag &= ~ECHO; // Disable echo
tty.c_lflag &= ~ECHOE; // Disable erasure
tty.c_lflag &= ~ECHONL; // Disable new-line echo
tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP
tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl
tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL); // Disable any special handling of received bytes
tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars)
tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed
// tty.c_oflag &= ~OXTABS; // Prevent conversion of tabs to spaces (NOT PRESENT ON LINUX)
// tty.c_oflag &= ~ONOEOT; // Prevent removal of C-d chars (0x004) in output (NOT PRESENT ON LINUX)
tty.c_cc[VTIME] = 10; // Wait for up to 1s (10 deciseconds), returning as soon as any data is received.
tty.c_cc[VMIN] = 0;
// Set in/out baud rate to be 9600
cfsetispeed(&tty, B9600);
cfsetospeed(&tty, B9600);
// Save tty settings, also checking for error
if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
printf("Error %i from tcsetattr: %s\n", errno, strerror(errno));
return 1;
}
// Write to serial port
unsigned char msg[] = { 0x22, 0x00, 0x00, 0x22 };
write(serial_port, msg, sizeof(msg));
// Allocate memory for read buffer, set size according to your needs
char read_buf [256];
// Normally you wouldn't do this memset() call, but since we will just receive
// ASCII data for this example, we'll set everything to 0 so we can
// call printf() easily.
memset(&read_buf, '\0', sizeof(read_buf));
// Read bytes. The behaviour of read() (e.g. does it block?,
// how long does it block for?) depends on the configuration
// settings above, specifically VMIN and VTIME
int num_bytes = read(serial_port, &read_buf, sizeof(read_buf));
// n is the number of bytes read. n may be 0 if no bytes were received, and can also be -1 to signal an error.
if (num_bytes < 0) {
printf("Error reading: %s", strerror(errno));
return 1;
}
for (int i = 0; i < num_bytes; ++i)
std::cout << read_buf[i];
std::cout << std::endl;
// printf("Read %i bytes. Received message: %s", num_bytes, read_buf);
close(serial_port);
return 0; // success
};

View File

@@ -0,0 +1,166 @@
Ultrasonic: Ultrasonic.cpp /usr/include/stdc-predef.h Ultrasonic.h \
/usr/include/stdio.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/lib/gcc/x86_64-linux-gnu/10/include/stddef.h \
/usr/lib/gcc/x86_64-linux-gnu/10/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/strings.h /usr/include/c++/10/iostream \
/usr/include/x86_64-linux-gnu/c++/10/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/os_defines.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/cpu_defines.h \
/usr/include/c++/10/pstl/pstl_config.h /usr/include/c++/10/ostream \
/usr/include/c++/10/ios /usr/include/c++/10/iosfwd \
/usr/include/c++/10/bits/stringfwd.h \
/usr/include/c++/10/bits/memoryfwd.h /usr/include/c++/10/bits/postypes.h \
/usr/include/c++/10/cwchar /usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/c++/10/exception /usr/include/c++/10/bits/exception.h \
/usr/include/c++/10/bits/exception_ptr.h \
/usr/include/c++/10/bits/exception_defines.h \
/usr/include/c++/10/bits/cxxabi_init_exception.h \
/usr/include/c++/10/typeinfo /usr/include/c++/10/bits/hash_bytes.h \
/usr/include/c++/10/new /usr/include/c++/10/bits/nested_exception.h \
/usr/include/c++/10/bits/move.h /usr/include/c++/10/type_traits \
/usr/include/c++/10/bits/char_traits.h \
/usr/include/c++/10/bits/stl_algobase.h \
/usr/include/c++/10/bits/functexcept.h \
/usr/include/c++/10/bits/cpp_type_traits.h \
/usr/include/c++/10/ext/type_traits.h \
/usr/include/c++/10/ext/numeric_traits.h \
/usr/include/c++/10/bits/stl_pair.h \
/usr/include/c++/10/bits/stl_iterator_base_types.h \
/usr/include/c++/10/bits/stl_iterator_base_funcs.h \
/usr/include/c++/10/bits/concept_check.h \
/usr/include/c++/10/debug/assertions.h \
/usr/include/c++/10/bits/stl_iterator.h \
/usr/include/c++/10/bits/ptr_traits.h /usr/include/c++/10/debug/debug.h \
/usr/include/c++/10/bits/predefined_ops.h /usr/include/c++/10/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/10/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/c++/10/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/c++locale.h \
/usr/include/c++/10/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/10/cctype \
/usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/10/bits/ios_base.h /usr/include/c++/10/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/atomic_word.h \
/usr/include/c++/10/bits/locale_classes.h /usr/include/c++/10/string \
/usr/include/c++/10/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/c++allocator.h \
/usr/include/c++/10/ext/new_allocator.h \
/usr/include/c++/10/bits/ostream_insert.h \
/usr/include/c++/10/bits/cxxabi_forced.h \
/usr/include/c++/10/bits/stl_function.h \
/usr/include/c++/10/backward/binders.h \
/usr/include/c++/10/bits/range_access.h \
/usr/include/c++/10/initializer_list \
/usr/include/c++/10/bits/iterator_concepts.h \
/usr/include/c++/10/concepts /usr/include/c++/10/bits/range_cmp.h \
/usr/include/c++/10/bits/basic_string.h \
/usr/include/c++/10/ext/alloc_traits.h \
/usr/include/c++/10/bits/alloc_traits.h \
/usr/include/c++/10/bits/stl_construct.h /usr/include/c++/10/string_view \
/usr/include/c++/10/bits/functional_hash.h \
/usr/include/c++/10/bits/string_view.tcc \
/usr/include/c++/10/ext/string_conversions.h /usr/include/c++/10/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/c++/10/bits/std_abs.h /usr/include/c++/10/cstdio \
/usr/include/c++/10/cerrno /usr/include/errno.h \
/usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
/usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/10/bits/charconv.h \
/usr/include/c++/10/bits/basic_string.tcc \
/usr/include/c++/10/bits/locale_classes.tcc \
/usr/include/c++/10/system_error \
/usr/include/x86_64-linux-gnu/c++/10/bits/error_constants.h \
/usr/include/c++/10/stdexcept /usr/include/c++/10/streambuf \
/usr/include/c++/10/bits/streambuf.tcc \
/usr/include/c++/10/bits/basic_ios.h \
/usr/include/c++/10/bits/locale_facets.h /usr/include/c++/10/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/ctype_base.h \
/usr/include/c++/10/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/10/bits/ctype_inline.h \
/usr/include/c++/10/bits/locale_facets.tcc \
/usr/include/c++/10/bits/basic_ios.tcc \
/usr/include/c++/10/bits/ostream.tcc /usr/include/c++/10/istream \
/usr/include/c++/10/bits/istream.tcc /usr/include/fcntl.h \
/usr/include/x86_64-linux-gnu/bits/fcntl.h \
/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h \
/usr/include/linux/falloc.h /usr/include/x86_64-linux-gnu/bits/stat.h \
/usr/include/termios.h /usr/include/x86_64-linux-gnu/bits/termios.h \
/usr/include/x86_64-linux-gnu/bits/termios-struct.h \
/usr/include/x86_64-linux-gnu/bits/termios-c_cc.h \
/usr/include/x86_64-linux-gnu/bits/termios-c_iflag.h \
/usr/include/x86_64-linux-gnu/bits/termios-c_oflag.h \
/usr/include/x86_64-linux-gnu/bits/termios-baud.h \
/usr/include/x86_64-linux-gnu/bits/termios-c_cflag.h \
/usr/include/x86_64-linux-gnu/bits/termios-c_lflag.h \
/usr/include/x86_64-linux-gnu/bits/termios-tcflow.h \
/usr/include/x86_64-linux-gnu/bits/termios-misc.h \
/usr/include/x86_64-linux-gnu/sys/ttydefaults.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h

View File

@@ -0,0 +1,11 @@
// C library headers
#include <stdio.h>
#include <string.h>
#include <iostream>
// Linux headers
#include <fcntl.h> // Contains file controls like O_RDWR
#include <errno.h> // Error integer and strerror() function
#include <termios.h> // Contains POSIX terminal control definitions
#include <unistd.h> // write(), read(), close()