-         

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 55

Thema: Tasterwerte an Hyperterminal übergeben

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13

    Tasterwerte an Hyperterminal übergeben

    Anzeige

    Hi, wir programmieren den ASURO in der Schule im Informatik Leistungskurs, da meine Taster irgendwie spinnen wollte ich ein Programm schreiben, das mir anzeigt welche Werte die Taster zurückgeben. Denn mein Asuro gibt nicht die Bits zurück die es soll, also 1, 2, 4,...
    Nun habe ich folgendes Programm geschrieben:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    Init();
    
    
    	while(1)
    		{
    		char x=PollSwitch();
    		itoa(x, char string,16);
    		SerPrint(x);
    		x=0;	
    		
    		}
    
    }
    wenn ich das nun auf meinen ASURO flashe und das HyperTerminal anschalte und nacheinander die Taster drücke habe ich folgendes Problem:

    kein Taster gedrückt --> es werden Nullen zurück gegeben (stimmt also)
    Taster 1 --> es wird solange nichts zurückgegeben, wie ich den Taster gedrückt halte
    Taster 2 --> 2 wird zurückgegeben -|
    Taster 3 --> 4 wird zruückgegeben -|>--nicht immer, aber fast immer
    Taster 4 --> 8 wird zurückgegeben -|
    Taster 5 --> komische Zeichen
    Taster 6 --> einmal komische zeichen und Programm hängt sich auf

    Ich habe es auf zwei Asuro's getestet mit fast dem selben Ergebnis, kann mir vielleicht sagen was falsch ist, ich denke es liegt irgendwie an dem itoa(), da ich nicht weiß, ob ich die Funktion richtig angewandt habe. Ich hoffe es kann mir jemand helfen und bedanke mich schonmal im vorraus, für hilfreiche Antworten.

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    definiere string vorher mal als "unsigned char string[5]" und rufe dann die funktion mit "itoa(x,string,10)" auf. x sollte evtl noch unsigned werden.

    danach kannst du den wert mit SerWritean das terminal senden. hier eine korrigierte variante:

    Code:
    #include "asuro.h"
    
    int main(void)
    {   //beginn main
    unsigned char x;   //definition der pollswitch-variable
    unsigned char string[5];   //definition eines string mit max. 5 zeichen
    Init();   //initialisierung
    while(1)   //endlosschleife
          {   //beginn while
          x=PollSwitch();   //taster werden abgefragt
          itoa(x,string,10);   //wert wird umgewandelt und in string gespeichert
          SerWrite(x,5);   //string wird an terminal geschrieben
          SerWrite("\n\r",2);   //zeilenumbruch wird an terminal geschrieben ("\n" und "\r" sind je ein byte!)
          }   //ende while
    }   //ende main
    kleinschreibung ist cool!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13
    Sorry, aber das funktioniert auch nicht, das HyperTerminal gibt immer noch nur Zeichen aus

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    komisch.. kann da ma einer drüberschauen? XD
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    komisch.. kann da ma einer drüberschauen?
    Ich bin da mal so frei

    was auffält ist

    1.
    Code:
    #include <stdlib.h>
    für itoa
    gibt das keine Warnung ?

    2.
    itoa erwartet eigentlich einen Zeiger auf char und nicht unsigned char,
    gibt das keine Warnung ?
    also
    Code:
    char string[5];   //definition eines string mit max. 5 zeichen
    3.
    SerWrite erwartet einen Zeiger auf unsigned char (Käse) und die Anzahl der Zeichen, die ausgegeben werden, hier treten 2 Probleme auf

    a. Ergebnis von itoa müsste gacastet werden
    b. was Passiert wenn in itoa weniger als 5 Zeichen sind?

    also nicht, wie damaltor wohl in Eile geschrieben hat
    Code:
    SerWrite(x,5);
    sondern eher
    Code:
    SerWrite((unsigned char *)string,strlen(string));
    oder sehe ich das zu kompliziert ?
    Das ist jetzt aber auch ungetestet....

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13
    Ja aber warum bekomme ich denn bei manchen Tastern die richtigen Werte, bei manchen nicht. Da gibts ja auch ein Programm mit dem die myasuro.h für seinen Asuro einstellt, aber mit geänderten werten für die taster ging es genau so wenig.

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Der Code scheint ok zu sein, SerPrint() kenne ich allerdings nicht. Mir fällt eigentlich nur folgendes ein:
    Code:
    	unsigned char einer, zehner, huni;
    	char s[1]="x";
    
    	einer=x%10;
    	zehner=(x-einer)/10;
    	huni=(x-(zehner*10+einer))/100; // edit
    	s[0]=huni+'0';
    	//if (huni) s[0]=huni+'0' else s[0]=' ';
    	SerWrite(s,1);
    	s[0]=zehner+'0';
    	SerWrite(s,1);
    	s[0]=einer+'0';
    	SerWrite(s,1);
    	SerChar("\n\r",2);
    geht vielleicht noch einfacher, komm ich aber grad nicht drauf.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ja, sag erstmal, ob die Änderungen, die ich vorgeschlagen habe was gebracht haben

    EDIT:

    geht vielleicht noch einfacher, komm ich aber grad nicht drauf.
    Ja mit itoa
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    @izaseba:

    Weiß ich doch, das war die Anwort auf:

    ich denke es liegt irgendwie an dem itoa()...
    So gehts eben auch ohne itoa() (und damit auch ohne stdlib.h)

    Übrigens jetzt auch mit hunis für 8Bit-Werte..

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    @radbruch, achso, ja ok. irgendwie bin nicht ganz bei der Sache

    Übrigens strlen von oben braucht noch string.h und der cast war auch falsch, ich sag ja ich bin nicht bei der Sache.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 6 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •