2146
Vos projets / Re : Decodeur wagon ou fausse motrice ou tender pour feux rouge/blanc de Rudy
« le: mai 31, 2017, 03:23:20 pm »
Merci Marc-Henri pour cet éclairage, mais dans le sketch que j'ai mis en pièce jointe les instructions sont les suivantes :
if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
Address = dccPacket[0];
instrByte1 = dccPacket[1];
}
else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
instrByte1 = dccPacket[2];
}
if (Address==decoderAddress) {
byte instructionType = instrByte1>>5;
switch (instructionType) {
case 2: // Reverse speed
forw_rev=0;
break;
Si instrByte1 contenait bien le (byte) paquet DCC avec la direction, celle-ci est codée sur le 3e bit en partant de la gauche. Les deux premiers étant 0 et 1 (soit commençant par 01D, D pour direction). Le décalage de 5 positions va donner 0000001D, ce qui donne 2 ou 3 pour la direction. Le problème est donc en amont, dans le contenu de instrByte1. Dominique maitrise manifestement la question des adresses courtes et longues qui est peut-être à l'origine du souci.
J'aurais du aussi préciser que les commandes sont envoyées par la manette DIY "Throttle" décrite par ailleurs dans ce forum (via une BaseStation DCCpp-VV), mais comme les commandes F0 à F4 sont bien interprétées par le décodeur et les locomotives et que la direction est OK pour les locomotives, je n'ai pas encore cherché plus loin.
if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
Address = dccPacket[0];
instrByte1 = dccPacket[1];
}
else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
instrByte1 = dccPacket[2];
}
if (Address==decoderAddress) {
byte instructionType = instrByte1>>5;
switch (instructionType) {
case 2: // Reverse speed
forw_rev=0;
break;
Si instrByte1 contenait bien le (byte) paquet DCC avec la direction, celle-ci est codée sur le 3e bit en partant de la gauche. Les deux premiers étant 0 et 1 (soit commençant par 01D, D pour direction). Le décalage de 5 positions va donner 0000001D, ce qui donne 2 ou 3 pour la direction. Le problème est donc en amont, dans le contenu de instrByte1. Dominique maitrise manifestement la question des adresses courtes et longues qui est peut-être à l'origine du souci.
J'aurais du aussi préciser que les commandes sont envoyées par la manette DIY "Throttle" décrite par ailleurs dans ce forum (via une BaseStation DCCpp-VV), mais comme les commandes F0 à F4 sont bien interprétées par le décodeur et les locomotives et que la direction est OK pour les locomotives, je n'ai pas encore cherché plus loin.