16
« dnia: 12 Października 2022, 22:43:25 »
Próbuję w jakikolwiek sposób ugryźć tak hamulec jak i nastawnik, ale od kilku dni kompletnie stoję w miejscu. W żaden sposób nie potrafię przesłać do MaSzyny żądania zwiększenia pozycji nastawnika czy hamulca. Na początek próbuję zrobić chociaż zwiększanie pozycji przyciskiem - emulację klawiszy num+ i num- na Arduino. Do pliku eu07_input-uart.ini dodałem takie linijki:
0
1 impulse linebreakeropen
2 impulse linebreakerclose
3 impulse motoroverloadrelayreset
4 impulse compressoroverloadrelayreset
5 impulse converteroverloadrelayreset
6 impulse motorconnectorsopen
7 impulse alerteracknowledge
8 toggle batteryenable batterydisable
9 toggle converterenable converterdisable
10 toggle compressorenable compressordisable
11 impulse sandboxactivate
12 toggle heatingenable heatingdisable
13 impulse pantographcompressoractivate
14 toggle pantographcompressorvalveenable pantographcompressorvalvedisable
15 toggle motoroverloadrelaythresholdsetlow motoroverloadrelaythresholdsethigh
16 toggle pantographraisefront pantographlowerfront
17 toggle pantographraiserear pantographlowerrear
18 impulse wheelspinbrakeactivate
19 toggle headlightsdimenable headlightsdimdisable
20 toggle interiorlightdimenable interiorlightdimdisable
21 impulse independentbrakebailoff
22 impulse hornhighactivate
23 impulse hornlowactivate
24
25 toggle headlightenableleft headlightdisableleft
26 toggle headlightenableupper headlightdisableupper
27 toggle headlightenableright headlightdisableright
28 toggle redmarkerenableleft redmarkerdisableleft
29 toggle redmarkerenableright redmarkerdisableright
30 toggle interiorlightenable interiorlightdisable
31 toggle alarmchaintoggle
32 toggle reverserforward
33 toggle reverserneutral
34 toggle reverserbackward
35
36 impulse mastercontrollerincrease
37 impulse mastercontrollerdecrease
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
W pliku eu07.ini mam dodane takie linijki - włączyłem obsługę nastawnika:
uart COM3 115200 0.01 0.1
uarttune 0 0 0 0 1 1023 0.7 1023 0.6 1023 1 255 4000 1023 800 1023 150 1023
uartfeature yes no no no
uarttachoscale 1
uartdebug no
Niestety oczywiście nie działa to. Kod arduino do testów dałem najprostszy jaki się da:
volatile uint8_t zPC[52] = {0}; // standardowe bajty przekazywane do kodu Arduino
volatile uint8_t doPC[20] = {0xEF, 0xEF, 0xEF, 0xEF}; // standardowe bajty przyjmowane z kodu Arduino
void setup() {
pinMode(2, OUTPUT); //ustawienie pinu 2 jako wyjście cyfrowe
pinMode(4, INPUT_PULLUP); //ust pinu 4 jako wejscie
pinMode(6, INPUT_PULLUP); //ust pinu 6 jako wejscie
digitalWrite(2, LOW); //ustawienie stanu niskiego na pinie 2
Serial.begin(115200); //nawiązanie komunikacji z prędkością 115200b/s
Serial.setTimeout(10);
while(!Serial){}; //czekanie do nawiązania komunikacji z komputerem
}
void loop() {
bitWrite(doPC[8], 4, !digitalRead(4)); //nastawnik +
bitWrite(doPC[8], 5, !digitalRead(6)); //nastawnik -
digitalWrite(2, (bitRead(zPC[7], 6))); //dioda baterii
while (!Serial.available()) {};
Serial.readBytes((char*)zPC, 52);
Serial.write((char*)doPC, 20);
}
Mam wrażenie, że potężnie błądzę, i nie wiem kompletnie co teraz.
Oczywiście w momencie gdy używam zwyczajnych diód czy przycisków wszystko działa prawidłowo - ten kod działa poprawnie:
volatile uint8_t zPC[52] = {0}; // standardowe bajty przekazywane do kodu Arduino
volatile uint8_t doPC[20] = {0xEF, 0xEF, 0xEF, 0xEF}; // standardowe bajty przyjmowane z kodu Arduino
void setup() {
pinMode(2, OUTPUT); //ustawienie pinu 2 jako wyjście cyfrowe
pinMode(4, INPUT_PULLUP); //ust pinu 4 jako wejscie
pinMode(6, INPUT_PULLUP); //ust pinu 6 jako wejscie
digitalWrite(2, LOW); //ustawienie stanu niskiego na pinie 2
Serial.begin(115200); //nawiązanie komunikacji z prędkością 115200b/s
Serial.setTimeout(10);
while(!Serial){}; //czekanie do nawiązania komunikacji z komputerem
}
void loop() {
bitWrite(doPC[6], 6, !digitalRead(4)); //ton wysoki
bitWrite(doPC[6], 7, !digitalRead(6)); //ton niski
digitalWrite(2, (bitRead(zPC[8], 6))); //lampka CA
while (!Serial.available()) {};
Serial.readBytes((char*)zPC, 52);
Serial.write((char*)doPC, 20);
}
Czy użycie "mastercontrollerincrease" i odwrotnej w przypadku uart nie będzie działać? Czy popełniam błąd gdzie indziej?