Code:
	static uint8_t state = 0;
	
	// empfangenes Zeichen auslesen
	uint8_t buffer = UDR;
	
	switch (state) 
	{
		case 0:
			if (buffer == '<') 
			{
				state = 1;
			}
			else state = 0;
			break;
		
		case 1:	
			if (buffer == 'C') 
			{
				state = 2;
			}
			else state = 0;
			break;
		
		case 2:
			if (buffer == 'H') 
			{
				state = 3;
			}
			else state = 0;
			break;
		
			
		case 3:
			if (buffer == '1') 
			{
				state = 4;
			}
			else state = 0;
			break;
		
		case 4:	
			if (buffer == '>') 
					{	
					PORTD = 0b11011111; 
					PORTB = 0b11110111; 
				//	PORTB &= ~(1<<PB3);
				//	PORTB |= (1<<PB4);
				//	PORTD &= ~(1<<PD5);
					
					p_string = ch1;
					USR |= (1<<UDRE);
					}
					else state = 0;
					break;
				
		case 5:
			if (buffer == '2')
				{
				state = 5;
				}
				else state = 0;
				break;
		case 6:		
			if (buffer == '>') 
					{	
					PORTD = 0b11111111; 
					PORTB = 0b11101111; 
				//	PORTB |= (1<<PB3);
				//	PORTB &= ~(1<<PB4);
				//	PORTD |= (1<<PD5);
					
					p_string = ch2;
					USR |= (1<<UDRE);
					}
				else state = 0;
				break;
		default:
			state = 0;	
	}

In case 3 prüft er ja, ob 1 kommt, und wenn nicht, geht er auf 0 zurück. D.h. ich komme nie in case 4 rein.
in case 3 das else state=0 entfernen hat mich leider auch nicht weiter gebracht.

Wie kann ich ihm bei bringe, dass er sowohl nach einer 1 als auch nach einer 2 ausschau halten soll, und dem entsprechend weiter vorgehen soll?