- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 22

Thema: Asuro Fototransistor test funktioniert nicht!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    ich hab mal ne frage wie kann ich die phototransistoren so programmieren dass beide gleichzeitig weiß und schwarz unterscheiden? geht des überhaupt? also ich will ein programm schreiben dass wenn der boden weiß ist eine bestimmte aktion ausgeführt wird und wenn er schwarz ist etwas anderes gemacht wird. er soll dann im prinziep einen schwarzen punkt auf einer großen fläche finden ist das möglich oder soll ich dafür eine abdunkeln und die andere hell lassen oder so?
    gibt es auch eine möglichkeit dass der asuro den schwarzen gegenstand findet un dann einer schwarzen linie folgt um ihn irgendwo hin zu bringen?hat jemand n lösungsvorschlag?
    Geändert von maikel510 (05.05.2012 um 13:24 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.713
    Zitat Zitat von maikel510 Beitrag anzeigen
    ... phototransistoren so programmieren dass beide gleichzeitig weiß und schwarz unterscheiden ...
    Das geht im Prinzip. Du hast diese beiden Phototransistoren an den Eingängen PC2 und PC3 also an ADC2 und ADC3 angeschlossen. Nun kannst Du bei geeigneter Programmierung bzw. Initialisierung der ADCs die aktuelle Spannung an diesen Eingängen abfragen, entweder im Wert 0 ... 255 (8 bittig) oder 0 ... 1023 (10 bittig).

    Die Helligkeitsunterscheidung liefe dann so ungefähr (hier die Werte NUR als Beispiel für 8 Bit):
    0 bis 100 <=> schwarz (bzw. dunkel)
    150 bis 255 <=> weiß (bzw. hell)

    Der SFH300 ist über den für unser Auge sichtbaren Wellenbereich des Lichtes empfindlich, damit sollte die Unterscheidung schon gut gehen.

    Viel Erfolg
    Ciao sagt der JoeamBerg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    okay dann bin ich schonmal erleichtert dass meine idee möglich ist =D wie müsst ich des dann in nem programm schreiben? also halt dass beide zB einen wert zw 150-255 haben? ich hab schonmal angefangen:

    #include <asuro.h>
    #include <myasuro.h>

    int main (void)
    {

    unsigned int data [2]
    Init();
    FrontLED(ON);
    LineData(data);
    if(
    {

    }




    }

    ich weis jetzt aber nicht was ich nach if schreiben soll
    ich bin ned wirklich gut im programmieren des ist das problem xD

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    okay also ich hab jetzt mal n programm geschrieben aber ich hab da n paar probleme also ich wollt dass mein asuro an der wand entlang fährt und in einer art wohnung also auch mit mehreren zimmern einen gegenstand sucht.
    ich hab jez mithilfe von internet und beispielprogramme ein eigenes programm geschrieben aber er tut ned ganz was er soll...
    ich hab mir des so gedacht:
    wenn der boden weiß ist soll er einen bogen fahren, damit er mit dem taster rechts außen an der wand anstößt. dann dreht er sich ein stück auf der stelle um von der wand weg zu kommen und fährt wieder einen bogen bis zur wand sollte er sich mal zu weit drehen warum auch immer und stößt mit dem linken taster an der wand an dreht er sich wieder so dass er richtig rum steht. sobal der boden unter ihm schwarz wird oder er einen schwarzen gegenstand erreicht bleibt er stehen. dann sollen die backleds blinken und die statusled wechselt mehrfach die farbe (grün-gelb-grün-gelb...). und anschliesend könnte er noch über eine schwarze linie wieder nach draußen finden.

    mein programm funktioniert allerdings nicht wirklich. wenn ich den asuro einschalte dann bleibt er stehen die vordere led leuchtet die backled rechts hinten leuchtet ebenfalls und die statusled leuchtet gelb. ich weis nicht woran es liegt

    hier das programm:

    Code:
    #include <asuro.h>
    #include <myasuro.h>
    
    int main (void)
    {
    
    int anzahlwiederholungen=0, i=6;
    int ldata[2];
    
    
    unsigned int data[2]
    ;unsigned char t1, t2;      <- ich weis nicht warum aber ohne das ";" am anfang wurde mir ein error angezeigt
    
    Init();
    FrontLED(ON);
    LineData(ldata);
    
    
    if(ldata[0]>125,ldata[1]>125)
    	{     
    
      while (1)
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
        if (t1 == 0 && t2 == 0)         /* keine Taste */
        {
          MotorDir(FWD,FWD);          /* Rechtsbogen fahren */
    	  MotorSpeed(150,120);
         /* FrontLED(ON);
          BackLED(OFF,OFF);*/
    
        }
        else if (t1 && t2 && t1 == t2)
        {
          MotorDir(BREAK,BREAK);
          if (t1 & 0x07) /* Tasten links gedrückt? */
          {
            MotorDir(RWD,RWD);       /* auf der Stelle umdrehen */
            MotorSpeed(150,150);
    		
    		/*FrontLED(OFF);
            BackLED(ON,OFF);*/
          }
          if (t1 & 0x38 ) /* Tasten rechts gedrückt? */
          {
            MotorDir(FWD,FWD);       /* Vorwärts Linkskurve */
           	MotorSpeed(100,150);
    		
    	   /* FrontLED(OFF);
            BackLED(OFF,ON);*/
          }
          Msleep(1000);        /* 1 Sekunde fahren */
        }
    
    
    
    	}
    	
    	}
    
    
    else if(ldata[0]<125,ldata[1]<125)
    
    	{
    
    
    	while (anzahlwiederholungen<i)
    		{
    		MotorDir(BREAK,BREAK);
    		MotorSpeed(BREAK,BREAK);
    		StatusLED(GREEN);
    		BackLED(ON,OFF);
    		StatusLED(YELLOW);
    		BackLED(OFF,ON);
    		anzahlwiederholungen++;
    		}
    	
    	}
    	else if(ldata[0]>ldata[1])
    
    	{
    	
    	MotorDir(FWD,FWD);
    	MotorSpeed(175,125);
    	
    	}
    		
    	else if(ldata[0]<ldata[1])
    	
    	{
    	
    	MotorDir(FWD,FWD);
    	MotorSpeed(125,175);
    	
    	}
    
    return 0;
    }

    weis jemand wo der fehler liegen könnte? ich komm irgendwie nicht weiter...
    Geändert von radbruch (05.05.2012 um 20:17 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Was meinst die mit diese If abfrage?

    Code:
    if(ldata[0]>125,ldata[1]>125)
    Versuch dich deine Code so zu schreiben, mit weitere tiefe einsprungen (Tab-Taste) bei jedes neue {} Code-block:

    Code:
    #include <asuro.h>
     #include <myasuro.h>
    
     int main (void)
     {
    
        int anzahlwiederholungen=0, i=6;
        int ldata[2];
    
    
        unsigned int data[2];
        unsigned char t1, t2; <- ich weis nicht warum aber ohne das ";" am anfang wurde mir ein error angezeigt
    
        Init();
        FrontLED(ON);
        LineData(ldata);
    
    
        if(ldata[0]>125,ldata[1]>125)
        { 
            while (1)
            {
                t1 = PollSwitch();
                t2 = PollSwitch();
                if (t1 == 0 && t2 == 0) /* keine Taste */
                {
                    MotorDir(FWD,FWD); /* Rechtsbogen fahren */
                    MotorSpeed(150,120);
                    /* FrontLED(ON);
                    BackLED(OFF,OFF);*/
    
                }
                else if (t1 && t2 && t1 == t2)
                {
                    MotorDir(BREAK,BREAK);
                    if (t1 & 0x07) /* Tasten links gedrückt? */
                    {
                        MotorDir(RWD,RWD); /* auf der Stelle umdrehen */
                        MotorSpeed(150,150);
    
                        /*FrontLED(OFF);
                        BackLED(ON,OFF);*/
                    }
                    if (t1 & 0x38 ) /* Tasten rechts gedrückt? */
                    {
                        MotorDir(FWD,FWD); /* Vorwärts Linkskurve */
                        MotorSpeed(100,150);
    
                        /* FrontLED(OFF);
                        BackLED(OFF,ON);*/
                    }
                    Msleep(1000); /* 1 Sekunde fahren */
                }
            }
    
        }
        else if(ldata[0]<125,ldata[1]<125)
        {
            while (anzahlwiederholungen<i)
            {
                MotorDir(BREAK,BREAK);
                MotorSpeed(BREAK,BREAK);
                StatusLED(GREEN);
                BackLED(ON,OFF);
                StatusLED(YELLOW);
                BackLED(OFF,ON);
                anzahlwiederholungen++;
            }
    
        }
        else if(ldata[0]>ldata[1])
        {
            MotorDir(FWD,FWD);
            MotorSpeed(175,125);
        }
        else if(ldata[0]<ldata[1])
        {
            MotorDir(FWD,FWD);
            MotorSpeed(125,175);
    
        }
    
        return 0;
     }
    Das macht deine Code viel übersichtlicher.

  6. #6
    Neuer Benutzer Öfters hier Avatar von BerndJM
    Registriert seit
    17.03.2012
    Ort
    Neckarmühlbach
    Alter
    66
    Beiträge
    21
    Hi,

    unsigned int data[2]
    ;unsigned char t1, t2; <- ich weis nicht warum aber ohne das ";" am anfang wurde mir ein error angezeigt
    Ist klar, das ist das fehlende ; am Ende der oberen Zeile.
    Code:
    unsigned int data[2];
    unsigned char t1, t2;
    Die eine if Abfrage hat ja Valen schon nachgefragt - das gleiche Fragezeichen ergibt sich bei dem dazugehörigen else if Zweig.

    Dieses
    Code:
    else if (t1 && t2 && t1 == t2)
    erschließt sich mir auch nicht wirklich ...

    Damit
    Code:
    MotorDir(RWD,RWD); /* auf der Stelle umdrehen */
    MotorSpeed(150,150);
    dreht er nicht auf der Stelle um sondern fährt einfach rückwärts.

    Soweit erstmal. Ich würde das ganze erstmal in kleinen Stückchen probieren - also die einzelnen erwünschten Abläufe einzeln testen und mich erst dann, wenn sie funktionieren an die ganze ver"if"zerei machen.

    Grüßle Bernd
    Theoretisch gibt es keinen Unterschied zwischen Theorie und Praxis ...

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    ja also mein problem war dass ich das programm wie ihr auch gesagt habt in einem schritt geschrieben habe und es nicht in kleine schritte unterteilt habe. deshalb habe ich neu angefangen. ich will nun zuerst ein programm schreiben, bei dem er sobald ein taster gedrückt ist, ein stückchen rückwärts fährt und sich dreht. danach fährt er wieder ein bisschen vorwärts und kommt dann auf eine art kreisbahn dann wird wieder ein taster gedrückt und es fängt von neuem an. damit möchte ich ihn an einer wand entlang fahren lassen.

    Code:
    #include <asuro.h>
    #include <myasuro.h>
    
    
    int rwd(int a, int b)
    	{
    
    	MotorDir(RWD,RWD);
    	MotorSpeed(130,100);
    	Msleep(1000);
    
    	}
    
    int main (void)
    {
    unsigned char taste;
    unsigned char pollswitch;
    
    Init (); 
    
    
    taste = PollSwitch ();
    
    	if(taste>0)
    	{
    	rwd;
    	}
    
    		else
    		{
    
    		MotorDir(FWD,FWD);
    		MotorSpeed(100,100);
    		Msleep(500);
    		MotorDir(FWD,FWD);
    		MotorSpeed(130,100);
    		
    		}
    return 0;
    }
    so sieht mein programm bis jetzt aus aber irgendwie will er weiterhin gerade aus fahren auch wenn ein taster gedrückt ist weis jemand woran das liegen könnte?

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 06.02.2010, 20:29
  2. Antworten: 4
    Letzter Beitrag: 29.09.2009, 17:13
  3. test.c funktioniert nicht
    Von newbie978 im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 27.12.2008, 23:42
  4. Fototransistor T9 funktioniert nicht
    Von mashine-obf im Forum Asuro
    Antworten: 19
    Letzter Beitrag: 18.01.2008, 09:22
  5. Antworten: 7
    Letzter Beitrag: 25.01.2007, 13:00

Berechtigungen

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

Labornetzteil AliExpress