149 lines
3.2 KiB
C++
149 lines
3.2 KiB
C++
#ifndef _ROBOCUP_SENSORS_H_
|
|
#define _ROBOCUP_SENSORS_H_
|
|
|
|
#include "qfixSoccerBoard.h"
|
|
|
|
#define SENSOR_PORT_LINIE_LINKS 0
|
|
#define SENSOR_PORT_LINIE_MITTE 1
|
|
#define SENSOR_PORT_LINIE_RECHTS 2
|
|
|
|
#define SENSOR_PORT_D_L 3
|
|
#define SENSOR_PORT_D_VL 4
|
|
#define SENSOR_PORT_D_V 5
|
|
#define SENSOR_PORT_D_VR 6
|
|
#define SENSOR_PORT_D_R 7
|
|
|
|
#define LINIE_WEISS 70
|
|
#define LINIE_FEHLER 71
|
|
|
|
#define SW_SCHWARZ(sensor) (sensor->getWert() > m_gw_sw)
|
|
#define SW_WEISS(sensor) (sensor->getWert() <= m_gw_sw)
|
|
|
|
#define C_SCHWARZ(sensor) (sensor->getWert() > m_gw_sg)
|
|
#define C_GRUEN(sensor) (sensor->getWert() > m_gw_gw && sensor->getWert() <= m_gw_sg)
|
|
#define C_WEISS(sensor) (sensor->getWert() > m_gw_ws && sensor->getWert() <= m_gw_gw)
|
|
#define C_SILBER(sensor) (sensor->getWert() <= m_gw_ws)
|
|
|
|
|
|
class Sensor {
|
|
private:
|
|
SoccerBoard *m_board;
|
|
int m_port;
|
|
int m_wert;
|
|
|
|
public:
|
|
Sensor(SoccerBoard *board, int port) {
|
|
m_board = board;
|
|
m_port = port;
|
|
}
|
|
|
|
void update();
|
|
|
|
int getWert() {
|
|
return m_wert;
|
|
}
|
|
};
|
|
|
|
|
|
class Sensors {
|
|
private:
|
|
SoccerBoard *m_board;
|
|
|
|
bool m_kalibriert;
|
|
|
|
Sensor *m_lsLinks, *m_lsMitte, *m_lsRechts;
|
|
int m_sLinks, m_sMitte, m_sRechts;
|
|
int m_gLinks, m_gMitte, m_gRechts;
|
|
int m_liniePos;
|
|
|
|
int m_gw_sg; // Grenzwert schwarz/grün
|
|
int m_gw_gw; // Grenzwert grün/weiß
|
|
int m_gw_ws; // Grenzwert weiß/silber
|
|
int m_gw_sw; // Grenzwert schwarz/weiß
|
|
|
|
Sensor *m_dsL, *m_dsVL, *m_dsV, *m_dsVR, *m_dsR;
|
|
public:
|
|
Sensors(SoccerBoard *board) {
|
|
m_board = board;
|
|
|
|
m_kalibriert = false;
|
|
|
|
m_lsLinks = new Sensor(board, SENSOR_PORT_LINIE_LINKS);
|
|
m_lsMitte = new Sensor(board, SENSOR_PORT_LINIE_MITTE);
|
|
m_lsRechts = new Sensor(board, SENSOR_PORT_LINIE_RECHTS);
|
|
|
|
m_dsL = new Sensor(board, SENSOR_PORT_D_L);
|
|
m_dsVL = new Sensor(board, SENSOR_PORT_D_VL);
|
|
m_dsV = new Sensor(board, SENSOR_PORT_D_V);
|
|
m_dsVR = new Sensor(board, SENSOR_PORT_D_VR);
|
|
m_dsR = new Sensor(board, SENSOR_PORT_D_R);
|
|
|
|
m_sLinks = m_sMitte = m_sRechts = 0;
|
|
m_gLinks = m_gMitte = m_gRechts = 0;
|
|
|
|
m_liniePos = 0;
|
|
}
|
|
|
|
~Sensors() {
|
|
delete m_lsLinks;
|
|
delete m_lsMitte;
|
|
delete m_lsRechts;
|
|
|
|
delete m_dsL;
|
|
delete m_dsVL;
|
|
delete m_dsV;
|
|
delete m_dsVR;
|
|
delete m_dsR;
|
|
}
|
|
|
|
int getLinie() {return m_liniePos;}
|
|
bool getOpfer() {
|
|
return /*(m_sLinks && m_sMitte && m_sRechts) || */(m_gLinks && m_gMitte && m_gRechts);
|
|
}
|
|
|
|
bool hindernisL() {
|
|
return (m_dsL->getWert() > HINDERNIS_ERKENNUNGSWERT_SEITL);
|
|
}
|
|
|
|
bool hindernisVL() {
|
|
return (m_dsVL->getWert() > HINDERNIS_ERKENNUNGSWERT);
|
|
}
|
|
|
|
bool hindernisV() {
|
|
return (m_dsV->getWert() > HINDERNIS_ERKENNUNGSWERT);
|
|
}
|
|
|
|
bool hindernisVR() {
|
|
return (m_dsVR->getWert() > HINDERNIS_ERKENNUNGSWERT);
|
|
}
|
|
|
|
bool hindernisR() {
|
|
return m_dsR->getWert();
|
|
}
|
|
|
|
int getDsL() {
|
|
return m_dsL->getWert();
|
|
}
|
|
|
|
int getDsVL() {
|
|
return m_dsVL->getWert();
|
|
}
|
|
|
|
int getDsV() {
|
|
return m_dsV->getWert();
|
|
}
|
|
|
|
int getDsVR() {
|
|
return m_dsVR->getWert();
|
|
}
|
|
|
|
int getDsR() {
|
|
return m_dsR->getWert();
|
|
}
|
|
|
|
void update();
|
|
void auswerten();
|
|
bool kalibrieren();
|
|
};
|
|
|
|
#endif
|