- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: Asuro: SerRead() soll Array füllen....

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2005
    Beiträge
    16

    Asuro: SerRead() soll Array füllen....

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute

    Ich möchte meinen Asuro als Plotter verwenden. Ich kann ihn bereits einfach über Infrarot einen Schritt nach vorn, links oder rechts machen lassen. Dazu sende ich ihm einfach mit einem kleinen DOS Programm die Zahlen 10, 20 oder 30. Das funktioniert.
    Nun möchte ich ihm auf einmal ein ganzes Muster senden, so dass der IR Kontakt nicht immer gegeben sein muss. Dazu sende ich zuerst 100, dann weiss er, dass noch mehr kommt. Anschliessend kommt die Anzahl der noch zu empfangen Informationen. Diese sollten immer zuerst die Art des Befehls (vorwärts, links, rechts) sein und anschliessend die Anzahl Schritte in die jeweilige Richtung. Hier ein Beispiel:

    100 // Nicht ein Befehl nach dem andern, sondern ein ganzes Muster
    4 // Vier Informationen zu erwarten
    10 // gerade aus
    4 // und zwar vier Schritte
    20 // nach links
    2 // und zwar 2 Schritte

    Diese Infos werden hintereinander gesendet und der Asuro sollte sie in ein Array schreiben. Dazu verwende ich die standart SerRead(), da man meiner Meinung nach für String und Array dasselbe verwenden kann. Die Übergabe mit der Anzahl der Infos funktioniert, die Schleife wird in der richtigen Anzahl durchlaufen, aber ich glaube, dass das Array nur mit Mist gefüllt wird...
    Kann mir jemand sagen wo das Problem liegt...


    Code:
    int main(void)
    {
    	char zaehler,c,draw[100];
    	int x;
    	
    	Init();
    	
    	
       	while(1)
       	{
    	   
    	   SerRead(&c,1,0);
    	   switch (c)
    	   {
    		// check
    	   	case 70:
    		{
    			SerWrite(70,1);
    			break;
    		}
    		
    		// Fahren
    		case 10:
    		{
    			Forward(1);
    			break;
    		}
    		case 20:
    		{
    			Left(1);
    			break;
    		}
    		case 30:
    		{
    			Right(1);
    			break;
    		}
    		
    		// Servo
    		case 40 :
    		{
    			chalk(40);
    			break;
    		}
    		case 50:
    		{
    			chalk(50);
    			break;
    		}
    		case 60:
    		{
    			chalk(60);
    			break;
    		}
    		case 70:
    		{
    			//änderungen
    		}
    		
    		case 100: // Problemfall !!
    		{
    			SerRead(&zaehler,1,0);
    			
    			SerRead(draw,zaehler,0);
    			
    			for(x=0;x<zaehler;x++)
    			{
    				if (draw[zaehler]==10)
    				{
    					Forward(draw[++x]);
    				}
    				else if (draw[zaehler]==20)
    				{
    					Left(draw[++x]);
    				}
    				else if (draw[zaehler]==30)
    				{
    					Right(draw[++x]);
    				}
    			}
    		}
    	   }
    	
    	}     
    	return 0;
    }
    Forward(x), Left(x) und Right(x) fahren/drehen einfach x Schritte.

    Ich bin mir zimlich sicher, dass es etwas dämlisches ist, aber ich habe es vergebens versucht und wäre für jede Hilfe dankbar
    Gruss
    Illuminon

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.07.2005
    Ort
    Ehningen
    Alter
    50
    Beiträge
    35
    Hei Illuminon,

    müsste es nicht heißen:
    Code:
             for(x=0;x<zaehler;x++) 
             { 
                if (draw[x]==10) 
                { 
                   Forward(draw[++x]); 
                } 
                else if (draw[x]==20) 
                { 
                   Left(draw[++x]); 
                } 
                else if (draw[x]]==30) 
                { 
                   Right(draw[++x]); 
                } 
             }
    Sonst fragst du immer ab, was im ersten char hinter deinem Feld steht.

    Gruß Rakke

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2005
    Beiträge
    16
    was für ein dämlicher Fehler! Natürlich funktioniert es so....
    aber manchmal sieht man vor lauter Bäumen den Wald nicht mehr

    Vielen Dank Rakke!

Berechtigungen

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

Labornetzteil AliExpress