Forum: Mikrocontroller und Digitale Elektronik String in integer umwandeln


von Pfeiffy (Gast)


Lesenswert?

Hallo,
ich möchte in der Interruproutine ein vom Uart empfangenen String (die 
Zahl 0 oder 1) in einen int umwandeln, dieser soll dann zur Ansteurung 
des ADC-Kanals verwendet werden.
Hier mein Code:
1
ISR(USART_RXC_vect)
2
{
3
  unsigned char nextChar;
4
  // Daten aus dem Puffer lesen
5
  nextChar = UDR;
6
  uart_string[uart_str_count] = nextChar;
7
  uart_str_count++;
8
  //Interrupt wirs so lange gelesen, bis ein "Z" kommt, dann wird er    verarbeitet
9
  if( nextChar =='Z')
10
  {
11
   channel= atoi(uart_string[1]); //-> hier bekomme ich immer 0 raus
12
   //channel= atoi("1"); //-> das funtioniert!
13
   send_char(uart_string[1]); //liefert 1
14
         sprintf (textx, "%u", channel);        
15
         send_string(textx);// liefert 0!
16
17
   uart_str_count=0;
18
    }
im uart_string[1] kommt die Zahl an, wird aber nicht richtig konvertiert 
- wende ich atoi falsch an?

Gruß
Pfeiffy

von trolldetektor version 42 (Gast)


Lesenswert?

Ist der String korrekt nullterminiert? Lass dir mal den String per RS232 
zurückschicken.

von trolldetektor version 42 (Gast)


Lesenswert?

Ne, Moment, das ist doch Unfug. atoi will einen String, du übergibst 
wohl ein char.

>channel= atoi(uart_string[1]);

von Stefan E. (sternst)


Lesenswert?

Pfeiffy schrieb:
> wende ich atoi falsch an?

Ja.
1
channel= atoi(&uart_string[1]);
Funktioniert aber nur, wenn nach der '1' keine weiteren Ziffern kommen.

von Dietrich L. (dietrichl)


Lesenswert?

Wenn Du nur 1 ASCII-Zeichen hast, brauchst Du nur 0x30 = '0' abziehen.

Gruß Dietrich

von DirkB (Gast)


Lesenswert?

Wenn es nur eine Ziffer ist, kannst du auch
1
channel = uart_string[1]-'0';
schreiben.

von Pfeiffy (Gast)


Lesenswert?

Hallo,
ok, vielen Dank! jetzt funktioniert es!

Gruß und Dank
Pfeiffy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.