From 803027cbb45ebe01e4f8b427a7cc95728d6e5f47 Mon Sep 17 00:00:00 2001 From: sicarius Date: Sat, 17 Feb 2007 13:42:00 +0000 Subject: +++ enhanced framework hardware interface --- source/Concept/Framework/RoboCode.aps | 2 +- source/Concept/Framework/default/Makefile | 14 +- source/Concept/Framework/defines.h | 20 ++- source/Concept/Framework/display.h | 135 ++++++++++++++++- source/Concept/Framework/engine.h | 2 +- source/Concept/Framework/keyboard.cpp | 1 + source/Concept/Framework/keyboard.h | 87 +++++++++++ source/Concept/Framework/main.cpp | 60 ++++++++ source/Concept/Framework/mouse_sensor.cpp | 1 + source/Concept/Framework/mouse_sensor.h | 203 ++++++++++++++++++++++++++ source/Concept/Framework/position_tracker.cpp | 7 + source/Concept/Framework/position_tracker.h | 27 ++++ source/Concept/Framework/robot.cpp | 4 +- source/Concept/Framework/stdafx.h | 3 + 14 files changed, 555 insertions(+), 11 deletions(-) create mode 100644 source/Concept/Framework/keyboard.cpp create mode 100644 source/Concept/Framework/keyboard.h create mode 100644 source/Concept/Framework/mouse_sensor.cpp create mode 100644 source/Concept/Framework/mouse_sensor.h create mode 100644 source/Concept/Framework/position_tracker.cpp create mode 100644 source/Concept/Framework/position_tracker.h (limited to 'source/Concept') diff --git a/source/Concept/Framework/RoboCode.aps b/source/Concept/Framework/RoboCode.aps index b759997..dc61dc5 100644 --- a/source/Concept/Framework/RoboCode.aps +++ b/source/Concept/Framework/RoboCode.aps @@ -1 +1 @@ -RoboCode16-Feb-2007 15:16:4617-Feb-2007 01:31:58241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfY:\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000main.cppsensor.cpptools.cppatmega128io.cppdistance_sensor.cppengine.cppio_module.cppir_sensor.cppkicker.cppled.cpprobot.cppdribbler.cppdisplay.cppsensor.hstdafx.htools.hatmega128io.hdefines.hdistance_sensor.hengine.hio_module.hir_sensor.hkicker.hled.hrobot.hdribbler.hdisplay.hdefault\MakefiledefaultYESdefault\Makefileatmega128100RoboCode.elfdefault\1-Wall -gdwarf-2 -O0 -fsigned-chardefault1C:\WinAVR\bin\avr-gcc.exeC:\WinAVR\utils\bin\make.exeY:\Concept\Framework\sensor.hY:\Concept\Framework\stdafx.hY:\Concept\Framework\tools.hY:\Concept\Framework\atmega128io.hY:\Concept\Framework\defines.hY:\Concept\Framework\distance_sensor.hY:\Concept\Framework\engine.hY:\Concept\Framework\io_module.hY:\Concept\Framework\ir_sensor.hY:\Concept\Framework\kicker.hY:\Concept\Framework\led.hY:\Concept\Framework\robot.hY:\Concept\Framework\dribbler.hY:\Concept\Framework\display.hY:\Concept\Framework\main.cppY:\Concept\Framework\sensor.cppY:\Concept\Framework\tools.cppY:\Concept\Framework\atmega128io.cppY:\Concept\Framework\distance_sensor.cppY:\Concept\Framework\engine.cppY:\Concept\Framework\io_module.cppY:\Concept\Framework\ir_sensor.cppY:\Concept\Framework\kicker.cppY:\Concept\Framework\led.cppY:\Concept\Framework\robot.cppY:\Concept\Framework\dribbler.cppY:\Concept\Framework\display.cpp00000stdafx.h100001engine.h100002defines.h100003io_module.h100004robot.h100005robot.cpp100006atmega128io.h100007main.cpp100008tools.cpp100009tools.h100010distance_sensor.h100011ir_sensor.h100012kicker.h100013led.h100014sensor.h100015dribbler.h100016kicker.cpp100017dribbler.cpp100018ir_sensor.cpp100019io_module.cpp100020engine.cpp100021distance_sensor.cpp100022atmega128io.cpp100023led.cpp100024sensor.cpp100025display.h100026display.cpp1299 73 1025 5287 24347 137 947 38311 21369 159 969 40557 11391 181 991 42716 0413 203 1013 44919 38303 93 903 33969 15347 137 947 38318 37299 72 1025 52786 2Maximized391 181 991 4272 0413 203 1013 44936 2300 100 930 4054 19322 129 952 43423 0344 158 974 46329 0366 187 996 49258 0388 216 1018 5210 0300 100 930 40543 0344 158 974 4631 0366 187 996 4920 0388 216 1018 5219 0300 100 930 4051 0322 129 952 4341 0344 158 974 4630 28366 187 996 492463 0388 216 1018 5211 0300 100 930 4050 19303 102 933 40726 11347 160 977 4650 0 +RoboCode16-Feb-2007 15:16:4617-Feb-2007 14:21:10241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfY:\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000main.cppsensor.cpptools.cppatmega128io.cppdistance_sensor.cppengine.cppio_module.cppir_sensor.cppkicker.cppled.cpprobot.cppdribbler.cppdisplay.cppmouse_sensor.cppkeyboard.cppposition_tracker.cppsensor.hstdafx.htools.hatmega128io.hdefines.hdistance_sensor.hengine.hio_module.hir_sensor.hkicker.hled.hrobot.hdribbler.hdisplay.hmouse_sensor.hkeyboard.hposition_tracker.hdefault\MakefiledefaultYESdefault\Makefileatmega128100RoboCode.elfdefault\1-Wall -gdwarf-2 -O0 -fsigned-chardefault1C:\WinAVR\bin\avr-gcc.exeC:\WinAVR\utils\bin\make.exeY:\Concept\Framework\sensor.hY:\Concept\Framework\stdafx.hY:\Concept\Framework\tools.hY:\Concept\Framework\atmega128io.hY:\Concept\Framework\defines.hY:\Concept\Framework\distance_sensor.hY:\Concept\Framework\engine.hY:\Concept\Framework\io_module.hY:\Concept\Framework\ir_sensor.hY:\Concept\Framework\kicker.hY:\Concept\Framework\led.hY:\Concept\Framework\robot.hY:\Concept\Framework\dribbler.hY:\Concept\Framework\display.hY:\Concept\Framework\mouse_sensor.hY:\Concept\Framework\keyboard.hY:\Concept\Framework\main.cppY:\Concept\Framework\sensor.cppY:\Concept\Framework\tools.cppY:\Concept\Framework\atmega128io.cppY:\Concept\Framework\distance_sensor.cppY:\Concept\Framework\engine.cppY:\Concept\Framework\io_module.cppY:\Concept\Framework\ir_sensor.cppY:\Concept\Framework\kicker.cppY:\Concept\Framework\led.cppY:\Concept\Framework\robot.cppY:\Concept\Framework\dribbler.cppY:\Concept\Framework\display.cppY:\Concept\Framework\mouse_sensor.cppY:\Concept\Framework\keyboard.cpp00000stdafx.h100001engine.h100002defines.h100003io_module.h100004robot.h100005robot.cpp100006atmega128io.h100007main.cpp100008tools.cpp100009tools.h100010distance_sensor.h100011ir_sensor.h100012kicker.h100013led.h100014sensor.h100015dribbler.h100016kicker.cpp100017dribbler.cpp100018ir_sensor.cpp100019io_module.cpp100020engine.cpp100021distance_sensor.cpp100022atmega128io.cpp100023led.cpp100024sensor.cpp100025display.h100026display.cpp100027mouse_sensor.h100028mouse_sensor.cpp100029keyboard.h100030keyboard.cpp100031position_tracker.h100032position_tracker.cpp1299 74 1025 52920 29344 135 944 381111 2366 157 966 403148 6388 179 988 42516 0410 201 1010 44719 0300 91 900 33797 44344 135 944 38118 0296 70 1022 525149 41388 179 988 4252 0410 201 1010 44732 17297 98 927 40319 33319 127 949 43257 7341 156 971 46129 0363 185 993 49058 0385 214 1015 51917 22297 98 927 40358 16341 156 971 4611 0363 185 993 4900 0385 214 1015 5199 0297 98 927 4031 0319 127 949 4321 0341 156 971 4610 0363 185 993 490511 0385 214 1015 5191 0297 98 927 4030 0300 100 930 405170 2344 158 974 4630 0347 160 977 465198 38391 218 1021 5231 0303 102 933 40734 10347 160 977 4651 0299 72 1025 52717 28Maximized303 102 933 4071 0 diff --git a/source/Concept/Framework/default/Makefile b/source/Concept/Framework/default/Makefile index 20eef5c..e8aa72d 100644 --- a/source/Concept/Framework/default/Makefile +++ b/source/Concept/Framework/default/Makefile @@ -34,7 +34,7 @@ HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 ## Objects that must be built in order to link -OBJECTS = main.o sensor.o tools.o atmega128io.o distance_sensor.o engine.o io_module.o ir_sensor.o kicker.o led.o robot.o +OBJECTS = main.o sensor.o tools.o atmega128io.o display.o keyboard.o distance_sensor.o mouse_sensor.o engine.o dribbler.o io_module.o ir_sensor.o kicker.o led.o robot.o position_tracker.o ## Objects explicitly added by the user LINKONLYOBJECTS = @@ -64,15 +64,27 @@ engine.o: ../engine.cpp led.o: ../led.cpp $(CC) $(INCLUDES) $(CFLAGS) -c $< +display.o: ../display.cpp + $(CC) $(INCLUDES) $(CFLAGS) -c $< + +keyboard.o: ../keyboard.cpp + $(CC) $(INCLUDES) $(CFLAGS) -c $< + ir_sensor.o: ../ir_sensor.cpp $(CC) $(INCLUDES) $(CFLAGS) -c $< distance_sensor.o: ../distance_sensor.cpp $(CC) $(INCLUDES) $(CFLAGS) -c $< +mouse_sensor.o: ../mouse_sensor.cpp + $(CC) $(INCLUDES) $(CFLAGS) -c $< + kicker.o: ../kicker.cpp $(CC) $(INCLUDES) $(CFLAGS) -c $< +dribbler.o: ../dribbler.cpp + $(CC) $(INCLUDES) $(CFLAGS) -c $< + atmega128io.o: ../atmega128io.cpp $(CC) $(INCLUDES) $(CFLAGS) -c $< diff --git a/source/Concept/Framework/defines.h b/source/Concept/Framework/defines.h index 1e25ba5..2bc59d9 100644 --- a/source/Concept/Framework/defines.h +++ b/source/Concept/Framework/defines.h @@ -105,6 +105,8 @@ enum IOModuleNames IO_SENSOR_DISTANCE_90_DEG, IO_SENSOR_DISTANCE_180_DEG, IO_SENSOR_DISTANCE_270_DEG, + IO_SENSOR_MOUSE_LEFT, + IO_SENSOR_MOUSE_RIGHT, IO_SENSOR_END, @@ -124,8 +126,24 @@ enum IOModuleNames IO_DISPLAY_END, + //Keyboards + + IO_KEYBOARD_START = IO_DISPLAY_END, + + IO_KEYBOARD_MAIN = IO_KEYBOARD_START, + + IO_KEYBOARD_END, + + //Position Tracker + + IO_POSITION_TRACKER_START = IO_KEYBOARD_END, + + IO_POSITION_TRACKER_MAIN, + + IO_POSITION_TRACKER_END, + //General - IO_END = IO_DISPLAY_END, + IO_END = IO_POSITION_TRACKER_END, }; #endif diff --git a/source/Concept/Framework/display.h b/source/Concept/Framework/display.h index 8e6e0a4..df18e62 100644 --- a/source/Concept/Framework/display.h +++ b/source/Concept/Framework/display.h @@ -10,31 +10,74 @@ public: { this->parent = NULL; this->moduleId = 0; + this->cursorVisible = false; + this->illuminationEnabled = true; + this->commandClear = 0; + this->commandReturnCursor = 0; + this->commandNewLine = 0; + this->commandSetting = 0; + this->settingCursorVisible = 0; + this->settingIllumination = 0; + this->settingCursorPosition = 0; } Display(uint32 displayId) { this->parent = NULL; this->moduleId = displayId; + this->cursorVisible = false; + this->illuminationEnabled = true; switch(displayId) { case IO_DISPLAY_MAIN: + this->commandClear = 12; + this->commandReturnCursor = 13; + this->commandNewLine = 10; + this->commandSetting = 27; + this->settingCursorVisible = 67; + this->settingIllumination = 76; + this->settingCursorPosition = 79; msleep(500); uart1_init(103);//9600 BAUD at 16MHz Atmel sleep(2); break; default: + this->commandClear = 0; + this->commandReturnCursor = 0; + this->commandNewLine = 0; + this->commandSetting = 0; + this->settingCursorVisible = 0; + this->settingIllumination = 0; + this->settingCursorPosition = 0; break; } } protected: - //Hardware - volatile uint8* hardwarePort; - volatile uint16* pwmSpeed; - uint8 pinForward; - uint8 pinReverse; + bool cursorVisible; + bool illuminationEnabled; + //Commands + uint8 commandClear; + uint8 commandReturnCursor; + uint8 commandNewLine; + uint8 commandSetting; + //Settings + uint8 settingCursorVisible; + uint8 settingIllumination; + uint8 settingCursorPosition; + + void SendCommand(uint8 newCommand) + { + switch(moduleId) + { + case IO_DISPLAY_MAIN: + uart1_putc(newCommand); + break; + default: + break; + } + } public: void Print(char* newString) @@ -55,6 +98,88 @@ public: ltoa(newInteger, buffer, 10); Print(buffer); } + + void Print(char* newString, uint8 xPos, uint8 yPos) + { + SetCursorPosition(xPos, yPos); + Print(newString); + } + + void Print(int32 newInteger, uint8 xPos, uint8 yPos) + { + SetCursorPosition(xPos, yPos); + Print(newInteger); + } + + void Clear() + { + SendCommand(commandClear); + } + + void ReturnCursor() + { + SendCommand(commandReturnCursor); + } + + void NewLine() + { + SendCommand(commandNewLine); + } + + bool GetCursorVisible() + { + return cursorVisible; + } + + void SetCursorVisible(bool newStatus) + { + cursorVisible = newStatus; + + SendCommand(commandSetting); + SendCommand(settingCursorVisible); + + if(cursorVisible) + { + SendCommand(1); + } + else + { + SendCommand(0); + } + } + + bool GetLightingEnabled() + { + return illuminationEnabled; + } + + void SetLightingEnabled(bool newStatus) + { + illuminationEnabled = newStatus; + + SendCommand(commandSetting); + SendCommand(settingIllumination); + + if(illuminationEnabled) + { + SendCommand(1); + } + else + { + SendCommand(0); + } + } + + void SetCursorPosition(uint8 newX, uint8 newY) + { + if(!newX || newX > 20) return; + if(!newY || newY > 4) return; + + SendCommand(commandSetting); + SendCommand(settingCursorPosition); + SendCommand(newX); + SendCommand(newY); + } }; #endif diff --git a/source/Concept/Framework/engine.h b/source/Concept/Framework/engine.h index 0e7cf8c..8dd284e 100644 --- a/source/Concept/Framework/engine.h +++ b/source/Concept/Framework/engine.h @@ -103,7 +103,7 @@ public: { curSpeed = newSpeed; - *pwmSpeed = abs(newSpeed / SPEED_PER_PWM); + *pwmSpeed = (abs((int16)(newSpeed / SPEED_PER_PWM))); UpdateDirection(); } diff --git a/source/Concept/Framework/keyboard.cpp b/source/Concept/Framework/keyboard.cpp new file mode 100644 index 0000000..65fc7cf --- /dev/null +++ b/source/Concept/Framework/keyboard.cpp @@ -0,0 +1 @@ +#include "keyboard.h" diff --git a/source/Concept/Framework/keyboard.h b/source/Concept/Framework/keyboard.h new file mode 100644 index 0000000..d984586 --- /dev/null +++ b/source/Concept/Framework/keyboard.h @@ -0,0 +1,87 @@ +#ifndef _KEYBOARD_H +#define _KEYBOARD_H + +#include "stdafx.h" + +class Keyboard : public IO_Module +{ +public: + Keyboard() + { + this->parent = NULL; + this->moduleId = 0; + this->commandSetting = 0; + this->settingClearBuffer = 0; + } + + Keyboard(uint32 keyboardId) + { + this->parent = NULL; + this->moduleId = keyboardId; + + switch(keyboardId) + { + case IO_KEYBOARD_MAIN: + this->commandSetting = 27; + this->settingClearBuffer = 123; + break; + default: + this->commandSetting = 0; + this->settingClearBuffer = 0; + break; + } + } + +protected: + //Commands + uint8 commandSetting; + //Settings + uint8 settingClearBuffer; + + void SendCommand(uint8 newCommand) + { + switch(moduleId) + { + case IO_KEYBOARD_MAIN: + uart1_putc(newCommand); + break; + default: + break; + } + } + +public: + uint8 GetInput() + { + uint16 input = uart1_getc(); + + if(input == 0x100)//no data + { + return 0xEE;//empty + } + else if(input >= '0' && input <= '9') + { + return (uint8)(input - '0'); + } + else if(input == '*') + { + return 10; + } + else if(input == '#') + { + return 11; + } + else + { + return 0xFF;//unknown + } + } + + void ClearKeyBuffer() + { + SendCommand(commandSetting); + SendCommand(settingClearBuffer); + } +}; + +#endif diff --git a/source/Concept/Framework/main.cpp b/source/Concept/Framework/main.cpp index a3cd05c..f689d88 100644 --- a/source/Concept/Framework/main.cpp +++ b/source/Concept/Framework/main.cpp @@ -59,6 +59,14 @@ int main() newSensor = NULL; break; } + case IO_SENSOR_MOUSE_LEFT: + case IO_SENSOR_MOUSE_RIGHT: + { + Mouse_Sensor* newSensor = new Mouse_Sensor(i); + localRobot->AddModule(newSensor); + newSensor = NULL; + break; + } //Other cases default: { @@ -86,9 +94,61 @@ int main() newDisplay = NULL; } + //Init Keyboards + for(uint8 i = IO_KEYBOARD_START; i < IO_KEYBOARD_END; i++) + { + Keyboard* newKeyboard = new Keyboard(i); + localRobot->AddModule(newKeyboard); + newKeyboard = NULL; + } + + Keyboard* ourKeyboard = localRobot->GetModule(IO_KEYBOARD_MAIN); + IR_Sensor* ourSensor = NULL; + uint16 value = 0; + Display* ourDisplay = localRobot->GetModule(IO_DISPLAY_MAIN); + uint32 i = 1; + //Run while(true) { + msleep(500); + ourDisplay->Clear(); + ourDisplay->Print(i++); + ourDisplay->NewLine(); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_0_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value, 1, 2); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_30_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_60_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_100_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_180_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value, 1, 3); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_260_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_300_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourSensor = localRobot->GetModule(IO_SENSOR_IR_330_DEG); + value = ourSensor->GetIRIntensity(); + ourDisplay->Print(value); + ourDisplay->Print(";"); + ourDisplay->Print(ourKeyboard->GetInput(), 1, 4); + localRobot->Update(); } diff --git a/source/Concept/Framework/mouse_sensor.cpp b/source/Concept/Framework/mouse_sensor.cpp new file mode 100644 index 0000000..214a13e --- /dev/null +++ b/source/Concept/Framework/mouse_sensor.cpp @@ -0,0 +1 @@ +#include "mouse_sensor.h" diff --git a/source/Concept/Framework/mouse_sensor.h b/source/Concept/Framework/mouse_sensor.h new file mode 100644 index 0000000..8247693 --- /dev/null +++ b/source/Concept/Framework/mouse_sensor.h @@ -0,0 +1,203 @@ +#ifndef _MOUSE_SENSOR_H +#define _MOUSE_SENSOR_H + +#include "stdafx.h" +#include "sensor.h" + +class Mouse_Sensor : public Sensor +{ +public: + Mouse_Sensor() + { + this->parent = NULL; + this->moduleId = 0; + this->hardwarePort = NULL; + this->hardwareDDR = NULL; + this->hardwarePin = NULL; + this->pinSDA = 0; + this->pinSCK = 0; + this->registerConfig = 0; + this->registerPixelData = 0; + this->registerSqual = 0; + this->registerDeltaX = 0; + this->registerDeltaY = 0; + this->configReset = 0; + this->configAwake = 0; + this->newImage = false; + } + + Mouse_Sensor(uint32 sensorId) + { + this->parent = NULL; + this->moduleId = sensorId; + this->newImage = false; + + switch(sensorId) + { + case IO_SENSOR_MOUSE_LEFT: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pinSDA = (1 << 4); + this->pinSCK = (1 << 6); + this->registerConfig = 0x00; + this->registerPixelData = 0x08; + this->registerSqual = 0x4; + this->registerDeltaX = 0x3; + this->registerDeltaY = 0x2; + this->configReset = 0x80; + this->configAwake = 0x01; + break; + case IO_SENSOR_MOUSE_RIGHT: + this->hardwarePort = &PORTC; + this->hardwareDDR = &DDRC; + this->hardwarePin = &PINC; + this->pinSDA = (1 << 5); + this->pinSCK = (1 << 7); + this->registerConfig = 0x00; + this->registerPixelData = 0x08; + this->registerSqual = 0x4; + this->registerDeltaX = 0x3; + this->registerDeltaY = 0x2; + this->configReset = 0x80; + this->configAwake = 0x01; + break; + default: + this->hardwarePort = NULL; + this->hardwareDDR = NULL; + this->hardwarePin = NULL; + this->pinSDA = 0; + this->pinSCK = 0; + this->registerConfig = 0; + this->registerPixelData = 0; + this->registerSqual = 0; + this->registerDeltaX = 0; + this->registerDeltaY = 0; + this->configReset = 0; + this->configAwake = 0; + break; + } + + msleep(100); + + *hardwareDDR |= pinSCK; + *hardwarePort &= ~pinSCK; + + msleep(10); + + Write(registerConfig, configReset); + Write(registerConfig, configAwake); + } + +protected: + //Hardware + volatile uint8* hardwarePort; + volatile uint8* hardwareDDR; + volatile uint8* hardwarePin; + uint8 pinSDA; + uint8 pinSCK; + bool newImage; + //Registers and Settings + uint8 registerConfig; + uint8 registerPixelData; + uint8 registerSqual; + uint8 registerDeltaX; + uint8 registerDeltaY; + uint8 configReset; + uint8 configAwake; + +public: + void WriteByte(uint8 newByte) + { + *hardwareDDR |= pinSDA;//Set SDA output + + for(uint8 i = 0; i < 8; i++) + { + *hardwarePort &= ~pinSCK;//prepare SCK + + //write data + *hardwarePort = (*hardwarePort & (~(*hardwarePin))) | + ((newByte >> 7) * pinSDA); + + newByte = newByte << 1;//prepare next byte + asm volatile("nop"); + + *hardwarePort |= pinSCK; + } + } + + void Write(int8 adr, uint8 data) + { + WriteByte(adr | 0x80); + WriteByte(data); + usleep(100); + } + + uint8 ReadByte() + { + uint8 data=0; + + *hardwareDDR &= ~pinSDA;//Set SDA input + + for(uint8 i = 0; i < 8; i++) + { + *hardwarePort &= ~pinSCK;//Prepare data + data = data << 1; + + asm volatile("nop"); + *hardwarePort |= pinSCK;//Prepare for reading + + data |= (*hardwarePin & pinSDA) / pinSDA; + } + + return data; + } + + uint8 Read(uint8 adr) + { + WriteByte(adr); + usleep(100); + + return ReadByte(); + } + + void ImagePrepare() + { + Write(registerConfig, configAwake); + Write(registerPixelData, 0x00); + + newImage = true; + } + + uint8 ImageRead() + { + uint8 pixel = Read(registerPixelData); + if(newImage) + { + while (!(pixel & 0x80))//0x80 indicates first pixel + { + pixel=Read(registerPixelData); + } + newImage = false; + } + + return pixel; + } + + uint8 GetSqual() + { + return Read(registerSqual); + } + + int8 GetXMovement() + { + return (int8)(Read(registerDeltaX)); + } + + int8 GetYMovement() + { + return (int8)(Read(registerDeltaY)); + } +}; + +#endif diff --git a/source/Concept/Framework/position_tracker.cpp b/source/Concept/Framework/position_tracker.cpp new file mode 100644 index 0000000..262069a --- /dev/null +++ b/source/Concept/Framework/position_tracker.cpp @@ -0,0 +1,7 @@ +#include "position_tracker.h" + +//----------------------------------------------------------------------------- +void Position_Tracker::Update() +{ + //insert code here +} diff --git a/source/Concept/Framework/position_tracker.h b/source/Concept/Framework/position_tracker.h new file mode 100644 index 0000000..49c5d40 --- /dev/null +++ b/source/Concept/Framework/position_tracker.h @@ -0,0 +1,27 @@ +#ifndef _POSITION_TRACKER_H +#define _POSITION_TRACKER_H + +#include "stdafx.h" + +class Position_Tracker : public IO_Module +{ +public: + Position_Tracker() + { + this->parent = NULL; + this->moduleId = 0; + } + + Position_Tracker(uint32 trackerId) + { + this->parent = NULL; + this->moduleId = trackerId; + } + +protected: + +public: + void Update(); +}; + +#endif diff --git a/source/Concept/Framework/robot.cpp b/source/Concept/Framework/robot.cpp index a051dd4..5c673cb 100644 --- a/source/Concept/Framework/robot.cpp +++ b/source/Concept/Framework/robot.cpp @@ -95,8 +95,8 @@ uint16 Robot::GetADCValue(uint8 channel) uint32 result = 0; - //Activate ADC and set division factor to 64 - ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); + //Activate ADC and set division factor to 8 + ADCSRA = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS0); //Set multiplexer channel ADMUX = channel; diff --git a/source/Concept/Framework/stdafx.h b/source/Concept/Framework/stdafx.h index f48adfe..151d749 100644 --- a/source/Concept/Framework/stdafx.h +++ b/source/Concept/Framework/stdafx.h @@ -9,6 +9,7 @@ #include "tools.h" #include "io_module.h" #include "display.h" +#include "keyboard.h" #include "sensor.h" #include "engine.h" #include "dribbler.h" @@ -16,4 +17,6 @@ #include "led.h" #include "distance_sensor.h" #include "ir_sensor.h" +#include "mouse_sensor.h" +#include "position_tracker.h" #include "robot.h" -- cgit v1.2.3