• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czytanie danych z arduino
#11
Nie mogę się połapać w żaden sposób. Zostało mi w sumie tylko to dlatego nie wiem czy jest sens zmieniać środowisko na inne. 
Kod:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       receivedData = ReceiveSerialData()

       RichTextBox1.Text &= receivedData


   End Sub

 W aplikacji znajduje sie textbox wyświetlający odebrane dane, skoro wyświetla mi np "Opcja1" to znaczy, że do receivedData trafiaja dane z Arduino 
Kod:
if(digitalRead(9)== LOW)
         {
           Serial.write("Opcja1");
         }

Skoro tak to dlaczego danych znajdujacych sie w zmiennej receivedData nie moge użyć np do Instrukcji IF
Mimo, że w receivedData znajduje się "Opcja1" a według instrukcji powinno to wywołać funkcje BT1(). Nie mam pojęcia dlaczego nie da się wykorzystać stringa dla głupiej instrukcji..
Kod:
If (receivedData = "Opcja1") Then
           BT1()

End If

Pracuje na szablonie z internetu, który poprostu zmieniłem według własnych potrzeb i jest to ostatnia rzecz z która nie mogę sobie poradzić, tak wiem jest wiele rozwiązań w internecie aczkolwiek nie chciałbym robić tego od nowa...
 
Odpowiedź
#12
receivedData = "Opcja1"
przypisuje do wskaźnika na "receivedData " wskaźnika na "Opcja1".
Kompilator nie dał ostrzeżenia, że nie ma warunku w if?
 
Odpowiedź
#13
Kod:
If (receivedData = "Opcja1") Then
Jak to nie ma warunku if?

Dane zawarte w stringu moge wyświetlić ale nie moge ich użyć do stworzenia instrukcji?
Przypisanie ich do innej zmiennej nie daje efektu. Typ zmiennej też wydaje mi się, że dobry.
 
Odpowiedź
#14
popatrz na if(digitalRead(9)
 
Odpowiedź
#15
Kod:
if(digitalRead(9)== LOW)
  {
     Serial.write("Opcja1");
  }


If (receivedData = "Opcja1") Then
         
      BT1()

End If
Patrze i według mnie oraz tego co znalazłem na temat używania instrukcji IF w tym środowisku wydaje się być poprawne, chyba, że już od tego szperania nie widze różnic...
 
Odpowiedź
#16
Środowiska oczywiście nie ma sensu zmieniać, idea działania i sposób tworzenia programu wygląda w obu tak samo, różnice to tylko składnia. Trzeba się jej nauczyć. Twój błąd jest bardzo częsty, popatrzysz jeszcze na tę linijkę z parę godzin i zauważysz.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#17
A jakby czytał ostrzeżenia kompilatora to nie musiałby patrzeć kilka godzin.
Niestety, większość początkujący olewa ostrzeżenia kompilatora. Przecież kompilator jest głupi, co się czepia szczegółów.
 
Odpowiedź
#18
== porównanie
=przypisanie

Czyli jeśli dasz

if(a==b) to warunek będzie spełniony jeśli a oraz b są równe. Inaczej warunek nie jest spełniony. Jeśli dasz
if(a=b) to wartość "a" zostanie zastąpiona wartością "b". Program z tego co pamiętam potraktuje to jak by warunek zawsze był spełniony i część kodu która była zależna od warunku zawsze się wykona. Prościej?
Zamień
If (receivedData = "Opcja1")
Na
If (receivedData == "Opcja1")
 
Odpowiedź
#19
Chodzi o to, że kompilator wyrzuca błąd własnie przy tym zapisie 
Kod:
If (receivedData == "1") Then
           cmd1_BTN.Text = "Text"
       End If
Nie mam pojęcia czemu a podpowiadam mi w ten sposób
Kod:
Dim p As Object = receivedData == "1"
       If p Then
           cmd1_BTN.Text = "Text"
       End If
Po czym dalej wywala bład kompilacji...


A kolejna podpowiedzią jest
Kod:
     Dim p As Object = receivedData == "1"
       NewMethod(p)

   End Sub

   Private Sub NewMethod(p As Object)
       If p Then
           cmd1_BTN.Text = "Text"
       End If
   End Sub
 
Odpowiedź
#20
Pokaż cały kod i cały wypluwany log. Każesz nam patrzeć przez dziurkę od klucza na Panoramę Racławicką. Zwykle porównywanie == stringów nie ma sensu, do tego są specjalne funkcje. C string jest tablicą, stringi w C# i pewnie w VB to zupełnie inna konstrukcja. Na pewno nie porównujesz konia do rzodkiewki? Jak coś to można sobie wyłowić pierwszą literkę i porównać ją do jakiegoś znaku. Co do zasady nie wywołujesz odczytu z portu COM jakimś timerem (nie wiem co to jest ten tick, tak podejrzewam). Masz na zdarzenie pojawienia się danych na porcie COM obsłużyć to zdarzenie aż do odebrania znaku/linii tekstu, a nie obsłużyć zdarzenie, że wybije godzina odbioru danych. W C# są funkcje do odbioru, które rozpoznają jaki rodzaj danych odbierasz, do tekstu jest właśnie np. ReadLine(), jesteś pewien do czego jest funkcja ReceiveSerialData()?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości