From 7a4fcd228d86d038797835eba4af6037b59ca10b Mon Sep 17 00:00:00 2001 From: Asbelos Date: Sat, 15 Aug 2020 14:10:56 +0100 Subject: [PATCH] gradually improving config --- CVReader.ino | 4 +--- Config.h | 34 ++++++++++++++-------------------- DCCWaveform.cpp | 4 ++-- 3 files changed, 17 insertions(+), 25 deletions(-) diff --git a/CVReader.ino b/CVReader.ino index ab3c458..9925386 100644 --- a/CVReader.ino +++ b/CVReader.ino @@ -82,9 +82,7 @@ void setup() { // Standard supported devices have pre-configured macros but custome hardware installations require // detailed pin mappings and may also require modified subclasses of the MotorDriver to implement specialist logic. - DCC::begin(new MotorDriver(MAIN_POWER_PIN,MAIN_SIGNAL_PIN,MAIN_SIGNAL_PIN_ALT,MAIN_BRAKE_PIN,MAIN_SENSE_PIN,MAIN_SENSE_FACTOR, MAIN_MAX_MILLIAMPS,MAIN_FAULT_PIN), - new MotorDriver(PROG_POWER_PIN,PROG_SIGNAL_PIN,PROG_SIGNAL_PIN_ALT,PROG_BRAKE_PIN,PROG_SENSE_PIN,PROG_SENSE_FACTOR, PROG_MAX_MILLIAMPS,PROG_FAULT_PIN)); - + DCC::begin(STANDARD_MOTOR_SHIELD); // Responsibility 3: Optionally Start the WiFi interface if required. // NOTE: On a Uno you will have to provide a SoftwareSerial diff --git a/Config.h b/Config.h index 1a495bc..20705c4 100644 --- a/Config.h +++ b/Config.h @@ -1,34 +1,28 @@ #ifndef Config_h #define Config_h +// *** PLEASE NOTE *** THIS FILE IS **NOT** INTENDED TO BE EDITED WHEN CONFIGURING A SYSTEM. +// It will be overwritten if the library is updated. + +// This file contains configurations for known/supported motor shields. +// A configuration defined by macro here can be used in your sketch. +// A custom hardware setup will require your sketch to create MotorDriver instances +// similar to those defined here, WITHOUT editing this file. + // Define these if you have a WiFi board on Serial1 #define WIFI #define WIFI_CONNECT_TO_SSID "RPi-JMRI" #define WIFI_CONNECT_PASSWORD "rpI-jmri" -// This hardware configuration would normally be setup using a bunch of #ifdefs. - const byte UNUSED_PIN = 255; -const byte MAIN_POWER_PIN = 3; -const byte MAIN_SIGNAL_PIN = 12; -const byte MAIN_SIGNAL_PIN_ALT = UNUSED_PIN; // for hardware that flipflops signal pins -const byte MAIN_SENSE_PIN = A0; -const byte MAIN_BRAKE_PIN = 9; -const byte MAIN_FAULT_PIN = UNUSED_PIN; +// MotorDriver(byte power_pin, byte signal_pin, byte signal_pin2, byte brake_pin, byte current_pin, float senseFactor, unsigned int tripMilliamps, byte faultPin); + +// Arduino standard Motor Shield +#define STANDARD_MOTOR_SHIELD \ + new MotorDriver(3 , 12, UNUSED_PIN, 9, A0, 2.99, 2000, UNUSED_PIN), \ + new MotorDriver(11, 13, UNUSED_PIN, 8, A1, 2.99, 250 , UNUSED_PIN) -const int MAIN_MAX_MILLIAMPS=2000; -const float MAIN_SENSE_FACTOR=2.99; // analgRead(MAIN_SENSE_PIN) * MAIN_SENSE_FACTOR = milliamps - -const byte PROG_POWER_PIN = 11; -const byte PROG_SIGNAL_PIN = 13; -const byte PROG_SIGNAL_PIN_ALT = UNUSED_PIN; // for hardware that flipflops signal pins -const byte PROG_SENSE_PIN = A1; -const byte PROG_BRAKE_PIN = 8; -const byte PROG_FAULT_PIN = UNUSED_PIN; - -const int PROG_MAX_MILLIAMPS=250; -const float PROG_SENSE_FACTOR=2.99; // analgRead(PROG_SENSE_PIN) * PROG_SENSE_FACTOR = milliamps // Allocations with memory implications..! // Base system takes approx 900 bytes + 8 per loco. Turnouts, Sensors etc are dynamically created diff --git a/DCCWaveform.cpp b/DCCWaveform.cpp index 890d33c..03bb776 100644 --- a/DCCWaveform.cpp +++ b/DCCWaveform.cpp @@ -26,7 +26,7 @@ DCCWaveform DCCWaveform::mainTrack(PREAMBLE_BITS_MAIN, true); DCCWaveform DCCWaveform::progTrack(PREAMBLE_BITS_PROG, false); -const int ACK_MIN_PULSE_RAW=65 / PROG_SENSE_FACTOR; +//const int ACK_MIN_PULSE_RAW=65 / PROG_SENSE_FACTOR; bool DCCWaveform::progTrackSyncMain=false; @@ -265,7 +265,7 @@ int DCCWaveform::getLastCurrent() { void DCCWaveform::setAckBaseline(bool debug) { if (isMainTrack) return; - ackThreshold=motorDriver->getCurrentRaw() + ACK_MIN_PULSE_RAW; + ackThreshold=motorDriver->getCurrentRaw() + (int)(65 / motorDriver->senseFactor); if (debug) DIAG(F("\nACK-BASELINE %d/%dmA"),ackThreshold,motorDriver->convertToMilliamps(ackThreshold)); }