Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

IR Fernbedienung: Mehrmaliges Drücken derselben Taste liefert unterschiedliche Ergebnisse
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

IR Fernbedienung: Mehrmaliges Drücken derselben Taste liefert unterschiedliche Ergebnisse

beantworten | zitieren | melden

Hallo zusammen,

ich habe folgendes Problem.
Und zwar programmiere ich zur zeit eine Fernbedienung, diese liest daten aus einem ir empfänger einer schaltung über einen USB auf serielport adapter.
Ich bekomme die daten zwar ausgelesen wenn ich auf eine taste der fernbedienung drücke, jedoch ist das problem dass ich keine reproduzierbaren ergebnisse erziele.
Das heißt wenn ich z.B. 2 mal die Taste 1 drücke, bekomme ich 2 mal unterschiedliche Zahlen angezeigt.
Ich habe mir eine methode geschrieben die ankommenden bytes in hexadezimale zahlen zu wandeln. Die ankommenden bytes werden in einem byte array gespeichert und ausgelesen.
Allerdings ist wie gesagt das Problem, dass ich immer wieder unterschiedlich zahlen angezeigt bekomme und keine reproduzierbaren Ergebnisse, um mit einem Tastendruck einen bestimmten Prozess auszuführen.

Ich freue mich über eure Hilfe und Ideen, wie ich da weiter komme.
Es ist das erste mal das ich so Hardwarenah programmiere und komme gerade an meine Grenzen.
Lg Bakerman
private Nachricht | Beiträge des Benutzers
Wax
myCSharp.de - Member

Avatar #avatar-2276.jpg


Dabei seit:
Beiträge: 745
Herkunft: Dortmund

beantworten | zitieren | melden

Hi bakerman,

ohne die signifikanten Stellen deines Codes zu sehen, müsste ich schon meine Kristallkugel reaktivieren um dir helfen zu können. ;-)

MfG
wax
private Nachricht | Beiträge des Benutzers
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Ja sorry ist mir auch mal so eingefallen ^^



        private void btOpen_Click(object sender, EventArgs e)
        {
            try         
            {
                //SerialPort mySerialPort = new SerialPort("COM9");
                serialPort1.BaudRate = 9600;
                serialPort1.Parity = Parity.None;
                serialPort1.ParityReplace = ((byte)(0));
                serialPort1.StopBits = StopBits.One;
                serialPort1.DataBits = 7;
                serialPort1.DtrEnable = false;
             //   serialPort1.RtsEnable = false;
                serialPort1.Encoding = Encoding.UTF8;
                serialPort1.Handshake = Handshake.None; //send to hardware flow control.              
                serialPort1.PortName = "COM5";

                serialPort1.RtsEnable = true;
                
                

                serialPort1.Open();
                if (serialPort1.IsOpen)
                {
                    tbStatus.Text += "on \r\n";

                }
//                startReading();


            }         
            catch (Exception ex)         
            {             
                tbStatus.Text += ex.ToString() + "\r\n";             
            } 
        }

        private void startReading()
        {
            //tbStatus.Text = b[0].ToString();
            //tbStatus.Text += strIndata + " \r\n";   
            
            tbStatus.Text += nAnzahl.ToString() + " - " + strData + " \r\n";
        }


        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
     
        {
            nAnzahl = serialPort1.BytesToRead;
            
            byte  [] buffer = new byte [nAnzahl-1];
              
            this.serialPort1.Read(buffer, 0, nAnzahl -1);

              strData = ByteToHex(buffer);

            for ( int i = 0; i < buffer.Length; i++)
            {
                
                strData +=  buffer[i].ToString();

            }
              if (strData != String.Empty)
              {
                   
                  this.BeginInvoke(new SetTextCallback(SetText), new object[] {strData });

              }  


        }


        private string ByteToHex( byte [] buffer)

        {
            StringBuilder builder = new StringBuilder(buffer.Length * 3);

            foreach (byte data in buffer)

            {
                builder.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));
            }

            return builder.ToString().ToUpper();
        }

        private void SetText(string text)  
        {  
             this.tbStatus.Text += text + " \r\n";  
        }  



        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            if (!serialPort1.IsOpen)
            {
                tbStatus.Text += "off \r\n";

            }
        }

        private void btRead_Click(object sender, EventArgs e)
        {
            startReading();
          
        }

        private void bt_clear_Click(object sender, EventArgs e)
        {
            tbStatus.Clear();
        }

        private void serialPort1_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
        {
            if (strData != String.Empty)
            {
                this.BeginInvoke(new SetTextCallback(SetText), new object[] { "Error" });

            }

        }

        
        

    }



}

sooo ich denke so wird es klarer und danke schonmal im voraus ;)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

das hier erscheint mir seltsam:

            nAnzahl = serialPort1.BytesToRead;

            byte  [] buffer = new byte [nAnzahl-1];

            this.serialPort1.Read(buffer, 0, nAnzahl -1);
Hat es einen bestimmten Grund, immer ein Byte weniger zu lesen als anfällt?

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

ja das stoppbit soll abgezogen werden...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bakerman am .
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von bakerman
ja das stoppbit soll abgezogen werden...

Trotzdem musst Du es auslesen (auch, wenn es nicht benutzt wird).

Sind die Daten immer unterschiedlich? Oder nur jedes zweite Mal?

Welcher Art sind denn die Daten? Werden die von der Schaltung schon "interpretiert" oder sind das nur Messwerte?
private Nachricht | Beiträge des Benutzers
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

okay nehm ich -1 wieder raus ,danke ;)

ja die daten sind immer unterschiedlich...

was meinst du mit welcher art sind die daten ?
ich hab ne schaltung zusammen gelötet aber ich denke durch den serialport werden die interpretiert... (der SP ist auch drauf gelötet)
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von bakerman
was meinst du mit welcher art sind die daten ?

Nun ja - was sagen die Daten aus? Sind es Impuls/Pausezeiten oder hast Du eine "Interpretation" anhand einer konkreten Kodierung (z. B. RC5) vorgenommen?

Ich frage deshalb, weil Zeiten natürlich aufgrund von Messungenauigkeiten nie exakt gleich sein werden.
private Nachricht | Beiträge des Benutzers
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

achso...
die daten werden in utf8 kodiert und denn in hex umgewandelt
also keine impuls oder pausezeiten

aber an nAnazhl-1 lag es nicht
im gegenteil ich bekomm wiie gerade garnichts mehr angezeigt *der springt noch nichmal in den datarecievedhandler rein ....
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bakerman am .
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Zitat von bakerman
ja das stoppbit soll abgezogen werden...

Das kann man nicht "abziehen". Auserdem sind Bits und Bytes ein unterschied.

Du kannst die empfangenen Daten nicht einfach in UTF8 o.ä. konvertieren, das wird nicht funktionieren.

ujr hat das schon angedeutet, google doch mal nach "RC-5".
private Nachricht | Beiträge des Benutzers
bakerman
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

ach jez hab ich es verstanden was ihr meint ^^
ja sie werden als RC-5 Code von der schaltung interpretiert....

irgendwo muss ja der fehler liegen bzw etwas erweitert werden... nur wo ?
private Nachricht | Beiträge des Benutzers