• 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
#1
Witam,
posiadam juz praktycznie skończony projekt została mi tylko myślałem, że błahostka jednak nie moge sobie z tym poradzić. Mianowicie chciałbym aby stan przełacznika był odczytywany i wysyłany poprzez serialport do VisualStudio. Wydawało mi sie, że umieszczenie w tym miejscu jakiegos "serial.printa"...
Mój program ma służyc jako typowy switcher, który przełaczany jest pomiedzy 4 różnymi opcjami i jest możliwe sterowanie nim za pomoca przełacznika oraz aplikacji napisanej w VS...Moim problemem jest to, iż chciałbym aby mój program odczytywał aktualny stan przełacznika a nastepnie po kliknieciu "connect" ustawiał konfiguracje dla konkretnej opcji.
np jeśli ustawie przełacznik na pozycje 3cia to po połaczeniu sie programu z arduino automatycznie przycisk 3ci przyjmuje postać "wcisnieta"
Kod:
if(digitalRead(9)== LOW)
 circle_swith = 9;
if(digitalRead(10)== LOW)
 circle_swith = 10;
if(digitalRead(11)== LOW)
 circle_swith = 11;
if(digitalRead(12)== LOW)
 circle_swith = 12;
 
Odpowiedź
#2
A problem masz z Arduino, aplikacją na PC, czy ja za mało kawy wypiłem? To, że czegoś chcesz nie jest problemem.
 
Odpowiedź
#3
Mianowicie problem dla mnie jest, że nie wiem w którym miejscu wysłać dane na serialPort i w jaki sposób. Czy wymagane jest np po ustawieniu przełacznika wysyłanie dodatkowej wiadomości np serial.print("funkcja1") i dopiero odczytywanie tego czy można bezpośrednio odczytać stan?
 
Odpowiedź
#4
Możesz sobie wysyłać dane cyklicznie co np. 1s, Możesz wysyłać również po określonym zdarzeniu. Np. robisz sobie zmienną globalną "nowe_dane" i za każdym razem gdy coś zmienisz z przełącznikami to również ustawiasz ją na 1.
Potem w pętli loop sprawdzasz:
Kod:
if (nowe_dane)
{
nowe_dane=0; //zerujesz ja z powrotem
zbieram_dane_do_wyslania();//zbierasz sobie dane do jakiegos stringa, tekstu
Serial.println(zebrane_dane); //możesz też tu wstawić zamiast zmiennej z danymi funkcję, która zwraca zmienną z danymi
}
To Ty decydujesz o wysłaniu, wysyłanie jest banalne, można to robić kiedy się chce. Natomiast na odbiór musisz być gotowy zawsze, bo nie wiesz kiedy to się stanie. Nie koniecznie też wiadomo, czy akurat odbiornik jest włączony, także można wysyłać i co określony czas i co zdarzenie, jeśli akurat tak potrzebujesz.
 
Odpowiedź
#5
Okej, dzięki.

Aby nie dodawać kolejnych funkcji poprostu dołączylem to do już istniejacych case'ow.
Kod:
if(digitalRead(9)== LOW)
 circle_swith = 9;
if(digitalRead(10)== LOW)
 circle_swith = 10;
if(digitalRead(11)== LOW)
 circle_swith = 11;
