#include <Mouse.h>
const int xAxis = A1; // analóg érzékelő az X tengelyhez
const int yAxis = A2; // analóg érzékelő az Y tengelyhez
int range = 12; // X vagy Y mozgás kimeneti tartománya
int responseDelay = 2; // az egér válaszkésleltetése, ms-ban
int threshold = range / 4; // nyugalmi küszöb
int center = range / 2; // nyugalmi helyzet értéke
int minima[] = {1023, 1023}; // tényleges analogRead minimum {x, y}-hoz
int maxima[] = {0, 0}; // tényleges analogRead maximum {x, y}-hoz
int axis[] = {xAxis, yAxis}; // pin számok {x, y}-hoz
int mouseReading[2]; // utolsó egérérték {x, y}-hoz
void setup() {
Mouse.begin();
}
void loop() {
// olvassa el és skálázza a két tengelyt:
int xReading = readAxis(0);
int yReading = readAxis(1);
// mozgasd az egeret:
Mouse.move(xReading, yReading, 0);
delay(responseDelay);
}
/*
beolvas egy tengelyt (0 vagy 1 x vagy y esetén), és az analóg bemeneti tartományt
0 és <range> közötti tartományra skálázza
*/
int readAxis(int axisNumber) {
int distance = 0; // távolság a kimeneti tartomány közepétől
// az analóg input olvasása:
int reading = analogRead(axis[axisNumber]);
// az aktuális leolvasás meghaladja ennek a tengelynek a max vagy min értékét,
// állítsa vissza a max vagy min értéket:
if (reading < minima[axisNumber]) {
minima[axisNumber] = reading;
}
if (reading > maxima[axisNumber]) {
maxima[axisNumber] = reading;
}
// az olvasott leképezése az analóg bemeneti tartományból a kimeneti tartományra:
reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range);
// ha a kimeneti érték kívül esik a
// nyugalmi helyzet küszöbén, használja:
if (abs(reading - center) > threshold) {
distance = (reading - center);
}
// az Y tengelyt meg kell fordítani
// a mozgás megfelelő leképezéséhez:
if (axisNumber == 1) {
distance = -distance;
}
// visszaadja ennek a tengelynek a távolságát:
return distance;
}