Version initiale

This commit is contained in:
=
2021-01-25 15:48:10 +01:00
parent 169e076fe5
commit 4d4247bda9
16 changed files with 2864 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+70
View File
@@ -0,0 +1,70 @@
// D:\Documents\Simulator project\SimulatorDescriptor.h
char ReportDescriptor[125] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x03, // REPORT_ID (3)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x08, // REPORT_COUNT (8)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x04, // REPORT_ID (4)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x33, // USAGE (Rx)
0x09, 0x34, // USAGE (Ry)
0x09, 0x35, // USAGE (Rz)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x05, // REPORT_ID (5)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x0b, // USAGE_MAXIMUM (Button 11)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x0b, // REPORT_COUNT (11)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0xc8, // USAGE (Steering)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x05, 0x01 // USAGE_PAGE (Generic Desktop)
};
Binary file not shown.
+137
View File
@@ -0,0 +1,137 @@
// ZenDrive Simulator firmware
// Copyright (c) 2021 - Valentin Boulanger
// Version : 1.0.0
//--------------------------------------------------------------------
#include "ZenDrive.h"
// Pins declaration
const int SPEEDS_PIN = A0;
const int HANDBRAKE_PIN = A5;
const int CLUTCH_PIN = A2;
const int BRAKE_PIN = A3;
const int ACCELERATOR_PIN = A4;
const int DIRECTION_PIN = A1;
const int LEFT_BLINKER_PIN = 2;
const int RIGHT_BLINKER_PIN = 3;
const int WARNING_PIN = 4;
const int CRUISE_PIN = 5;
const int CRUISE_UP_PIN = 6;
const int CRUISE_DOWN_PIN = 7;
const int STARTER_PIN = 8;
const int HORN_PIN = 9;
const int LIGHTS_ON_PIN = 10;
const int ROAD_LIGHTS_PIN = 11;
const int HEAD_LIGHTS_PIN = 12;
const int FOG_LIGHTS_PIN = 13;
void setup() {
// Initialize sensors
pinMode(SPEEDS_PIN, INPUT_PULLUP);
pinMode(HANDBRAKE_PIN, INPUT_PULLUP);
pinMode(CLUTCH_PIN, INPUT_PULLUP);
pinMode(BRAKE_PIN, INPUT_PULLUP);
pinMode(ACCELERATOR_PIN, INPUT_PULLUP);
pinMode(DIRECTION_PIN, INPUT_PULLUP);
pinMode(LEFT_BLINKER_PIN, INPUT_PULLUP);
pinMode(RIGHT_BLINKER_PIN, INPUT_PULLUP);
pinMode(WARNING_PIN, INPUT_PULLUP);
pinMode(CRUISE_PIN, INPUT_PULLUP);
pinMode(CRUISE_UP_PIN, INPUT_PULLUP);
pinMode(CRUISE_DOWN_PIN, INPUT_PULLUP);
pinMode(STARTER_PIN, INPUT_PULLUP);
pinMode(HORN_PIN, INPUT_PULLUP);
pinMode(LIGHTS_ON_PIN, INPUT_PULLUP);
pinMode(ROAD_LIGHTS_PIN, INPUT_PULLUP);
pinMode(HEAD_LIGHTS_PIN, INPUT_PULLUP);
pinMode(FOG_LIGHTS_PIN, INPUT_PULLUP);
// Initialize ZenDrive Library
ZenDrive.begin(true);
//Button shared margin
int btnMargin = 5;
}
void loop() {
// Set refresh to false
ZenDrive.gearshiftNeedRefresh = false;
ZenDrive.pedalsNeedRefresh = false;
ZenDrive.wheelNeedRefresh = false;
/* Gearshift module */
//Read speed states on the analog shared pin
int value = analogRead(A0);
if(value > 900) ZenDrive.switchSpeedR();
else if(value > 800) ZenDrive.switchSpeed6();
else if(value > 700) ZenDrive.switchSpeed5();
else if(value > 600) ZenDrive.switchSpeed4();
else if(value > 500) ZenDrive.switchSpeed3();
else if(value > 400) ZenDrive.switchSpeed2();
else if(value > 300) ZenDrive.switchSpeed1();
else ZenDrive.switchNeutral();
//Read handbrake
ZenDrive.setHandbrake(map(analogRead(HANDBRAKE_PIN), 0, 1023, 0, 255));
// Send gearshift states if there are changes
if(ZenDrive.gearshiftNeedRefresh) ZenDrive.sendGearshiftStates();
/* Pedals module */
// Read clutch
ZenDrive.setClutch(map(analogRead(CLUTCH_PIN), 0, 1023, 0, 255));
// Read brake
ZenDrive.setBrake(map(analogRead(BRAKE_PIN), 0, 1023, 0, 255));
// Read accelerator
ZenDrive.setAccelerator(map(analogRead(ACCELERATOR_PIN), 0, 1023, 0, 255));
// Send pedals states if they are changes
if(ZenDrive.pedalsNeedRefresh) ZenDrive.sendPedalsStates();
/* Steering wheel module */
// Left blinker
ZenDrive.setBlinkerLeft(digitalRead(LEFT_BLINKER_PIN));
// Right blinker
ZenDrive.setBlinkerRight(digitalRead(RIGHT_BLINKER_PIN));
// Warning
ZenDrive.setWarning(digitalRead(WARNING_PIN));
// Lights
if (digitalRead(LIGHTS_ON_PIN)) ZenDrive.switchLightsOn();
else if(digitalRead(ROAD_LIGHTS_PIN)) ZenDrive.switchRoadLights();
else ZenDrive.switchLightsOff();
// Head lights
ZenDrive.setHeadLights(digitalRead(HEAD_LIGHTS_PIN));
// Fog lights
ZenDrive.setFogLights(digitalRead(FOG_LIGHTS_PIN));
// Starter
ZenDrive.setStarter(digitalRead(STARTER_PIN));
// Horn
ZenDrive.setHorn(digitalRead(HORN_PIN));
// Cruise on
if(digitalRead(CRUISE_PIN)) ZenDrive.activeCruise();
// Cruise up
if(digitalRead(CRUISE_UP_PIN)) ZenDrive.increaseCruise();
// Cruise down
if(digitalRead(CRUISE_DOWN_PIN)) ZenDrive.decreaseCruise();
// Read direction
ZenDrive.setDirection(map(analogRead(DIRECTION_PIN), 0, 1023, -127, 127));
// Send steering wheel states if they are changes
if(ZenDrive.wheelNeedRefresh) ZenDrive.sendWheelStates();
// Read pin value
/*int clutchValue = map(analogRead(clutchPin), 0, 1023, 0, 255);
if(clutchValue < lastClutchState - 5 || clutchValue > lastClutchState + 5){
//Serial.println(clutchValue);
ZenDrive.setHandbrake(clutchValue);
lastClutchState = clutchValue;
}*/
/*for (int index = 0; index < 4; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}*/
delay(50);
}
+504
View File
@@ -0,0 +1,504 @@
/*
ZenDrive.cpp
Copyright (c) 2021, Valentin Boulanger
This library is a part of the ZenDrive simulator firmware.
Version : 1.0.0
*/
#include "ZenDrive.h"
#if defined(_USING_HID)
#define GEARSHIFT_REPORT_ID 0x03
#define GEARSHIFT_STATE_SIZE 2
#define PEDALS_REPORT_ID 0x04
#define PEDALS_STATE_SIZE 3
#define WHEEL_REPORT_ID 0x05
#define WHEEL_STATE_SIZE 3
static const uint8_t _hidReportDescriptor[] PROGMEM = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, GEARSHIFT_REPORT_ID, // REPORT_ID (3)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x08, // REPORT_COUNT (8)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, PEDALS_REPORT_ID, // REPORT_ID (4)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x33, // USAGE (Rx)
0x09, 0x34, // USAGE (Ry)
0x09, 0x35, // USAGE (Rz)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, WHEEL_REPORT_ID, // REPORT_ID (5)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x0b, // USAGE_MAXIMUM (Button 11)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x0b, // REPORT_COUNT (11)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0xc8, // USAGE (Steering)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION
};
ZenDrive_::ZenDrive_()
{
// Setup HID report structure
static HIDSubDescriptor node(_hidReportDescriptor, sizeof(_hidReportDescriptor));
HID().AppendDescriptor(&node);
// Initalize state for each module
// Gearshift module
speeds = B00000001; // (NEUTRAL;SPEED1;SPEED2;SPEED3;SPEED4;SPEED5;SPEED6;SPEEDR)
handbrake = 255;
//Pedals module
clutch = 0;
brake = 0;
accelerator = 0;
//Steering wheel module
wheelCommands = 0; // (BLINKER LEFT;BLINKER RIGHT;WARNING;LIGHTS;HEADLIGHTS;FOGLIGHTS;STARTER;HORN;CRUISE;CRUISE +;CRUISE -;NOT USED;NOT USED;NOT USED;NOT USED;NOT USED)
steering = 0;
}
void ZenDrive_::begin(bool initAutoSendState)
{
// Sending initial states
sendGearshiftStates();
sendPedalsStates();
sendWheelStates();
}
void ZenDrive_::end()
{
}
// Gearshift module
void ZenDrive_::switchNeutral()
{
if(currentSpeed != 0){
bitSet(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 0;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed1()
{
if(currentSpeed != 1){
bitClear(speeds, 0);
bitSet(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 1;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed2()
{
if(currentSpeed != 2)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitSet(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 2;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed3()
{
if(currentSpeed != 3)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitSet(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 3;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed4()
{
if(currentSpeed != 4)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitSet(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 4;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed5()
{
if(currentSpeed != 5)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitSet(speeds, 5);
bitClear(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 5;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeed6()
{
if(currentSpeed != 6)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitSet(speeds, 6);
bitClear(speeds, 7);
currentSpeed = 6;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::switchSpeedR()
{
if(currentSpeed != 7)
{
bitClear(speeds, 0);
bitClear(speeds, 1);
bitClear(speeds, 2);
bitClear(speeds, 3);
bitClear(speeds, 4);
bitClear(speeds, 5);
bitClear(speeds, 6);
bitSet(speeds, 7);
currentSpeed = 7;
gearshiftNeedRefresh = true;
}
}
void ZenDrive_::setHandbrake(int8_t value)
{
if(value < handbrake - 5 || value > handbrake + 5)
{
handbrake = value;
gearshiftNeedRefresh = true;
}
}
// Pedals module
void ZenDrive_::setClutch(int8_t value)
{
if(value < clutch - 5 || value > clutch + 5)
{
clutch = value;
pedalsNeedRefresh = true;
}
}
void ZenDrive_::setBrake(int8_t value)
{
if(value < brake - 5 || value > brake + 5)
{
brake = value;
pedalsNeedRefresh = true;
}
}
void ZenDrive_::setAccelerator(int8_t value)
{
if(value < accelerator - 5 || value > accelerator + 5)
{
accelerator = value;
pedalsNeedRefresh = true;
}
}
// Steering wheel module
void ZenDrive_::setBlinkerLeft(bool value)
{
if(value != isBlinkerLeft)
{
bitSet(wheelCommands, 0);
sendWheelStates();
bitClear(wheelCommands, 0);
sendWheelStates();
isBlinkerLeft = !isBlinkerLeft;
}
}
void ZenDrive_::setBlinkerRight(bool value)
{
if(value != isBlinkerRight)
{
bitSet(wheelCommands, 1);
sendWheelStates();
bitClear(wheelCommands, 1);
sendWheelStates();
isBlinkerRight = !isBlinkerRight;
}
}
void ZenDrive_::setWarning(bool value)
{
if(value != isWarning)
{
bitSet(wheelCommands, 2);
sendWheelStates();
bitClear(wheelCommands, 2);
sendWheelStates();
isWarning = !isWarning;
}
}
void ZenDrive_::switchLightsOn()
{
int steps = 0;
if(isRoadLights) steps = 2;
else if(!isLights) steps = 1;
if(steps != 0){
for(int i = 0; i < steps; i++){
bitSet(wheelCommands, 3);
sendWheelStates();
bitClear(wheelCommands, 3);
sendWheelStates();
isLights = true;
isRoadLights = false;
}
}
}
void ZenDrive_::switchRoadLights()
{
int steps = 0;
if(isLights) steps = 1;
else if(!isRoadLights) steps = 2;
if(steps != 0){
for(int i = 0; i < steps; i++){
bitSet(wheelCommands, 3);
sendWheelStates();
bitClear(wheelCommands, 3);
sendWheelStates();
isLights = false;
isRoadLights = true;
}
}
}
void ZenDrive_::switchLightsOff()
{
int steps = 0;
if(isLights) steps = 2;
else if(isRoadLights) steps = 1;
if(steps != 0){
for(int i = 0; i < steps; i++){
bitSet(wheelCommands, 3);
sendWheelStates();
bitClear(wheelCommands, 3);
sendWheelStates();
isLights = false;
isRoadLights = false;
}
}
}
void ZenDrive_::setHeadLights(bool value)
{
if(value != isHeadLights)
{
bitSet(wheelCommands, 4);
sendWheelStates();
bitClear(wheelCommands, 4);
sendWheelStates();
isHeadLights = !isHeadLights;
}
}
void ZenDrive_::setFogLights(bool value)
{
if(value != isFogLights)
{
bitSet(wheelCommands, 5);
sendWheelStates();
bitClear(wheelCommands, 5);
sendWheelStates();
isFogLights = !isFogLights;
}
}
void ZenDrive_::setStarter(bool value)
{
if(value != isStarter)
{
bitSet(wheelCommands, 6);
sendWheelStates();
bitClear(wheelCommands, 6);
sendWheelStates();
isStarter = !isStarter;
}
}
void ZenDrive_::setHorn(bool value)
{
if(value != isHorn)
{
if(value) bitSet(wheelCommands, 7);
else bitClear(wheelCommands, 7);
wheelNeedRefresh = true;
}
}
void ZenDrive_::activeCruise()
{
bitSet(wheelCommands, 8);
sendWheelStates();
bitClear(wheelCommands, 8);
sendWheelStates();
}
void ZenDrive_::increaseCruise()
{
bitSet(wheelCommands, 9);
sendWheelStates();
bitClear(wheelCommands, 9);
sendWheelStates();
}
void ZenDrive_::decreaseCruise()
{
bitSet(wheelCommands, 10);
sendWheelStates();
bitClear(wheelCommands, 10);
sendWheelStates();
}
void ZenDrive_::setDirection(uint8_t value)
{
if(value < steering - 5 || value > steering + 5)
{
steering = value;
wheelNeedRefresh = true;
}
}
// Send states to the PC
void ZenDrive_::sendGearshiftStates()
{
// Gearshift module
uint8_t dataGearshift[GEARSHIFT_STATE_SIZE];
uint8_t speedTmp = speeds;
dataGearshift[0] = speedTmp & 0xFF;
dataGearshift[1] = handbrake;
HID().SendReport(GEARSHIFT_REPORT_ID, dataGearshift, GEARSHIFT_STATE_SIZE);
}
void ZenDrive_::sendPedalsStates()
{
// Pedals module
uint8_t dataPedals[PEDALS_STATE_SIZE];
dataPedals[0] = clutch;
dataPedals[1] = brake;
dataPedals[2] = accelerator;
HID().SendReport(PEDALS_REPORT_ID, dataPedals, PEDALS_STATE_SIZE);
}
void ZenDrive_::sendWheelStates()
{
// Steering wheel module
uint8_t dataWheel[WHEEL_STATE_SIZE];
uint16_t commandTmp = wheelCommands;
// Split 16 bit button-state into 2 bytes
dataWheel[0] = commandTmp & 0xFF;
commandTmp >>= 8;
dataWheel[1] = commandTmp & 0xFF;
dataWheel[2] = steering;
HID().SendReport(WHEEL_REPORT_ID, dataWheel, WHEEL_STATE_SIZE);
/*data[7] = xAxis + 127;
data[8] = yAxis + 127;
data[9] = zAxis + 127;
data[10] = (xAxisRotation % 360) * 0.708;
data[11] = (yAxisRotation % 360) * 0.708;
data[12] = (zAxisRotation % 360) * 0.708;*/
}
ZenDrive_ ZenDrive;
#endif
+111
View File
@@ -0,0 +1,111 @@
/*
ZenDrive.h
Copyright (c) 2021, Valentin Boulanger
This library is a part of the ZenDrive simulator firmware.
Version : 1.0.0
*/
#ifndef ZENDRIVE_h
#define ZENDRIVE_h
#include "HID.h"
#if ARDUINO < 10606
#error The ZenDrive library requires Arduino IDE 1.6.6 or greater. Please update your IDE.
#endif
#if ARDUINO > 10606
#if !defined(USBCON)
#error The ZenDrive library can only be used with a USB MCU (e.g. Arduino Leonardo, Arduino Micro, etc.).
#endif
#endif
#if !defined(_USING_HID)
#warning "Using legacy HID core (non pluggable)"
#else
//================================================================================
//================================================================================
// ZenDrive Simulator (Gamepad)
class ZenDrive_
{
private:
// Gearshift module
uint8_t speeds; // (NEUTRAL;SPEED1;SPEED2;SPEED3;SPEED4;SPEED5;SPEED6;SPEEDR)
uint8_t handbrake;
//Pedals module
uint8_t clutch;
uint8_t brake;
uint8_t accelerator;
//Steering wheel module
uint16_t wheelCommands; // (BLINKER LEFT;BLINKER RIGHT;WARNING;LIGHTS;HEAD LIGHTS;FOGLIGHTS;STARTER;HORN;CRUISE;CRUISE +;CRUISE -;NOT USED;NOT USED;NOT USED;NOT USED;NOT USED)
int8_t steering;
public:
ZenDrive_();
void begin(bool initAutoSendState = true);
void end();
// Gearshift module
bool gearshiftNeedRefresh = false;
int currentSpeed = 0;
void switchNeutral();
void switchSpeed1();
void switchSpeed2();
void switchSpeed3();
void switchSpeed4();
void switchSpeed5();
void switchSpeed6();
void switchSpeedR();
int currentHandbrake = 0;
void setHandbrake(int8_t value);
// Pedals module
bool pedalsNeedRefresh = false;
void setClutch(int8_t value);
void setBrake(int8_t value);
void setAccelerator(int8_t value);
// Steering wheel module
bool wheelNeedRefresh = false;
bool isBlinkerLeft = false;
void setBlinkerLeft(bool value);
bool isBlinkerRight = false;
void setBlinkerRight(bool value);
bool isWarning = false;
void setWarning(bool value);
bool isLights = false;
bool isRoadLights = false;
void switchLightsOn();
void switchRoadLights();
void switchLightsOff();
bool isHeadLights = false;
void setHeadLights(bool value);
bool isFogLights = false;
void setFogLights(bool value);
bool isStarter = false;
void setStarter(bool value);
bool isHorn = false;
void setHorn(bool value);
void activeCruise();
void increaseCruise();
void decreaseCruise();
void setDirection(uint8_t value);
void sendGearshiftStates();
void sendPedalsStates();
void sendWheelStates();
};
extern ZenDrive_ ZenDrive;
#endif
#endif
+2029
View File
File diff suppressed because one or more lines are too long
+13
View File
@@ -0,0 +1,13 @@
const int SHARED_BUTTONS = A1;
void setup() {
Serial.begin(9600);
pinMode(SHARED_BUTTONS, INPUT_PULLUP);
}
void loop() {
Serial.println(analogRead(SHARED_BUTTONS));
delay(50);
}