138 lines
4.4 KiB
Arduino
138 lines
4.4 KiB
Arduino
|
|
// 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);
|
||
|
|
}
|