Odczyt danych z serialport

Odczyt danych z serialport
ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Witajcie.

Piszę taką skromną aplikację. Aplikacja ma sterować różnymi rzeczami podpiętymi pod płytkę ARDUINO. Wysyłanie danych z visual studio do arduino ogarnąłem. Problem mój teraz leży w odczycie danych wysyłanych z płytki. W skrócie napięcie w punkcie pomiędzy dwoma rezystorami będzie się zmieniać w zależności od zmieniającej się rezystancji fotorezystora. Mierzone jest w wartosciach od 0 do 1023. Płytka jest zaprogramowana tak aby przy wartości mniejszej niz 200 zapalała się dioda. Wartości zmieniają się od natężenia światła,
Zrobiłem na początku aby ta wartość pokazywała sie w textboxie...

Kopiuj
 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            czujnik = serialPort1.ReadLine();
            stats.Text = czujnik;

        }

I super działa.

Ale interesuję mnie aby w textbox(stats) przekazywał informacje do użytkownika o aktywności diody. Próbowałem w taki sposób...

Kopiuj
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            czujnik = serialPort1.ReadLine();
            
            czujniczek = System.Int32.Parse(czujnik);

            if (czujniczek < 200)
            {
                stats.Text = "Czujnik zmierzchu aktywny. Oświetlenie włączone";
            }
            else
            {
                stats.Text = "Czujnik zmierzchu nieaktywny. Oświetlenie wyłączone";
            }
        } 

I wtedy aplikacja działa aż do momentu gdy otwieram port ;/ następnie zawiecha. Za każdym razem tak samo.
Moje pytanie to : Jak to ogarnąć?

MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 91
0

Siemka,
nie wiem gdzie wywolujesz te funkcje DataReceived, ale jak nie w petli to chyba normalne ze sie zatrzymuje. Czytasz jedna linie do znacznika NewLine, wyrzucasz tekst w txtbox i koniec funkcji. Dlaczego mialoby sie cos dalej dziac?
Ale moge sie mylic.
Pozdro

Mooze ReadExisting()

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

Sprawdzałeś w której linijce wywala ten błąd?

ivanise
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

w tej linijce wypluwa błąd:

Kopiuj
            czujniczek = System.Int32.Parse(czujnik);
 

FormatException was unhndled

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

to co jest w zmiennej czujnik nie da się przekonwertować na int32

K2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 142
0

TextBox należy do innego wątku niż "serialPort1_DataReceived" i tak po prostu nie uaktualisz formatki z zdarzenia

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  {
   if(!System.Int32.TryParse(serialPort1.ReadLine(),out czujniczek)) stats.Text="Błąd odczytu. Oświetlenie pozostawione bez zmian";
   else if(czujniczek<200) stats.Text="Czujnik zmierzchu aktywny. Oświetlenie włączone";
   else stats.Text="Czujnik zmierzchu nieaktywny. Oświetlenie wyłączone";
  } 
K2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 142
0

Być może są dwa błędy,ale kiedyś pisałem coś takiego i sądze że nie bez powodu miałem:

Kopiuj
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
 mySerialPort.Read(BuforIn, 0, BuforIn.Length);
UpdateTextBox1(ConvertToString(BuforIn[0]));

}

 public void UpdateTextBox1(string text)
        {
            if (InvokeRequired)
                Invoke(new Action<string>(UpdateTextBox1), text);
            else textBox1.Text = text;
        }
 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.