Показать сообщение отдельно
Старый 21.03.2017, 11:40   #177
BNSF9399
Местный
 
Аватар для BNSF9399
 
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (2791)
По умолчанию

Цитата:
Сообщение от Tolyan Посмотреть сообщение
А то по умолчанию все локи в обратную сторону в отличие от роковской КС
Ну если я правильно понял немецкий
Цитата:
27.02.2016 Änderung Dekodierung DCC14 und DCC28
Invertierung Fahrtrichtung DCC Decoder DIRF
то так и должно быть.

Цитата:
Сообщение от Tolyan Посмотреть сообщение
как прграммно сделать реверс?
надо "ковырять" библиотеку Z21.cpp
Как я понял, гдето тут
Код:
		  case LAN_X_SET_LOCO:
			if (packet[5] == LAN_X_SET_LOCO_FUNCTION) {  //DB0
			  //LAN_X_SET_LOCO_FUNCTION  Adr_MSB        Adr_LSB            Type (EIN/AUS/UM)      Funktion
			  if (notifyz21LocoFkt)
				notifyz21LocoFkt(word(packet[6] & 0x3F, packet[7]), packet[8] >> 5, packet[8] & B00011111); 
			  //uint16_t Adr, uint8_t type, uint8_t fkt
			}
			else {  //DB0
				  //Debug.print("X_SET_LOCO_DRIVE ");
				  byte steps = 14;
				  if ((packet[5] & 0x03) == 3)
					steps = 128;
				  else if ((packet[5] & 0x03) == 2)
					steps = 28;
				if (notifyz21LocoSpeed)
					notifyz21LocoSpeed(word(packet[6] & 0x3F, packet[7]), packet[8],steps);
			}
			break;
Если точнее, то в седьмом бите пятого пакета задается направление
Ну и класс, который это все обрабатывает
Код:
void z21Class::setLocoStateFull (int Adr, byte steps, byte speed, byte F0, byte F1, byte F2, byte F3, bool bc) 
{
	byte data[9]; 
	data[0] = LAN_X_LOCO_INFO;  //0xEF X-HEADER
	data[1] = (Adr >> 8) & 0x3F;
	data[2] = Adr & 0xFF;
	data[3] = steps & B111;		//steps
	if (data[3] == 3)  //nicht vorhanden!
		data[3] = 4;
	data[4] = speed;	//DSSS SSSS
	data[5] = F0;    //F0, F4, F3, F2, F1
	data[6] = F1;    //F5 - F12; Funktion F5 ist bit0 (LSB)
	data[7] = F2;  //F13-F20
	data[8] = F3;  //F21-F28
	if (bc)  //BC?
		EthSend(0, 14, LAN_X_Header, data, true, Z21bcAll_s | Z21bcNetAll_s);  //Send Power und Funktions to all active Apps 
	else EthSend (0, 14, LAN_X_Header, data, true, Z21bcNone);  //Send Power und Funktions to all active Apps
}
можно попробовать тут в data[4] инвертировать седьмой бит.
BNSF9399 вне форума  
Вверх
3 пользователя(ей) сказали cпасибо: