Aktywne Wpisy

Treść przeznaczona dla osób powyżej 18 roku życia...

Za tydzień już odbiór pojazdu więc zadecydujcie jakie blachy mają znaleźć się na pojeździe lub podajcie swoje pomysły
B0 (5 znaków max)
#motoryzacja #zycietruckera
B0 (5 znaków max)
#motoryzacja #zycietruckera
źródło: -xJ86QxC
PobierzBlachy
- B0 KNAGA 73.2% (41)
- B2 XDDDD 26.8% (15)





Problem w tym, że w moim Form1.cs mam
bool isPressed = false, zmian na arduino nasłuchuję kodem (w skrócie)serialPort.DataReceived += SerialPort_DataReceived;i widzę, że dostaję czy np. jest wciśnięty czy nie, ale w funkcji mam coś takiego:private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = serialPort.ReadLine();
if (data == "Pressed")
{
isPressed = true;
} else
{
isPressed = false;
}
}
i ta wartość
isPressednigdy się nie zmienia.Co jest nie tak? Czy to może dlatego że dzieję się to z innego wątku?
lastState == currentStatenajprościej, może interrupty jak trzeba. Sprawdź przede wszystkim kod na czyli czy na urządzeniu wciśnięcie buttona powoduje jakąkolwiek reakcję mikrokontrolera. IIRC w każdym modelu jest jakiś wbudowany LED, który możesz zaświecić.Dwa, ten if można pewnie
Tak jak pisałem, sprawdzałem jak zmienia się "data" i jak wcisnę przycisk, to dostaję jednorazowo tekst
Presseda jak go puszczę to dostaję tekstNotPressed. Więc jeślidata == Pressedtobool isPressed = true, a jeśli jest inaczej, to powinno byćbool isPressed = false. I sprawdzam co chwilę w konsoli ale boolisPressedjest ciąglefalse(taką ma początkową wartość)HBOFFczyli że przycisk nie jest wciśnięty. Napisfalseto jest to właśnie zmienna, która mimo że ją zmieniam to i tak jest ciąglefalseźródło: dbg
PobierzDodam, że tekst muszę aktualizować w ten sposób bo inaczej dostaję błąd że ruszam Formant z innego wątku:
debuggerTextBox.Invoke(new Action(delegate ()To wszystko dzieje się jednorazowo, klikam przycisk, dostaję raz, że przycisk jest kliknięty, puszczam, dostaję raz, że przycisk już nie jest wciśnięty. Pomyślałem o tym pisząc już sam kod dla płytki Arduino, że złym pomysłem może być spamowanie SerialPortu
Postawiłem breakpoint w miejscu
if (data.Equals("Pressed")) {isPressed = true; <---- tu breakpoint
else [...]
Ale czemu tekst
Pressedz SerialPortu !=Pressed?Edit: do czego zmierzam: sprawdź, czy rzeczywiście ten event jest za każdym razem przechwytywany i jakie są dane. Jak już pewnie wiesz, komunikacja przebiega w innym wątku niż UI, ale dokumentacja mówi coś o tym, że even nie zawsze jest odpalany.
Komentarz usunięty przez autora
zmieniłem
if (data.Equals("Pressed")