Fix issues with data not being correctly sent to motors for sim haptic.
This commit is contained in:
parent
03b96e84b0
commit
42d63ffe89
|
|
@ -6,8 +6,14 @@
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int motor;
|
uint32_t motor1;
|
||||||
int effect;
|
uint32_t effect1;
|
||||||
|
uint32_t motor2;
|
||||||
|
uint32_t effect2;
|
||||||
|
uint32_t motor3;
|
||||||
|
uint32_t effect3;
|
||||||
|
uint32_t motor4;
|
||||||
|
uint32_t effect4;
|
||||||
}
|
}
|
||||||
SimHapticData;
|
SimHapticData;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,14 @@ Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
|
||||||
//Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
|
//Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
|
||||||
|
|
||||||
SimHapticData sd;
|
SimHapticData sd;
|
||||||
int effect = 0;
|
int motor1 = 0;
|
||||||
int motor = 15;
|
int motor2 = 0;
|
||||||
|
int motor3 = 0;
|
||||||
|
int motor4 = 0;
|
||||||
|
int effect1 = 0;
|
||||||
|
int effect2 = 0;
|
||||||
|
int effect3 = 0;
|
||||||
|
int effect4 = 0;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
|
@ -21,8 +27,10 @@ void setup() {
|
||||||
Serial.println("Could not find Motor Shield. Check wiring.");
|
Serial.println("Could not find Motor Shield. Check wiring.");
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
sd.effect = 0;
|
sd.motor1 = 0;
|
||||||
sd.motor = 15;
|
sd.motor2 = 0;
|
||||||
|
sd.motor3 = 0;
|
||||||
|
sd.motor4 = 0;
|
||||||
|
|
||||||
myMotor1->setSpeed(0);
|
myMotor1->setSpeed(0);
|
||||||
myMotor1->run(FORWARD);
|
myMotor1->run(FORWARD);
|
||||||
|
|
@ -44,24 +52,36 @@ void loop() {
|
||||||
{
|
{
|
||||||
Serial.readBytes(buff, BYTE_SIZE);
|
Serial.readBytes(buff, BYTE_SIZE);
|
||||||
memcpy(&sd, &buff, BYTE_SIZE);
|
memcpy(&sd, &buff, BYTE_SIZE);
|
||||||
effect = sd.effect;
|
motor1 = sd.motor1;
|
||||||
motor = sd.motor;
|
motor2 = sd.motor2;
|
||||||
|
motor3 = sd.motor3;
|
||||||
|
motor4 = sd.motor4;
|
||||||
|
effect1 = sd.effect1;
|
||||||
|
effect2 = sd.effect2;
|
||||||
|
effect3 = sd.effect3;
|
||||||
|
effect4 = sd.effect4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (motor == 0 || motor == 4 || motor == 7 || motor == 8 || motor == 10 || motor == 11 || motor == 13 || motor == 14)
|
//if (motor == 0 || motor == 4 || motor == 7 || motor == 8 || motor == 10 || motor == 11 || motor == 13 || motor == 14)
|
||||||
|
//{
|
||||||
|
if (motor1 >= 1)
|
||||||
{
|
{
|
||||||
myMotor1->setSpeed(effect);
|
myMotor1->setSpeed(effect1);
|
||||||
}
|
}
|
||||||
|
//}
|
||||||
//if (motor == 1 || motor == 5 || motor == 7 || motor == 9 || motor == 10 || motor == 11 || motor == 12 || motor == 13)
|
//if (motor == 1 || motor == 5 || motor == 7 || motor == 9 || motor == 10 || motor == 11 || motor == 12 || motor == 13)
|
||||||
//{
|
//{
|
||||||
// myMotor2->setSpeed(v*POWER);
|
// myMotor2->setSpeed(motor2);
|
||||||
//}
|
//}
|
||||||
if (motor == 2 || motor == 6 || motor == 8 || motor == 9 || motor == 10 || motor == 11 || motor == 12 || motor == 14)
|
//if (motor == 2 || motor == 6 || motor == 8 || motor == 9 || motor == 10 || motor == 11 || motor == 12 || motor == 14)
|
||||||
|
//{
|
||||||
|
if (motor3 >= 1)
|
||||||
{
|
{
|
||||||
myMotor3->setSpeed(effect);
|
myMotor3->setSpeed(effect3);
|
||||||
}
|
}
|
||||||
|
//}
|
||||||
//if (motor == 3 || motor == 4 || motor == 5 || motor == 6 || motor == 10 || motor == 12 || motor == 13 || motor == 14)
|
//if (motor == 3 || motor == 4 || motor == 5 || motor == 6 || motor == 10 || motor == 12 || motor == 13 || motor == 14)
|
||||||
//{
|
//{
|
||||||
// myMotor4->setSpeed(v*POWER);
|
// myMotor4->setSpeed(motor4);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,15 +65,28 @@ int arduino_simhaptic_update(SimDevice* this, SimData* simdata)
|
||||||
|
|
||||||
double play = slipeffect(simdata, this->hapticeffect.effecttype, this->hapticeffect.tyre, this->hapticeffect.threshold, this->hapticeffect.useconfig, this->hapticeffect.configcheck, this->hapticeffect.tyrediameterconfig);
|
double play = slipeffect(simdata, this->hapticeffect.effecttype, this->hapticeffect.tyre, this->hapticeffect.threshold, this->hapticeffect.useconfig, this->hapticeffect.configcheck, this->hapticeffect.tyrediameterconfig);
|
||||||
|
|
||||||
|
double rplay = play;
|
||||||
if(play > 1.0)
|
if(play > 1.0)
|
||||||
{
|
{
|
||||||
play = 1.0;
|
play = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int effectspeed = ceil( 255 * play );
|
int effectspeed = ceil( 255 * play );
|
||||||
serialdevice->u.simhapticdata.motor = serialdevice->motorsposition;
|
|
||||||
serialdevice->u.simhapticdata.effect = effectspeed;
|
int motor = serialdevice->motorsposition;
|
||||||
slogt("Updating arduino haptic device speed %i motor code %i", serialdevice->u.simhapticdata.effect, serialdevice->u.simhapticdata.motor);
|
|
||||||
|
if (motor == 0 || motor == 4 || motor == 7 || motor == 8 || motor == 10 || motor == 11 || motor == 13 || motor == 14)
|
||||||
|
{
|
||||||
|
serialdevice->u.simhapticdata.effect1 = effectspeed;
|
||||||
|
serialdevice->u.simhapticdata.motor1 = 1;
|
||||||
|
slogt("Updating arduino haptic device speed motor speed %i on motor %i from original effect %f", serialdevice->u.simhapticdata.effect1, serialdevice->motorsposition, rplay);
|
||||||
|
}
|
||||||
|
if (motor == 2 || motor == 6 || motor == 8 || motor == 9 || motor == 10 || motor == 11 || motor == 12 || motor == 14)
|
||||||
|
{
|
||||||
|
serialdevice->u.simhapticdata.effect3 = effectspeed;
|
||||||
|
serialdevice->u.simhapticdata.motor3 = 1;
|
||||||
|
slogt("Updating arduino haptic device speed motor speed %i on motor %i from original effect %f", serialdevice->u.simhapticdata.effect3, serialdevice->motorsposition, rplay);
|
||||||
|
}
|
||||||
|
|
||||||
size_t size = sizeof(SimHapticData);
|
size_t size = sizeof(SimHapticData);
|
||||||
|
|
||||||
arduino_update(serialdevice, &serialdevice->u.simhapticdata, size);
|
arduino_update(serialdevice, &serialdevice->u.simhapticdata, size);
|
||||||
|
|
@ -135,6 +148,14 @@ SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) {
|
||||||
case (SIMDEVTYPE_SERIALHAPTIC):
|
case (SIMDEVTYPE_SERIALHAPTIC):
|
||||||
this->devicetype = ARDUINODEV__HAPTIC;
|
this->devicetype = ARDUINODEV__HAPTIC;
|
||||||
this->m.vtable = &arduino_simhaptic_vtable;
|
this->m.vtable = &arduino_simhaptic_vtable;
|
||||||
|
this->u.simhapticdata.motor1 = 0;
|
||||||
|
this->u.simhapticdata.motor2 = 0;
|
||||||
|
this->u.simhapticdata.motor3 = 0;
|
||||||
|
this->u.simhapticdata.motor4 = 0;
|
||||||
|
this->u.simhapticdata.effect1 = 0;
|
||||||
|
this->u.simhapticdata.effect2 = 0;
|
||||||
|
this->u.simhapticdata.effect3 = 0;
|
||||||
|
this->u.simhapticdata.effect4 = 0;
|
||||||
slogi("Initializing arduino device for haptic effects.");
|
slogi("Initializing arduino device for haptic effects.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -339,10 +339,7 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
simdata->tyrediameter[1] = -1;
|
simdata->tyrediameter[1] = -1;
|
||||||
simdata->tyrediameter[2] = -1;
|
simdata->tyrediameter[2] = -1;
|
||||||
simdata->tyrediameter[3] = -1;
|
simdata->tyrediameter[3] = -1;
|
||||||
simdata->tyrediameter[0] = 0.638636385206394;
|
|
||||||
simdata->tyrediameter[1] = 0.633384434597093;
|
|
||||||
simdata->tyrediameter[2] = 0.710475735564615;
|
|
||||||
simdata->tyrediameter[3] = 0.710475735564615;
|
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Setting rpms to 1000\n");
|
fprintf(stdout, "Setting rpms to 1000\n");
|
||||||
|
|
@ -367,22 +364,6 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
}
|
}
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Testing wheel spin\n");
|
|
||||||
simdata->velocity = 20;
|
|
||||||
simdata->tyreRPS[0] = 133;
|
|
||||||
simdata->tyreRPS[1] = 133;
|
|
||||||
simdata->tyreRPS[2] = 133;
|
|
||||||
simdata->tyreRPS[3] = 133;
|
|
||||||
simdata->velocity = 100;
|
|
||||||
for (int x = 0; x < numdevices; x++)
|
|
||||||
{
|
|
||||||
if (devices[x].initialized == true)
|
|
||||||
{
|
|
||||||
devices[x].update(&devices[x], simdata);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sleep(3);
|
|
||||||
|
|
||||||
fprintf(stdout, "Setting speed to 100\n");
|
fprintf(stdout, "Setting speed to 100\n");
|
||||||
simdata->velocity = 100;
|
simdata->velocity = 100;
|
||||||
for (int x = 0; x < numdevices; x++)
|
for (int x = 0; x < numdevices; x++)
|
||||||
|
|
@ -394,22 +375,48 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
}
|
}
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
//fprintf(stdout, "Testing wheel spin\n");
|
fprintf(stdout, "testing wheel spin\n");
|
||||||
//simdata->tyreRPS[0] = 8000;
|
simdata->tyrediameter[0] = 0.638636385206394;
|
||||||
//simdata->tyreRPS[1] = 8000;
|
simdata->tyrediameter[1] = 0.633384434597093;
|
||||||
//simdata->tyreRPS[2] = 8000;
|
simdata->tyrediameter[2] = 0.710475735564615;
|
||||||
//simdata->tyreRPS[3] = 8000;
|
simdata->tyrediameter[3] = 0.710475735564615;
|
||||||
//simdata->velocity = 100;
|
simdata->tyreRPS[0] = 103;
|
||||||
//for (int x = 0; x < numdevices; x++)
|
simdata->tyreRPS[1] = 103;
|
||||||
//{
|
simdata->tyreRPS[2] = 103;
|
||||||
// if (devices[x].initialized == true)
|
simdata->tyreRPS[3] = 103;
|
||||||
// {
|
for (int x = 0; x < numdevices; x++)
|
||||||
// devices[x].update(&devices[x], simdata);
|
{
|
||||||
// }
|
if (devices[x].initialized == true)
|
||||||
//}
|
{
|
||||||
//sleep(3);
|
devices[x].update(&devices[x], simdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sleep(3);
|
||||||
|
|
||||||
|
fprintf(stdout, "Testing wheel Lock\n");
|
||||||
|
simdata->tyreRPS[0] = 50;
|
||||||
|
simdata->tyreRPS[1] = 50;
|
||||||
|
simdata->tyreRPS[2] = 50;
|
||||||
|
simdata->tyreRPS[3] = 50;
|
||||||
|
simdata->velocity = 100;
|
||||||
|
for (int x = 0; x < numdevices; x++)
|
||||||
|
{
|
||||||
|
if (devices[x].initialized == true)
|
||||||
|
{
|
||||||
|
devices[x].update(&devices[x], simdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Shifting into second gear\n");
|
fprintf(stdout, "Shifting into second gear\n");
|
||||||
|
simdata->tyreRPS[0] = 0;
|
||||||
|
simdata->tyreRPS[1] = 0;
|
||||||
|
simdata->tyreRPS[2] = 0;
|
||||||
|
simdata->tyreRPS[3] = 0;
|
||||||
|
simdata->tyrediameter[0] = -1;
|
||||||
|
simdata->tyrediameter[1] = -1;
|
||||||
|
simdata->tyrediameter[2] = -1;
|
||||||
|
simdata->tyrediameter[3] = -1;
|
||||||
simdata->gear = 3;
|
simdata->gear = 3;
|
||||||
for (int x = 0; x < numdevices; x++)
|
for (int x = 0; x < numdevices; x++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue