- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: Komme mit P.Fleurys Uartlib nicht zurecht.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56

    Komme mit P.Fleurys Uartlib nicht zurecht.

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi!

    Ich möchte einen empfangenen String im µc auswerten, nur schaffe ich es einfach nicht. Laut Fleurys Angabe ist das Empfangene Zeichen ein "unsigned int" in diesem Fall die Variable "c". Jetzt würde ich "c" gerne mit strings vergleichen um eine Led leuchten zu lassen. Nur wie vergleiche ich ein unsigned int und einen String??

    Hier ist mein Code:

    Code:
    #define F_CPU 16000000
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/pgmspace.h>
    #include <util/delay.h>
    #include <avr/uart.h>
    
    #define UART_BAUD_RATE      19200
    
    unsigned int Empfangen(void);
    
    
    
    int main(void)
    {
    	DDRD = (1<<DDD5);
          
        uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
        
        sei();
        int i;
    	unsigned int c;
    	char d = "a";
        for(;;)
        {	
    		
    	_delay_ms(10);
    
    	c=Empfangen();			//Aufruf der Funktion Empfangen (steht nach der main-Funktion)
    
    	if (c==d)			//Abgleich von c und d, hier steckt der Wurm drin
    	 {
    		PORTD |= (1<<PD5);
    		for(i=0;i<100;i++)
    		{
    		_delay_ms(10);
    		}
    		PORTD &= ~(1<<PD5);	
    	 }
    
         }
    }
    
    unsigned int Empfangen(void)		//Uart Abfrage  und Rückgabe von c
    {   
    	unsigned int c;
    	
    	c = uart_getc();
            
    	return(c);
    }
    Gruß
    Charly

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wenn dein "string" eh nur aus einem Zeichen besteht, würd' ich das ganricht mit string machen
    Code:
    unsigned int d = 'a';      // EINFACHES HOCHKOMMA !!  
    ...
    
      if (c == d)  
     {
    
     }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hi!

    Danke erstmal! Es geht mir darum später aus einer empfangenen Zeichenfolge z.B. v120 (Vor mit geschwindigkeit 120) diese zu zerteilen und auszuwerten. Dazu müsste ich aber aus dem int ein string machen und das würde ich jetzt gerne mit einfachen Zeichenfolgen versuchen.
    Was mich an deiner Variante interessieren würde, warum kann ich in eine intVariable einen Char schreiben??

    gruß

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    36
    Beiträge
    674
    Was mich an deiner Variante interessieren würde, warum kann ich in eine intVariable einen Char schreiben??
    Ein char besteht aus 8Bit, ein int aus 16Bit. In einem char kannst du also Zahlen im Bereich von 0 bis 255 darstellen. Jedes Zeichen (z.B. 'A' oder 'r') ist einer Zahl in diesem Bereich zugeordnet. In ein int passen größere Zahlen, aber natürlich auch wieder alle aus einem char. Also kannst du die Zahl aus einem char in ein int schreiben. Ein int hat einen größeren Wertebereich als ein char.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hi!

    Danke! Das mit int und char ist mir mittlerweile klar...
    Nun noch eine Frage:
    Ich hab jetzt in der Variable c einen Integerwert z.B. 94 für 'a' und ich möchte ihn ohne casten in einen char wandeln. D.h. ich will kein 94 in der Charvariable stehen haben sondern ein "a". Hab schon nach Funktionen gesucht, die das machen, aber leider nichts gefunden. Kennt jemand von euch eine passende Fkt. dazu?

    Gruß
    Charly

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    36
    Beiträge
    674
    Hast du die Zahl selbst den verschiedenen Zeichen zugeordnet? Denn ein 'a' bestitzt nach ascii-Tabelle den Wert 97.

    D.h. ich will kein 94 in der Charvariable stehen haben sondern ein "a".
    Dazu wirst du auch keine Funktionen finden, weil es da nichts zum umwandeln gibt. Das 'a' ist quasi nur eine andere Repräsentation der ihr zugeordneten Zahl.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Um das erste Zeichen von "a" zu bekommen, kannst du schreiben

    char c = "a"[0];

    oder

    char * text = "a";
    char c = text[0];

    Ein String (Zeichenkette) ist ein Array von char-Werten. Allerdings bekommst du in C nie eine Zeichenkette, sondern immer nur ihre Anfangsadresse.
    Mit dem text[0] bekommst du das erste Element der Kette, also 'a'. Numerierung beginnt immer bei 0.

    Informatiker am Bahnhof:
    0...1...2 WO IST MEIN DRITTER KOFFER?!!!
    Disclaimer: none. Sue me.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hi!

    @Pascal
    Du hast natürlich recht, hab mich mit der Zahl vertan.

    @SprinterSB
    Ich möchte ja ein Array bekommen. Bin immer noch am Uart-zeichenempfangen und diese dann zusammenzusetzen. Ich nutze die lib von Peter Fleury und empfange statt z.B. des Zeichens a, dessen ascii-nummer als unassigned int. Möchte jetzt nicht die Asciinummer ins char schreiben, sondern das zugehörige Zeichen, um mit Stringfunktionen arbeiten zu können, denn diese Fkt. unterstützen leider kein cast.

    Kann mir jemand damit helfen?

    Gruß

Berechtigungen

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

LiFePO4 Speicher Test