Ankündigung

Einklappen
Keine Ankündigung bisher.

User helfen User - Programmieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hab hier auf der Arbeit ein Problem mit dem Einbinden eines mp4-Videos.
    Wenn man die Controls aktiviert, kann man in Chrome/Safari diese Zeitleiste zum vor- und zurückspringen nicht nutzen. Sie ist da, funktioniert aber nicht. Wenn man das Video pausiert und wieder starten will, fängt es von vorne an.
    Im Firefox funktioniert es einwandfrei.
    Dazu kommt noch, dass es über Safari für unsere Kunden nicht möglich ist, PDF Dateien hochzuladen.
    Da die meisten Kunden Chrome/Safari verwenden, muss ne Lösung gefunden werden.

    Wir würden das Ganze gerne mal mitm Safari testen. Allerdings haben wir keinen Mac und Windows unterstützt Safari seit einigen Versionen nicht mehr.
    Gibt es ne andere Möglichkeit Safari unter Windows zum Laufen zu kriegen und das zu testen?

    Kommentar


      Zitat von QTPie
      C# Programm soll einen seriellen Datenstrom lesen und wiedergeben. Die Daten werden von einem Arduino Uno R3 gesendet. Genutzt wird COM-Port 3.

      Problem: Ich kann immer nur von einer "Seite" den COM Port aufmachen. Wenn ich mit dem Arduino den COM-Port öffne, bekomme ich von meinem C# Programm nen Unauthorized Access, weil der Port ja schon offen ist. Öffne ich ihn bei C# nicht extra, kommt aber auch nichts an. Mache ich es andersrum, also C# öffnet COM-Port 3 dann das gleiche Spiel. Der Arduino kann dann nichtmehr zugreifen. Wie bekomm ich das fertig?

      Code im Spoiler:

      C#
      Spoiler: 

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading;
      using System.IO.Ports;

      namespace ConsoleApplication3
      {
      class Program
      {
      static void Main(string[] args)
      {

      SerialPort serialPort1;
      serialPort1 = new SerialPort();
      serialPort1.PortName = "COM3";
      serialPort1.BaudRate = 9600;
      serialPort1.DtrEnable = true;
      REPEAT:
      if (serialPort1.IsOpen)
      {
      string reading = serialPort1.ReadLine();
      Console.WriteLine(reading);
      serialPort1.Close();

      }
      else
      {
      Console.WriteLine("closed,opening");
      serialPort1.Open();
      goto REPEAT;

      }

      }
      }
      }


      Arduino C-Code
      Spoiler: 

      #include

      #define DHTPIN A4
      #define DHTTYPE DHT11
      #define THERPIN A0

      DHT dht(DHTPIN,DHTTYPE);


      String hum="Humidity:";
      String temptext="Temp:";
      String semi=";";

      void setup() {

      Serial.begin(9600);
      dht.begin();
      pinMode(A0,INPUT);
      }

      void loop() {

      float humidity = dht.readHumidity();
      delay(300);
      float temp = dht.readTemperature();
      delay(300);


      if (isnan(humidity)||isnan(temp))
      {
      Serial.println("Fehler beim Lesen(NAN)");
      delay (5000);
      }else
      {
      Serial.print(temp + semi);
      Serial.print(humidity);
      Serial.flush();
      delay(1000);

      }


      }



      Hab natürlich schon bissl gegoogled, die Standard-Antwort ist das natürlich der COM-Port bereits von ner anderen Anwendung verwendet wird. Aber muss das nicht so sein? Das beide auf den gleichen Port zugreifen? Sonst kann ich ja nicht kommunizieren,oder?
      Hi,

      also ist zwar schon etwas her aber ich habe während meiner DA mit COM-Ports und so n kram gearbeitet. Du kannst nur ein "Objekt" des Comports anlegen und dieses Öffnen danach ist er belegt. Willst du nun nachrichten oä schicken/empfangen musst du das anhand dieses Objekts machen. Oder du schließt ihn und öffnest ihn erneut in deinem C-Code ... weiß net ob dir das hilft ^^. Ich hab damals halt nur in C++ gearbeitet und das Objekt dann weitergereicht so das jede Klasse die funktionen lesen/schreiben an dem objekt ausführen kann.

      Kommentar


        Aber ich lege ja nur ein Objekt des Serial Ports an? Zumindest im C#- Programm, im Arduino Code gibts ja keine Objekte. Da leg ich einfach mit Serial.Begin() los.

        Kommentar


          Zitat von QTPie
          Aber ich lege ja nur ein Objekt des Serial Ports an? Zumindest im C#- Programm, im Arduino Code gibts ja keine Objekte. Da leg ich einfach mit Serial.Begin() los.
          Ja aber dein Serialport ist doch offen bevor du im Arduino auf ihn zugreifst oder? Du musst ihn schließen bevor der Arduino drauf zugreifen kann

          Kommentar


            Also praktisch so:

            Arduino öffnet Port und schreibt irgendwas -> Port schließen -> C# öffnet Port und ließt -> Port schließen -> Arduino darf wieder aufmachen und schreiben?

            Kommentar


              Zitat von QTPie
              Also praktisch so:

              Arduino öffnet Port und schreibt irgendwas -> Port schließen -> C# öffnet Port und ließt -> Port schließen -> Arduino darf wieder aufmachen und schreiben?
              Genau so :)

              Kommentar


                hi QTPie, bin gerade müde aber hoffe dir vllt etwas helfen zu können.

                Zitat von QTPie
                Also praktisch so:

                Arduino öffnet Port und schreibt irgendwas -> Port schließen -> C# öffnet Port und ließt -> Port schließen -> Arduino darf wieder aufmachen und schreiben?
                Sowas höre ich ehrlich gesagt zum ersten mal. Dein Arduino Uno R3 besitzt den ATmega328 Mikrocontroller, mit der komischen Serial Libary von Adruino wird wohl die UART-Schnittstelle für die Kommunikation initialisiert. Der UART-Controller besitzt eine TX und RX Leitung -> bidrektional. Die C# Library wird mit Sicherheit doch auch bidirektional sein?

                Vermeide in deinem Arduino Code die delay-Funktionen. Die wirken blockierend, sprich der Prozessor kann während dieser Zeit nicht arbeiten - Du blockierst ihn sogar bis zu 5 Sekunden. Die UART-Schnittstelle wird wohl auch blockiert -> serielle Kommunikation wird unterdrückt.
                Wenn du weiter mit Arduino Libaries arbeiten willst, verwende die millis Funktion und schreibe deine eigenen Tasks. Hab mal schnell ein Link gesucht:

                https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

                Dadurch hast du schonmal einen schöneren Arduino-Code. Und ich denk du bist dir sicher, dass es die COM3 Schnittstelle ist.

                Mit C# kenn ich mich leider nicht aus. Kann aber morgen mal bischen rumschauen. Falls du bereits eine Lösung hast, würde diese mich auch interessieren :)



                Kommentar


                  Danke für die Hilfe, hatte gestern leider keine Zeit das auszuprobieren.

                  Heute mal implementiert, die Lösung von Matze hat funktioniert! Der Serial Port darf also nur einseitig geöffnet werden und man muss die Daten dann einfach aus dem Buffer lesen. Danke!

                  Kommentar


                    Zitat von QTPie
                    Danke für die Hilfe, hatte gestern leider keine Zeit das auszuprobieren.

                    Heute mal implementiert, die Lösung von Matze hat funktioniert! Der Serial Port darf also nur einseitig geöffnet werden und man muss die Daten dann einfach aus dem Buffer lesen. Danke!
                    Gut das es funktioniert, allerdings ist die Lösung extrem seltsam oder ich hab gerade einen hänger. Ein Port bleibt doch normalerweise während der gesamten Kommunikation offen. Diesen immer zu schließen und wieder zu öffnen ist nicht praktikabel. In deinem Fall scheint es gut zu funktionieren, weil du nur vom Arduino zum PC sendest - Darum funktioniert es auch mit Delay-Funktionen. Bei einer Bidirektionalen Kommunikation wirst du Probleme bekommen - oder bei komplexeren Programmen.

                    Habe schnell nachgeschaut, die folgenden Vorgehen ohne ständigem öffnen/schließen.

                    http://stackoverflow.com/questions/1243070/how-to-read-and-write-from-the-serial-port

                    https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.open(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

                    Kommentar


                      Ja habe jetzt beim weiterarbeiten gemerkt das es keine optimale Lösung ist und ich mich oft selbst blockiere und irgendwann nur noch vereinzelt Daten bekomme. Werde mir das morgen mal nochmal genauer ansehen, danke!

                      Kommentar


                        hey ich bin auf der suche nach nem paradigma oder good practice....wie immer man das nennen mag. geht um oop und funktionen von klassen.

                        man sollte seine funktionen in 2 gruppen einteilen. die einen ändern den inneren zustand der klasse, geben aber kein ergebnis zurück (bestes beispiel -> setter)
                        die anderen funktionen machen etwas, ändern aber nichts am inneren zustand der klasse. zb int add (int a , int b) { return a + b; }

                        mir fällt der name dieses prinzips aber nicht mehr ein -.- könnt ihr mir da helfen?

                        Kommentar


                          Funktion vs. Prozedur?

                          Kommentar


                            macht sinn :D ich danke dir.

                            Kommentar


                              Wollte nur mal nen paar Programmierer auf meinen Thread im Software-Forum lotsen, danke! ;)

                              Kommentar


                                Bin mir grade nicht sicher ob ich dumm bin :D

                                Sprache C#

                                User gibt eine Funktion in eine Textbox ein, also z.b f(x)=x². Gibts irgendne einfache Möglichkeit den Exponent in ne "normale" 2 zu verwandeln? Oder muss ich da intern mit dem Ascii Code arbeiten und mir das ganze praktisch händisch übersetzen?

                                Kommentar

                                Lädt...
                                X