Parlons Arduino > Bibliothèques

DccToolkit / SystemToolkit

<< < (2/9) > >>

AmadeusHF:
Non, une erreur de ma part : sur un UNO, le timer 1  n'implémente pas le COMPARE "C", seulement compare A et B.
Je vais corriger ça. ;)

AmadeusHF:
Je vous met en pièce jointe deux nouvelles release améliorées des bibliothèques, qui integrent pas mal de correctifs et de nouvelles fonctions. Il y a notamment un premier morceau d'implémentation du protocole de commande DCC++ ce qui permet, en assemblant les classes comme il faut, d'utiliser DecoderPro pour dialoguer avec l'équipement.

Voici les deux sketchs utiles mis à jour :

Test de lecture des CV

--- Code: ---#include <SignalGenerator.h>
#include <TrackDriver.h>

#include <ACS712CurrentSensor.h>
#include <Max471CurrentSensor.h>

// Create a current sensor reading on A0 with VCC = 5.0 volts
//ACS712CurrentSensor currentSensor(A0, 5000);
Max471CurrentSensor currentSensor(A0, 5000);

// Create a signal generator using timer 1, allowed to issue service command
SignalGenerator generator(1,12, true);

// Create a track driver using previous generator & current sensor
TrackDriver driver(11,&generator, &currentSensor);

void readCV(byte cv)
{
  Serial.print("CV ");
  Serial.print(cv);
  Serial.print(" = ");

  byte value;
  if (driver.readCV(cv, &value))
  {
    Serial.println(value);
  }
  else
  {
    Serial.print(value);
    Serial.println(" : Failed to read !");
  }
}

void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing !");

  // Start all the stuff : DCC signal is there and running starting from here
  driver.start();
  driver.powerOn();

  Serial.println("Initialization done !");
}

int x = 1;
bool up = true;

void loop()
{
  delay(500);

  if (up)
    readCV(x++);
  else
    readCV(x--);

  if (x <= 1)
    up = true;
  if (x >= 140)
    up = false;
}

--- Fin du code ---

Sketch de test avec DecoderPRO en USB

NOTE 1 : les fonctions sont partiellement implémentées. Ne pas faire d'écriture de CV pour le moment pour ne pas perturber vos décodeurs, "au cas ou" : je n'ai pas encore assez testé cette partie.

NOTE 2 : Le code pour la partie ethernet n'est pas encore au point...mais je bosse dessus...donc ne l'activez pas (compilation conditionnée par les defines DCC_ETHERNET_xxx)


--- Code: ---// Do not remove the include below

#include "DuinoBaseStation.h"

#include "SystemToolkit.h"
#include "DccToolkit.h"

// Create a current sensor reading on A0 with VCC = 5.0 volts
//ACS712CurrentSensor currentSensor(A0, 5000);
Max471CurrentSensor currentSensor(A0, 5000);

// Create a signal generator using timer 1, pin 12 which is OUTPUT COMPARE B
// for timer 1 on MEGA for example
SignalGenerator generator(1, 12, true);

// Create a track driver using previous generator & current sensor, also using
// pin 11 to switch track power ON/OFF
TrackDriver driver(11, &generator, &currentSensor);

// Create a command stream using USB serial port
SerialPortCommandStream usbStream;

// Create a command parser using the stream and our single track driver
CommandParser usbParser(&usbStream, &driver, NULL);

#if defined(DCC_ETHERNET_WIZNET_5100_ENABLED) || defined(DCC_ETHERNET_WIZNET_5200_ENABLED) || defined(DCC_ETHERNET_WIZNET_5500_ENABLED)
// Create a command stream using ETHERNET port
SocketCommandStream ipStream;

// Create a command parser using the stream and our single track driver
CommandParser ipParser(&ipStream, &driver, NULL);
#endif

void setup()
{
driver.start();
usbParser.start();
#if defined(DCC_ETHERNET_WIZNET_5100_ENABLED) || defined(DCC_ETHERNET_WIZNET_5200_ENABLED) || defined(DCC_ETHERNET_WIZNET_5500_ENABLED)
ipParser.start();
#endif
}

void loop()
{
usbParser.run();
#if defined(DCC_ETHERNET_WIZNET_5100_ENABLED) || defined(DCC_ETHERNET_WIZNET_5200_ENABLED) || defined(DCC_ETHERNET_WIZNET_5500_ENABLED)
ipParser.run();
#endif
}

--- Fin du code ---

AmadeusHF:
Allez, une dernière pour la matinée : les  écritures de CV sont validées ainsi que les commandes de fonctions.

AmadeusHF:
Bonjour à tous,

Nouvelle version des bibliothèques intégrant de multiples corrections et ajustements.

Vous pouvez récupérer les libs ET le code de test dans le premier message de ce sujet, en pièce jointe.
Il se trouve ICI !

Merci à ceux qui font quelques tests !

Précision : si vous obtenez une lecture partielle de vos CVs, vous pouvez essayer d'ajuster le seuil de sensibilité de l'ack de la façon suivante :


--- Code: ---drivers.setAckThresholdCurrent(40);

--- Fin du code ---

Cette ligne de code, à mettre apres le driver.start() dans le SETUP, permet de fixer le seuil bas du niveau de courant , en milli-amperes.

Dans les versions précédentes, le seuil était forcé à  60 mA, probablement trop élevé pour des moteurs de petite taille (sur du N par exemple ?).

La valeur par défaut actuelle est de 40 mA.

Bons tests !

msport:
Bonsoir,

résultat variable pour moi (même configuration : LMD18200 + MAX471- testé-, 5V sur PWM)
"sketch qui fait le job" + bibliothèques du 1er message (pas compatible avec le git)

sketch avec Max471CurrentSensor : premier essai pas mal

--- Code: ---Initializing !
Initialization done !
CV 1 = 0 : Failed to read ! mais repositionnement loco partie toute seule.
CV 2 = 2 : OK
CV 3 = 4 : OK
CV 4 = 4 : OK
CV 5 = 10 : OK
CV 6 = 1 : OK
CV 7 = 1 : OK
CV 8 = 99 : OK
CV 9 = 255 : OK
CV 10 = 255 : OK
CV 11 = 255 : OK
CV 12 = 255 : OK
CV 13 = 255 : OK

--- Fin du code ---
mais le coup d'après :

--- Code: ---Initializing !
Initialization done !
CV 1 = 255 : OK
CV 2 = 243 : OK
CV 3 = 147 : OK
CV 4 = 80 : OK
CV 5 = 64 : Failed to read !
CV 6 = 58 : OK
CV 7 = 16 : OK
CV 8 = 32 : Failed to read !
CV 9 = 0 : Failed to read !
CV 10 = 0 : Failed to read !
CV 11 = 0 : Failed to read !
CV 12 = 0 : Failed to read !

--- Fin du code ---
Les retours sont donc aléatoires ...Auraient du être :

--- Code: ---1 8
2 2
3 4
4 4
5 10
6 1
7 1
8 99
9 255
10 255
11 255
12 255
13 255

--- Fin du code ---
Moteur HO mais calibre N, décodeur LENZ d'usine


Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique