Odczyt danych z serialport

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...

 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...

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ąć?

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()

0

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

0

w tej linijce wypluwa błąd:

            czujniczek = System.Int32.Parse(czujnik);
 

FormatException was unhndled

0

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

0

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

1
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";
  } 
0

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

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;
        }
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1