+++ Additional Codework

This commit is contained in:
sicarius 2007-02-18 00:14:00 +00:00
parent 803027cbb4
commit 3c3c628b61
38 changed files with 1645 additions and 28 deletions

View file

@ -0,0 +1,32 @@
#include "distance_sensor.h"
//-----------------------------------------------------------------------------
float Distance_Sensor::GetDistance()
{
uint32 result = 0;
//Generate pulse
*hardwareDDR |= pin;//Set pin output
*hardwarePort |= pin;//Activate port
usleep(10);//Wait for 10ľs
//*hardwarePort &= ~pin;//Deactivate port
*hardwareDDR &= ~pin;//Set pin input
(parent->GetModule<Display>(IO_DISPLAY_MAIN))->Print("pre 1", 4, 1);
//Wait for response
while(!(PINC & pin)){asm volatile("nop");}
(parent->GetModule<Display>(IO_DISPLAY_MAIN))->Print("pre 2", 4, 1);
//Calculate duration of response
while(*hardwarePin & pin)
{
result++;
asm volatile("nop");
}
(parent->GetModule<Display>(IO_DISPLAY_MAIN))->Print("pre 3", 4, 1);
return (float(result) * DISTANCE_PER_VALUE);
}

View file

@ -0,0 +1,71 @@
#ifndef _DISTANCE_SENSOR_H
#define _DISTANCE_SENSOR_H
#include "../../stdafx.h"
#include "sensor.h"
class Distance_Sensor : public Sensor
{
public:
Distance_Sensor()
{
this->parent = NULL;
this->moduleId = 0;
this->hardwarePort = NULL;
this->hardwareDDR = NULL;
this->hardwarePin = NULL;
this->pin = 0;
}
Distance_Sensor(uint32 sensorId)
{
this->parent = NULL;
this->moduleId = sensorId;
switch(sensorId)
{
case IO_SENSOR_DISTANCE_0_DEG:
this->hardwarePort = &PORTC;
this->hardwareDDR = &DDRC;
this->hardwarePin = &PINC;
this->pin = (1 << 0);
break;
case IO_SENSOR_DISTANCE_90_DEG:
this->hardwarePort = &PORTC;
this->hardwareDDR = &DDRC;
this->hardwarePin = &PINC;
this->pin = (1 << 1);
break;
case IO_SENSOR_DISTANCE_180_DEG:
this->hardwarePort = &PORTC;
this->hardwareDDR = &DDRC;
this->hardwarePin = &PINC;
this->pin = (1 << 2);
break;
case IO_SENSOR_DISTANCE_270_DEG:
this->hardwarePort = &PORTC;
this->hardwareDDR = &DDRC;
this->hardwarePin = &PINC;
this->pin = (1 << 3);
break;
default:
this->hardwarePort = NULL;
this->hardwareDDR = NULL;
this->hardwarePin = NULL;
this->pin = 0;
break;
}
}
protected:
//Hardware
volatile uint8* hardwarePort;
volatile uint8* hardwareDDR;
volatile uint8* hardwarePin;
uint8 pin;
public:
float GetDistance();
};
#endif

View file

@ -0,0 +1,9 @@
#include "ir_sensor.h"
//-----------------------------------------------------------------------------
uint16 IR_Sensor::GetIRIntensity()
{
if(!parent) return 0;
return parent->GetADCValue(channel);
}

View file

@ -0,0 +1,62 @@
#ifndef _IR_SENSOR_H
#define _IR_SENSOR_H
#include "../../defines.h"
#include "../../robot.h"
#include "sensor.h"
class IR_Sensor : public Sensor
{
public:
IR_Sensor()
{
this->parent = NULL;
this->moduleId = 0;
}
IR_Sensor(uint32 sensorId)
{
this->parent = NULL;
this->moduleId = sensorId;
switch(sensorId)
{
case IO_SENSOR_IR_0_DEG:
this->channel = 0;
break;
case IO_SENSOR_IR_30_DEG:
this->channel = 1;
break;
case IO_SENSOR_IR_60_DEG:
this->channel = 2;
break;
case IO_SENSOR_IR_100_DEG:
this->channel = 3;
break;
case IO_SENSOR_IR_180_DEG:
this->channel = 4;
break;
case IO_SENSOR_IR_260_DEG:
this->channel = 5;
break;
case IO_SENSOR_IR_300_DEG:
this->channel = 6;
break;
case IO_SENSOR_IR_330_DEG:
this->channel = 7;
break;
default:
this->channel = 8;
break;
}
}
protected:
//Hardware
uint8 channel;
public:
uint16 GetIRIntensity();
};
#endif

View file

@ -0,0 +1 @@
#include "keyboard.h"

View file

@ -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

View file

@ -0,0 +1 @@
#include "mouse_sensor.h"

View file

@ -0,0 +1,199 @@
#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;
}
*hardwareDDR |= pinSCK;
*hardwarePort &= ~pinSCK;
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

View file

@ -0,0 +1 @@
#include "sensor.h"

View file

@ -0,0 +1,27 @@
#ifndef _SENSOR_H
#define _SENSOR_H
#include "../../defines.h"
#include "../io_module.h"
class Sensor : public IO_Module
{
public:
Sensor()
{
this->parent = NULL;
this->moduleId = 0;
}
Sensor(uint32 sensorId)
{
this->parent = NULL;
this->moduleId = sensorId;
}
protected:
public:
};
#endif