if(digitalRead(12)== LOW)
 circle_swith = 12;

 if(circle_swith != circle_swith_old)
{
   
    switch (circle_swith) {
     
     
      case 9:
         lcd.clear();  
         lcd.printstr("   Antena 1");
         lcd.setCursor(0,1);
         lcd.printstr("    W3DZZ");
         digitalWrite(2, LOW);
         digitalWrite(3, HIGH);
         digitalWrite(4, HIGH);
         digitalWrite(5, HIGH);
      Serial.println("Opcja1")
Orientuje się może ktoś jak te dane mogę odebrać poprzez aplikacje?
Próbowałem w ten sposób jednak mi to nie działa.
Kod:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       receivedData = ReceiveSerialData()


       Dim data As String
       data = Microsoft.VisualBasic.Left(receivedData, 7)

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

       End If

       If (data = "Opcja1") Then
           BT2()
       End If

       If (data = "Opcja1") Then
           BT3()
       End If

       If (data = "Opcja1") Then
           BT4()
       End If
   End Sub
 
Odpowiedź
#6
Takie rzeczy to przede wszystkim w przerwaniu od portu szeregowego.
Musisz sobie napisać obsługę przerwania.
W VB to by było jakoś tak:
Zadeklaruj obiekt PortCOM
Kod:
Dim PortCOM As New SerialPort("nazwa_portu_na _przyklad_COM1")

Powiąż zdarzenie z obsługą zdarzeń:
Kod:
AddHandler PortCOM.DataReceived, AddressOf OdebraneDane
I napisz funkcję obsługi zdarzeń:

Kod:
Private Shared Sub OdebraneDane( nadawca As Object, zdarzenie As SerialDataReceivedEventArgs)
       Dim Port As SerialPort = CType(nadawca, SerialPort)
       Dim OdebraneDane  As String = Port.ReadExisting()
        ' no i możesz zwrócić dane odebrane z portu i je dalej przetwarzać
        Return OdebraneDane
     End Sub
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#7
Tu jest tutorial jak w 10 minut odpalić swój program do odczytu z UART na PC: https://www.youtube.com/watch?v=1KvtKMUWmyI&t=0s, tylko że C#. Pisanie w C/C++ na Arduino, a  dla PC w Basicu/Pascalu czy jakimś innym Fortranie to taki sobie pomysł. Tu jest po angielsku dużo takich: https://www.youtube.com/channel/UC8inCnD...o5g/videos
 
Odpowiedź
#8
(15-06-2018, 20:50)kaczakat napisał(a): Pisanie w C/C++ na Arduino, a  dla PC w Basicu/Pascalu czy jakimś innym Fortranie to taki sobie pomysł.

W tak prostych przypadkach, nie ma znaczenia w jakim języku napiszemy program.
VB.NET jest typowym językiem programowania zdarzeniowego i obsługę zdarzeń szybciej i prościej jest oprogramować w VB.NET, jeśli oczywiście bardzo dobrze znamy ten język.


Ja na przykład sporo programów piszę w VB.NET, chociaż współpracę PC <-> Ardu najczęściej piszę w C++.
Pewnie dla tego, że jak napisałem wyżej, nie ma znaczenia w jakim języku napiszemy program.
To nie te czasy, gdy różnice wykorzystanych zasobów były naprawdę spore i determinowały język dla konkretnej aplikacji.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#9
Robson Kerman, zapewne jest jak mówisz, jak jesteś biegły w pisaniu w VB to nie próbowałbym Cię przekonać do pisania w C# czy Javie, ale ktoś mnie kiedyś próbował namówić na Pascala/Delphi, bo jest coś tam za darmo (a MS daje teraz prawie full wersję gratis) i tutoriale po polsku, to go śmiechem zabiłem (a potem się jednak okazało, że gość pisze moduły by sprzedawać kursantom Big Grin, a bez nich to taka ostra rzeźba jest tam, no i przykładów w necie sucho). Wszystko czego nie wiedziałem, a potrzebowałem znalazłem na Youtubie i Google. To nie są jakieś poematy, by translator sobie z nimi nie poradził. W sumie napisałem 5 programów, które były mi potrzebne, każdy związany z UART/RS485 (czyli właściwie 5 wersji programu) i na razie mi wystarcza, a poradników widziałem tyle, że wystarczy mi na moje plany w perspektywie 10 lat.
VB ma jednak swoją składnię, a czasem trzeba coś poklepać i po paru tutorialach zdecydowałem się pozostać przy C, bo życie jest krótkie, by tracić czas na przestawianie się. I tak jak tam zaglądam raz na pół roku to uczę się od nowa.
 
Odpowiedź
#10
A jeszcze gwoli ścisłości.
Ja nikogo nie namawiam do pisania w VB, to autor wątku próbuje się dogadać z Ardu w tym języku, więc chciałem pomóc właśnie w tym.
Może kolega niema innego kompilatora?
A może nie lubi tego community? Ja na przykład nie lubię.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości