diff --git a/.gitignore b/.gitignore index a17f20c..83834db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ .pio venv -*.py +__pycache__ *.csv -scripts -*.typ \ No newline at end of file +*.typ +*.pdf + +# Vélarsértækar skrár sem PlatformIO býr til sjálft +.vscode/c_cpp_properties.json +.vscode/launch.json +compile_commands.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 24a5039..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,56 +0,0 @@ -// -// !!! WARNING !!! AUTO-GENERATED FILE! -// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": -// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags -// -{ - "configurations": [ - { - "name": "PlatformIO", - "includePath": [ - "C:/Users/isakt/Embedded/ESP_Project3_H26/include", - "C:/Users/isakt/Embedded/ESP_Project3_H26/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/cores/arduino", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/HID/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SPI/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/Wire/src", - "" - ], - "browse": { - "limitSymbolsToIncludedHeaders": true, - "path": [ - "C:/Users/isakt/Embedded/ESP_Project3_H26/include", - "C:/Users/isakt/Embedded/ESP_Project3_H26/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/cores/arduino", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/HID/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SPI/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", - "C:/Users/isakt/.platformio/packages/framework-arduino-avr/libraries/Wire/src", - "" - ] - }, - "defines": [ - "PLATFORMIO=60200", - "ARDUINO_AVR_NANO", - "F_CPU=16000000L", - "ARDUINO_ARCH_AVR", - "ARDUINO=10808", - "__AVR_ATmega328P__", - "" - ], - "cStandard": "gnu11", - "cppStandard": "gnu++11", - "compilerPath": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin/avr-gcc.exe", - "compilerArgs": [ - "-mmcu=atmega328p", - "" - ] - } - ], - "version": 4 -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 3a6caba..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,44 +0,0 @@ -// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY -// -// PlatformIO Debugging Solution -// -// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html -// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html - -{ - "version": "0.2.0", - "configurations": [ - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": { - "type": "PlatformIO", - "task": "Pre-Debug" - } - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (skip Pre-Debug)", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart" - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (without uploading)", - "executable": "C:/Users/isakt/Embedded/ESP_Project3_H26/.pio/build/nanoatmega328new/firmware.elf", - "projectEnvName": "nanoatmega328new", - "toolchainBinDir": "C:/Users/isakt/.platformio/packages/toolchain-atmelavr/bin", - "internalConsoleOptions": "openOnSessionStart", - "loadMode": "manual" - } - ] -} diff --git a/compile_commands.json b/compile_commands.json deleted file mode 100644 index 4c82cc5..0000000 --- a/compile_commands.json +++ /dev/null @@ -1,200 +0,0 @@ -[ - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/CDC.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/CDC.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/CDC.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/CDC.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial0.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial0.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial0.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial0.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial1.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial1.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial1.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial1.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial2.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial2.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial2.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial2.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial3.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial3.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/HardwareSerial3.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/HardwareSerial3.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/IPAddress.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/IPAddress.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/IPAddress.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/IPAddress.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/PluggableUSB.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/PluggableUSB.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/PluggableUSB.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/PluggableUSB.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Print.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Print.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Print.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Print.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Stream.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Stream.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Stream.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Stream.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/Tone.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Tone.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/Tone.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/Tone.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/USBCore.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/USBCore.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/USBCore.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/USBCore.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/WInterrupts.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WInterrupts.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WInterrupts.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WInterrupts.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/WMath.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WMath.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WMath.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WMath.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/WString.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WString.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/WString.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/WString.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/abi.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/abi.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/abi.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/abi.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/hooks.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/hooks.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/hooks.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/hooks.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/main.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/FrameworkArduino/new.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/new.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/new.cpp", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/new.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_analog.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_analog.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_analog.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_analog.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_digital.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_digital.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_digital.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_digital.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -mmcu=atmega328p -x assembler-with-cpp -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs -c -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.S.o /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.S", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.S", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.S.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_pulse.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_pulse.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-gcc -o .pio/build/nanoatmega328new/FrameworkArduino/wiring_shift.c.o -c -std=gnu11 -fno-fat-lto-objects -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs /Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_shift.c", - "directory": "/Users/dadi/embedded/proj1", - "file": "/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino/wiring_shift.c", - "output": ".pio/build/nanoatmega328new/FrameworkArduino/wiring_shift.c.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/digital_in.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/digital_in.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/digital_in.cpp", - "output": ".pio/build/nanoatmega328new/src/digital_in.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/digital_out.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/digital_out.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/digital_out.cpp", - "output": ".pio/build/nanoatmega328new/src/digital_out.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/main.cpp", - "output": ".pio/build/nanoatmega328new/src/main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part1_first_working_main.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part1_first_working_main.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part1_first_working_main.cpp", - "output": ".pio/build/nanoatmega328new/src/part1_first_working_main.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part1part2.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part1part2.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part1part2.cpp", - "output": ".pio/build/nanoatmega328new/src/part1part2.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/part3part1.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/part3part1.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/part3part1.cpp", - "output": ".pio/build/nanoatmega328new/src/part3part1.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/rotary_encoder_driver.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/rotary_encoder_driver.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/rotary_encoder_driver.cpp", - "output": ".pio/build/nanoatmega328new/src/rotary_encoder_driver.cpp.o" - }, - { - "command": "/Users/dadi/.platformio/packages/toolchain-atmelavr/bin/avr-g++ -o .pio/build/nanoatmega328new/src/timer_usec.cpp.o -c -fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -mmcu=atmega328p -Os -Wall -ffunction-sections -fdata-sections -flto -DPLATFORMIO=60119 -DARDUINO_AVR_NANO -DF_CPU=16000000L -DARDUINO_ARCH_AVR -DARDUINO=10808 -Iinclude -Isrc -I/Users/dadi/.platformio/packages/framework-arduino-avr/cores/arduino -I/Users/dadi/.platformio/packages/framework-arduino-avr/variants/eightanaloginputs src/timer_usec.cpp", - "directory": "/Users/dadi/embedded/proj1", - "file": "src/timer_usec.cpp", - "output": ".pio/build/nanoatmega328new/src/timer_usec.cpp.o" - } -] diff --git a/docs/diagrams/src/motor_state.wsd b/docs/diagrams/src/motor_state.wsd index 7974ccf..b56e243 100644 --- a/docs/diagrams/src/motor_state.wsd +++ b/docs/diagrams/src/motor_state.wsd @@ -1,5 +1,7 @@ @startuml - +' skinparam linetype ortho +' skinparam nodesep 100 +skinparam ranksep 80 skinparam state { BackgroundColor LightBlue @@ -11,6 +13,7 @@ state Initialization Initialization : Entry / Stop motor Initialization : Do / Initialize internal parameters Initialization : Do / Reset speed measurement + Initialization : Do / Wait 2 seconds Initialization : Exit / Send Boot-up message @@ -18,8 +21,7 @@ state Initialization state Operational Operational : Entry / LED on Operational : Do / Run speed controller - Operational : Exit / Stop motor - Operational : Exit / LED off + Operational : Exit / Stop motor and LED off state Stopped Stopped : Entry / Stop motor @@ -28,7 +30,7 @@ state Stopped -Initialization --> Operational : initialization complete +Initialization --> Operational : initialization\n complete Operational --> Initialization : reset Operational --> Stopped : fault detected diff --git a/include/initialization_state.h b/include/initialization_state.h index edc53e7..01cc28c 100644 --- a/include/initialization_state.h +++ b/include/initialization_state.h @@ -6,6 +6,11 @@ class InitializationState : public State { +private: + static const unsigned long WAIT_MS = 2000; + + unsigned long enter_time_ms = 0; + public: void enter() override; diff --git a/include/motor_controller.h b/include/motor_controller.h index bbb80cd..8c5b502 100644 --- a/include/motor_controller.h +++ b/include/motor_controller.h @@ -4,6 +4,7 @@ #include "rotary_encoder_driver.h" #include "motor_driver.h" #include "p_controller.h" +#include "digital_out.h" class State; @@ -11,6 +12,10 @@ class State; class MotorController { private: + static constexpr double DEFAULT_REFERENCE_RPM = 40.0; + static constexpr double PWM_PER_PERCENT = 255.0 / 100.0; + static const uint8_t LED_PIN = 5; // PB5 = D13 = LED_BUILTIN + State* current_state; State* initialization_state; @@ -21,6 +26,8 @@ private: MotorDriver& motor; P_controller& controller; + Digital_out led; + double reference_rpm; @@ -45,7 +52,7 @@ public: void command(char c); - void transition_to(State* new_state); + void transition_to(State& new_state); void to_initialization(); @@ -62,6 +69,10 @@ public: void stop_motor(); void reset_speed_measurement(); + + void led_on(); + + void led_off(); }; -#endif \ No newline at end of file +#endif diff --git a/include/rotary_encoder_driver.h b/include/rotary_encoder_driver.h index d097eba..ef1ed44 100644 --- a/include/rotary_encoder_driver.h +++ b/include/rotary_encoder_driver.h @@ -4,37 +4,36 @@ #include #include "digital_in.h" -//#include "digital_out.h" #include "timer_usec.h" class RotaryEncoderDriver { - static const uint8_t HIST_LEN = 4; // 4 x 4 ms = 16 ms gluggi fyrir rpm-utreikning +public: + static constexpr uint16_t SAMPLE_PERIOD_US = 4000; // Ts = 4 ms + static constexpr float COUNTS_PER_REV = 1050.0f; - volatile uint8_t cycle; - volatile int16_t count; - volatile int16_t prev_count; +private: + static const uint8_t HIST_LEN = 4; // 4 x Ts = 16 ms gluggi fyrir rpm-utreikning + + volatile int32_t count; + volatile int16_t delta; volatile bool speed_ready; - volatile int16_t history[HIST_LEN]; + volatile int32_t history[HIST_LEN]; volatile uint8_t hist_idx; - //Digital_out led; - Digital_in eA; Digital_in eB; Timer_usec timer; public: - volatile int16_t delta; - RotaryEncoderDriver(); void begin(); void update(); - int position(); + int32_t position(); void update_delta(); diff --git a/include/state.h b/include/state.h index 4f58648..2707215 100644 --- a/include/state.h +++ b/include/state.h @@ -6,7 +6,7 @@ class MotorController; class State { protected: - MotorController* context; + MotorController* context = nullptr; public: virtual ~State() diff --git a/scripts/plot_step_response.py b/scripts/plot_step_response.py new file mode 100644 index 0000000..cee95a2 --- /dev/null +++ b/scripts/plot_step_response.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +""" +Teiknar step response-plott ur CSV-gognum sem Arduino-verkefnid prentar ut +(dalkar: time_ms, ref_rpm, actual_rpm, pwm_requested, pwm_actual). + +pwm_requested = Kp * error * 2.55, oklippt (getur farid langt yfir +-255) +pwm_actual = sama gildi en klippt vid +-255, þ.e. þad sem raunverulega + var sent a motor.set() / vélbúnaðinn + +Notkun: + python plot_step_response.py [inntak.csv] [uttak.png] [titill] + +Sjalfgefid: data/step_response.csv -> data/step_response.png +""" +import sys +import csv +import matplotlib.pyplot as plt + + +def load_csv(path): + cols = {"time_ms": [], "ref_rpm": [], "actual_rpm": [], + "pwm_requested": [], "pwm_actual": []} + with open(path, newline="") as f: + reader = csv.DictReader(f) + for row in reader: + try: + for key in cols: + cols[key].append(float(row[key])) + except (ValueError, KeyError): + # sleppir linum sem eru ekki gild data (t.d. rusl fyrir/eftir) + for key in cols: + if len(cols[key]) > len(cols["time_ms"]): + cols[key].pop() + continue + return cols + + +def plot(cols, out_path, title_suffix=""): + time_s = [t / 1000.0 for t in cols["time_ms"]] + ref_rpm = cols["ref_rpm"] + actual_rpm = cols["actual_rpm"] + pwm_requested = cols["pwm_requested"] + pwm_actual = cols["pwm_actual"] + + fig, ax1 = plt.subplots(figsize=(10, 5)) + + ax1.plot(time_s, ref_rpm, label="Reference (ref_rpm)", color="#666666", + linestyle="--", linewidth=1.5) + ax1.plot(time_s, actual_rpm, label="Measured (actual_rpm)", color="#1f77b4", + linewidth=1.8) + ax1.set_xlabel("Time [s]") + ax1.set_ylabel("Angular velocity [RPM]") + ax1.grid(True, alpha=0.3) + + ax2 = ax1.twinx() + ax2.plot(time_s, pwm_requested, label="PWM requested (unclamped)", + color="#d62728", linewidth=1.0, alpha=0.5, linestyle=":") + ax2.plot(time_s, pwm_actual, label="PWM actual (clamped)", + color="#d62728", linewidth=1.4) + ax2.axhline(255, color="#d62728", linewidth=0.6, alpha=0.3) + ax2.axhline(-255, color="#d62728", linewidth=0.6, alpha=0.3) + ax2.set_ylabel("PWM [-255, 255]") + + # Merkjum stokkpunktinn (fyrsta stadin thar sem ref hoppar fra 0) + step_idx = next((i for i, r in enumerate(ref_rpm) if r > 0), None) + if step_idx is not None: + ax1.axvline(time_s[step_idx], color="black", linewidth=0.8, + linestyle=":") + ax1.text(time_s[step_idx], max(actual_rpm) * 1.02, " step", + fontsize=9, va="bottom") + + lines1, labels1 = ax1.get_legend_handles_labels() + lines2, labels2 = ax2.get_legend_handles_labels() + ax1.legend(lines1 + lines2, labels1 + labels2, loc="lower right", + fontsize=8) + + title = "Double step response: RPM and PWM over time" + if title_suffix: + title += f" ({title_suffix})" + fig.suptitle(title) + fig.tight_layout() + fig.savefig(out_path, dpi=150) + print(f"Vistad: {out_path}") + + +if __name__ == "__main__": + in_path = sys.argv[1] if len(sys.argv) > 1 else "data/twostep.csv" + out_path = sys.argv[2] if len(sys.argv) > 2 else "data/twostep.png" + title_suffix = sys.argv[3] if len(sys.argv) > 3 else "" + data = load_csv(in_path) + plot(data, out_path, title_suffix) diff --git a/src/initialization_state.cpp b/src/initialization_state.cpp index 9e2e8c0..5d27d09 100644 --- a/src/initialization_state.cpp +++ b/src/initialization_state.cpp @@ -9,19 +9,23 @@ void InitializationState::enter() Serial.println(); Serial.println("State: Initialization"); - digitalWrite(LED_BUILTIN, LOW); + context->led_off(); context->stop_motor(); context->reset_speed_measurement(); - Serial.println("Boot-up"); + enter_time_ms = millis(); } void InitializationState::update() { - context->to_operational(); + // Non-blocking bið svo aðallykkjan haldi áfram að keyra + if (millis() - enter_time_ms >= WAIT_MS) + { + context->to_operational(); + } } @@ -32,4 +36,5 @@ void InitializationState::command(char c) void InitializationState::exit() { -} \ No newline at end of file + Serial.println("Boot-up"); +} diff --git a/src/main.cpp b/src/main.cpp index 17b4bef..a613548 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,14 +16,9 @@ RotaryEncoderDriver encoder; MotorDriver motor; -P_controller controller(12.5); +const double KP = 12.5; - -MotorController motor_controller( - encoder, - motor, - controller -); +P_controller controller(KP); InitializationState initialization_state; @@ -32,6 +27,16 @@ OperationalState operational_state; StoppedState stopped_state; +// Stöðurnar verða að vera skilgreindar á undan motor_controller +MotorController motor_controller( + encoder, + motor, + controller, + initialization_state, + operational_state +); + + int main() { init(); @@ -39,11 +44,6 @@ int main() Serial.begin(115200); - pinMode(LED_BUILTIN, OUTPUT); - - digitalWrite(LED_BUILTIN, LOW); - - cli(); encoder.begin(); @@ -81,4 +81,8 @@ int main() return 0; -} \ No newline at end of file +} + +// int main(){ +// return 0; +// } \ No newline at end of file diff --git a/src/main_P2.cpp b/src/main_P2.cpp deleted file mode 100644 index dec3819..0000000 --- a/src/main_P2.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* #include -#include -#include - -#include "rotary_encoder_driver.h" -#include "motor_driver.h" -#include "p_controller.h" - -RotaryEncoderDriver encoder; -MotorDriver motor; - -P_controller controller(12.5); - -const double REF_RPM1 = 30.0; -const double REF_RPM2 = 50.0; - -const uint16_t STEP1_AT_SAMPLE = 50; -const uint16_t STEP2_AT_SAMPLE = 500; - -const uint16_t STOP_AT_SAMPLE = 1000; - -int main() { - init(); - Serial.begin(115200); - - cli(); - encoder.begin(); - motor.begin(); - sei(); - - // Mótor stopp og smá bið svo kerfið sé í kyrrstöðu áður en mælingin hefst - motor.stop(); - _delay_ms(2000); - - Serial.println("time_ms,ref_rpm,actual_rpm,pwm_requested,pwm_actual"); - Serial.println("0.0,0.0,0.0,0.0,0.0"); - - encoder.reset_speed_measurement(); - - uint16_t sample = 0; - double ref = 0.0; - - while (true) { - if (encoder.new_speed_available()) { - sample++; - - float time_ms = sample * 4.0f; - - // Step-inntak: viðmiðið hoppar úr 0 í REF_RPM á STEP_AT_SAMPLE - if (sample == STEP1_AT_SAMPLE) { - ref = REF_RPM1; - } - - if (sample == STEP2_AT_SAMPLE) { - ref = REF_RPM2; - } - - double actual = encoder.rpm(); - - double pwm_percent = controller.update(ref, actual); - double pwm_requested = pwm_percent * 2.55; - - double pwm_actual = pwm_requested; - if (pwm_actual > 255.0) pwm_actual = 255.0; - if (pwm_actual < -255.0) pwm_actual = -255.0; - - motor.set(pwm_actual); - - Serial.print(time_ms, 1); - Serial.print(","); - Serial.print(ref, 1); - Serial.print(","); - Serial.print(actual, 2); - Serial.print(","); - Serial.print(pwm_requested, 1); - Serial.print(","); - Serial.println(pwm_actual, 1); - - if (sample >= STOP_AT_SAMPLE) { - motor.stop(); - while (true) { - } - } - } - } - return 0; -} - */ \ No newline at end of file diff --git a/src/motor_controller.cpp b/src/motor_controller.cpp index 0781d66..7e192a9 100644 --- a/src/motor_controller.cpp +++ b/src/motor_controller.cpp @@ -7,7 +7,9 @@ MotorController::MotorController( RotaryEncoderDriver& encoder, MotorDriver& motor, - P_controller& controller + P_controller& controller, + State& initialization, + State& operational ) : current_state(nullptr), initialization_state(nullptr), @@ -16,7 +18,8 @@ MotorController::MotorController( encoder(encoder), motor(motor), controller(controller), - reference_rpm(30.0) + led(LED_PIN), + reference_rpm(DEFAULT_REFERENCE_RPM) { } @@ -30,25 +33,28 @@ void MotorController::set_states( initialization_state = initialization; operational_state = operational; stopped_state = stopped; + //initialization_state.set_context(this); + //operational_state.set_context(this); } void MotorController::begin() { + led.init(); + led.set_lo(); + transition_to(initialization_state); } -void MotorController::transition_to(State* new_state) +void MotorController::transition_to(State& new_state) { if (current_state != nullptr) { current_state->exit(); } - current_state = new_state; - - current_state->set_context(this); + current_state = &new_state; current_state->enter(); } @@ -94,7 +100,7 @@ void MotorController::run_speed_controller() controller.update(reference_rpm, actual); double pwm = - pwm_percent * 2.55; + pwm_percent * PWM_PER_PERCENT; motor.set(pwm); } @@ -120,4 +126,15 @@ void MotorController::to_stopped() bool MotorController::fault_active() { return motor.fault_active(); -} \ No newline at end of file +} + +//void MotorController::led_on() +//{ +// led.set_hi(); +//} + + +//void MotorController::led_off() +//{ +// led.set_lo(); +//} diff --git a/src/motor_driver.cpp b/src/motor_driver.cpp index a004cc5..e298ef6 100644 --- a/src/motor_driver.cpp +++ b/src/motor_driver.cpp @@ -3,6 +3,37 @@ #include +// Í Fast PWM gefur OCR = 0 samt einn stuttan púls í hverri lotu. +// Til að pinni sé alveg LOW er hann aftengdur frá timernum (COM-bitar) +// og keyrður LOW gegnum PORT-registerið. + +static void ain1_off() // D3 = PD3 = OC2B +{ + TCCR2A &= ~(1 << COM2B1); + PORTD &= ~(1 << PORTD3); + OCR2B = 0; +} + +static void ain2_off() // D11 = PB3 = OC2A +{ + TCCR2A &= ~(1 << COM2A1); + PORTB &= ~(1 << PORTB3); + OCR2A = 0; +} + +static void ain1_pwm(uint8_t duty) +{ + OCR2B = duty; + TCCR2A |= (1 << COM2B1); +} + +static void ain2_pwm(uint8_t duty) +{ + OCR2A = duty; + TCCR2A |= (1 << COM2A1); +} + + MotorDriver::MotorDriver() { } @@ -30,57 +61,32 @@ void MotorDriver::begin() TCCR2A |= (1 << WGM20); TCCR2A |= (1 << WGM21); - // Non-inverting PWM on OC2A and OC2B - TCCR2A |= (1 << COM2A1); - TCCR2A |= (1 << COM2B1); - - // Timer2 prescaler = 32 TCCR2B |= (1 << CS21); TCCR2B |= (1 << CS20); - OCR2A = 0; - OCR2B = 0; - - //stop(); + // PWM-úttök eru tengd í set() eftir þörfum + stop(); } void MotorDriver::forward() { - // AIN1 / D3 = HIGH - // AIN2 / D11 = LOW - - //PORTD |= (1 << PORTD3); - //PORTB &= ~(1 << PORTB3); - - OCR2A = 0; - OCR2B = 255; + set(255.0); } void MotorDriver::reverse() { - // AIN1 / D3 = LOW - // AIN2 / D11 = HIGH - - //PORTD &= ~(1 << PORTD3); - //PORTB |= (1 << PORTB3); - - OCR2B = 0; - OCR2A = 255; + set(-255.0); } void MotorDriver::stop() { // Both LOW - - //PORTD &= ~(1 << PORTD3); - //PORTB &= ~(1 << PORTB3); - - OCR2A = 0; - OCR2B = 0; + ain1_off(); + ain2_off(); } void MotorDriver::set(double pwm) @@ -97,26 +103,28 @@ void MotorDriver::set(double pwm) } - if (pwm > 0) + uint8_t duty = (uint8_t)(pwm > 0 ? pwm : -pwm); + + if (duty == 0) + { + stop(); + } + else if (pwm > 0) { // Forward - OCR2A = 0; - OCR2B = (uint8_t)pwm; - } - else if (pwm < 0) - { - // Reverse - OCR2B = 0; - OCR2A = (uint8_t)(-pwm); + ain2_off(); + ain1_pwm(duty); } else { - stop(); + // Reverse + ain1_off(); + ain2_pwm(duty); } } bool MotorDriver::fault_active() { - return !(PIND & (1 << PIND4)); + return !(PIND & (1 << PIND4));p } diff --git a/src/operational_state.cpp b/src/operational_state.cpp index e663fd2..2f07ff3 100644 --- a/src/operational_state.cpp +++ b/src/operational_state.cpp @@ -8,7 +8,7 @@ void OperationalState::enter() { Serial.println("State: Operational"); - digitalWrite(LED_BUILTIN, HIGH); + context->led_on(); } // Part 1 @@ -50,5 +50,5 @@ void OperationalState::exit() { context->stop_motor(); - digitalWrite(LED_BUILTIN, LOW); + context->led_off(); } \ No newline at end of file diff --git a/src/rotary_encoder_driver.cpp b/src/rotary_encoder_driver.cpp index 2faf856..2c75a4b 100644 --- a/src/rotary_encoder_driver.cpp +++ b/src/rotary_encoder_driver.cpp @@ -1,80 +1,70 @@ #include "rotary_encoder_driver.h" #include -RotaryEncoderDriver* driver = nullptr; +static RotaryEncoderDriver* driver = nullptr; RotaryEncoderDriver::RotaryEncoderDriver() - : cycle(0) - , count(0) - , prev_count(0) + : count(0) + , delta(0) , speed_ready(false) , hist_idx(0) , eA(2) , eB(5) - , delta(0) { - for (uint8_t i = 0; i < HIST_LEN; i++) + for (uint8_t i = 0; i < HIST_LEN; i++) { history[i] = 0; } } -void RotaryEncoderDriver::begin() +void RotaryEncoderDriver::begin() { driver = this; - //led.init(); eA.init(); eB.init(); EICRA |= (1<update(); } -ISR(TIMER1_COMPA_vect) +ISR(TIMER1_COMPA_vect) { - driver->update_delta(); + driver->update_delta(); } - - diff --git a/src/rotary_encoder_driver_unused.cpp b/src/rotary_encoder_driver_unused.cpp deleted file mode 100644 index 9459537..0000000 --- a/src/rotary_encoder_driver_unused.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* #include "rotary_encoder_driver.h" -#include - -RotaryEncoderDriver* driver = nullptr; - -RotaryEncoderDriver::RotaryEncoderDriver() - : cycle(0) - , count(0) - , prev_count(0) - , led(5) - , eA(2) - , eB(5) {} - -void RotaryEncoderDriver::begin() { - driver = this; - - led.init(); - eA.init(); - eB.init(); - - EICRA |= (1<update(); -} -ISR(TIMER1_COMPA_vect) { - driver->update_delta(); -} - - */ \ No newline at end of file diff --git a/src/temporary_main.cpp b/src/temporary_main.cpp deleted file mode 100644 index b51b730..0000000 --- a/src/temporary_main.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Óvirkt núna, "alvöru" main() er í main.cpp. Þessi skrá var notuð í undirbúning/prófun - -#include - -#include "p_controller.h" - -P_controller controller(2.0); - -int main() -{ - init(); - - Serial.begin(115200); - - double result = controller.update(100.0, 70.0); - - Serial.print("PWM = "); - Serial.println(result); - - while (true) - { - } - - return 0; -} - - -#include -#include - -#include "motor_driver.h" - -MotorDriver motor; - -int main() -{ - init(); - - motor.begin(); - - while (true) - { - motor.set(60); - _delay_ms(3000); - - motor.set(120); - _delay_ms(3000); - - motor.set(240); - _delay_ms(3000); - } -} -*/