- LiTime Speicher und Akkus         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: [ASURO] Eure Programme

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.02.2005
    Ort
    Wels
    Alter
    62
    Beiträge
    512
    Anzeige

    Powerstation Test
    Zitat Zitat von Proworx
    Auch wenn das eine ziemlich blöde Frage ist wie kann ich das ´.txt´entfernen?????
    einfach die datei umbenennen


    übrigens gibts keine blöden fragen, nur dumme antworten [-X
    mfg knacki

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo Proworx

    Vielleicht ist in deinem computer die datei.extensionen sichtbarkeit nicht eingeschaltet.

    Ich kenne die Deutsche worter nicht aber...hier eine mischung

    Ein 'Windows explorer' offnen, menu 'extra' oder 'optionen' offnen, selectieren 'folder options', tabulator 'wiedergabe', und 'extensionen fur bekannte dateitypen verbergen' ausschalten.

    Die datei finden, mahl linkermauseklicken, taste F2, '.txt' entfernen, Enter taste drucken.

    Gruss

    Henk

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Oder im Texteditor öffnen und neu speichern.

    MFG Moritz

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    30.12.2004
    Ort
    Oberösterreich/Linz
    Alter
    33
    Beiträge
    76
    danke für die tipps

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36

    Mein erstes Programm

    Hi Leutz,

    bin 1. neu hier, 2. eine elektronische NULL und 3. funzt mein ASURO nicht so ganz (dazu in einem anderen Thread mehr).

    Habe zum Testen (nachdem mir das mitgelieferte Testprg. nicht gefallen hat) ein eigenes Prog. geschrieben.

    Zuerst das Steuerprogramm für den PC (Console unter Windows):
    Code:
    //*****************************************************************************
    //*
    //*
    //*		ComDemo.cpp
    //*
    //*
    //*****************************************************************************
    //	
    //	Mit deisem Programm kann man eine Konsolenverbindung über die serielle 
    //	Schnittstelle mit einem Null-Modem-Kabel herstellen.
    //
    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    #include "ComTools.h"
    
    
    #define 	COM1		0
    #define 	COM2		1
    #define 	COM3		2
    #define 	COM4		3
    
    #define 	ESC			27
    
    
    //*****************************************************************************
    //*
    //*		main
    //*
    //*****************************************************************************
    int main(int argc, char* argv[])
    {
    	int		iLen,iKey,iWait;	
    	char	inBuffer[65];
    	char	outBuffer[65];
    	
    	ComInit();
    
    	if(!ComOpen(COM1,2400,P_NONE,S_1BIT,D_8BIT))
    	{
    		printf("\nKann die Schnittstelle nicht oeffnen !\n\n");
    		return -1;
    	}	
    
    	while(1)
    	{
    		if(kbhit())							// Wurde eine Taste gedrückt
    		{
    			iKey = getch();
    
    			if(iKey == ESC)
    				break;
    			
    			if(iKey != 'f' && iKey != 'r' && iKey != 'l' && iKey != 'x' && iKey != 'o'
    				  && iKey != 'k' && iKey != '+' && iKey != '-') // kein 1-Zeichen-Befehl
    			{
    				while(_kbhit());
    				outBuffer[0] = iKey;
    				outBuffer[1] = getch();								
    			}
    			else
    			{
    				outBuffer[0] = iKey;
    				outBuffer[1] = ' ';
    			}
    			printf("%c%c\n",outBuffer[0],outBuffer[1]);
    			ComWrite(COM1,outBuffer,2);			
    		}
    		memset(inBuffer,0,65);
    		iLen = ComRead(COM1,inBuffer,64);	// Zeichen einlesen
    		if(iLen > 0)
    		{
    			inBuffer[iLen] = '\0';
    			if(inBuffer[2] == 'f') // vordere Fototransistoren
    			{
    				int val_Links = (inBuffer[3] << 8) | inBuffer[4];
    				int val_Rechts = (inBuffer[5] << 8) | inBuffer[6];
    				printf("\nFoto L: %d  R: %d\n",val_Links, val_Rechts);
    			}
    			else if(inBuffer[2] == 'o') // Odometrie
    			{
    				int val_Links = (inBuffer[3] << 8) | inBuffer[4];
    				int val_Rechts = (inBuffer[5] << 8) | inBuffer[6];
    				printf("\nOdo L: %d  R: %d\n",val_Links, val_Rechts);
    			}
    			else if(inBuffer[2] == 'p') // Schalter
    			{
    				int value = inBuffer[3];
    				char ausgabe[7] = { '-','-','-','-','-','-','\0' };
    				if(value & 1)
    					ausgabe[5] = 'X';
    				if(value & 2)
    					ausgabe[4] = 'X';
    				if(value & 4)
    					ausgabe[3] = 'X';
    				if(value & 8)
    					ausgabe[2] = 'X';
    				if(value & 16)
    					ausgabe[1] = 'X';
    				if(value & 32)
    					ausgabe[0] = 'X';
    				printf("Schalter: %s\n",ausgabe);
    			}
    			else
    				printf("%s\n",&inBuffer[2]);
    		}
    		else
    		{
    			Sleep(50);						// Wenn keine Zeichen im Buffer sind dann warten
    		}
    	}		
    	
    	ComClose(COM1);
    	ComExit();
    
    return 0;
    }
    ..und das ASURO-Progrämmsche:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();	
    	StatusLED(GREEN);
    	unsigned char data[65];
    	unsigned char frontLED = 0;
    	unsigned int lD[2];
    	unsigned char send[12];
    	unsigned char speed = 200;
    	unsigned char Motors[2];
    	
    	while(1)
    	{
    		SerRead(data,2,0); // auf 2 Zeichen warten
    		switch(data[0])
    		{
    			case 's':	// StatusLED				
    				if(data[1] == 'g')
    				{
    					StatusLED(GREEN);
    					SerWrite("Set StatusLED to Green\0",23);
    				}
    				if(data[1] == 'r')
    				{
    					StatusLED(RED);
    					SerWrite("Set StatusLED to Red\0",21);
    				}
    				if(data[1] == 'y')
    				{
    					StatusLED(YELLOW);
    					SerWrite("Set StatusLED to Yellow\0",24);
    				}
    				if(data[1] == 'o')
    				{
    					StatusLED(OFF);
    					SerWrite("Set StatusLED Off\0",18);
    				}
    				break;
    			case 'l':	// Front-LED
    				if(frontLED == 0)
    				{
    					SerWrite("Set FrontLED On\0",16);
    					FrontLED(ON);
    				}
    				else
    				{
    					SerWrite("Set FrontLED Off\0",17);
    					FrontLED(OFF);
    				}
    				frontLED = !frontLED;
    				break;
    			case 'f':	// vorwärts
    				SerWrite("Set Motordirection FORWARD\0",27);				
    				MotorDir(FWD, FWD);
    				break;
    			case 'r':	// rückwärts
    				SerWrite("Set Motordirection REVERSE\0",27);				
    				MotorDir(RWD, RWD);
    				break;
    			case 'g':
    				speed = data[1];
    				break;
    			case '+':
    				if(speed < 255)
    					speed += 10;
    				if(Motors[0])
    					MotorSpeed(speed,0);
    				if(Motors[1])
    					MotorSpeed(0,speed);
    				break;
    			case '-':
    				if(speed > 0)
    					speed -= 10;
    				if(Motors[0])
    					MotorSpeed(speed,0);
    				if(Motors[1])
    					MotorSpeed(0,speed);
    				break;
    			case 'm':	// Motoren
    				if(data[1] == 'l')
    				{
    					SerWrite("Set left Motor\0",15);				
    					MotorSpeed(speed,0);
    					Motors[0] = 1;
    					Motors[1] = 0;
    				}
    				if(data[1] == 'r')
    				{
    					SerWrite("Set right Motor\0",16);				
    					MotorSpeed(0,speed);
    					Motors[0] = 0;
    					Motors[1] = 1;
    				}
    				if(data[1] == 'o')
    				{
    					SerWrite("Set Motors OFF\0",15);				
    					MotorSpeed(0,0);
    					Motors[0] = 0;
    					Motors[1] = 0;
    				}				
    				break;
    			case 'b':	// Rück-LED's
    				if(data[1] == 'l')
    				{
    					SerWrite("Set left BackLED ON\0",20);				
    					BackLED(ON,OFF);
    				}
    				if(data[1] == 'r')
    				{
    					SerWrite("Set right BackLED ON\0",21);				
    					BackLED(OFF,ON);
    				}
    				if(data[1] == 'o')
    				{
    					SerWrite("Set BackLEDs OFF\0",17);				
    					BackLED(OFF,OFF);
    				}
    				break;							
    			case 'k':
    				send[0] = 'p';
    				send[1] = PollSwitch();
    				send[5] = '\0';
    				SerWrite(send,3);
    				break;
    			case 'x':
    				// Zustände senden
    				LineData(lD); // Zustände der vorderen Fototransistoren holen
    				send[0] = 'f';
    				send[1] = lD[0] >> 8;		// HighByte
    				send[2] = lD[0] & 0xFF;	// LowByte
    				send[3] = lD[1] >> 8;		// HighByte
    				send[4] = lD[1] & 0xFF;	// LowByte
    				send[5] = '\0';
    				SerWrite(send,5);
    				break;
    			case 'o': // Odometriedaten
    				// Zustände senden
    				OdometrieData(lD); // Zustände der vorderen Fototransistoren holen
    				send[0] = 'o';
    				send[1] = lD[0] >> 8;		// HighByte
    				send[2] = lD[0] & 0xFF;	// LowByte
    				send[3] = lD[1] >> 8;		// HighByte
    				send[4] = lD[1] & 0xFF;	// LowByte
    				send[5] = '\0';
    				SerWrite(send,5);
    				break;
    		}		
    	}
    	StatusLED(RED);
    	while(1);
    	return 0;
    }
    Es werden auch noch die ComTools von http://members.inode.at/anton.zechner/az/Seriell.htm Anton Zechner benötigt (sind angehängt).

    Die Console reagiert auf folgende Tasten(kombinationen):
    f = MotorDir(FWD,FWD)
    l = FrontLED(ON/OFF) 'als Switch
    r = MotorDir(RWD,RWD)
    + = MotorSpeed(+10,+10)
    - = MotorSpeed(-10,-10)
    o = OdometrieData()
    x = LineData()
    k = PollSwitch()
    mo = MotorSpeed(0,0)
    ml = MotorSpeed(n,0)
    mr = MotorSpeed(0,n)
    bo = BackLED(OFF,OFF)
    bl = BackLED(ON,OFF)
    br = BackLED(OFF,ON)
    so = StatusLED(OFF)
    sr = StatusLED(RED)
    sy = StatusLED(YELLOW)
    sg = StatusLED(GREEN)

    Daher auch eine Frage: Wie regelt ihr eine abgestimmte Kommunikation zwischen Robbie & PC???

    Viel Spass damit (auch wenn's recht popelig ist)

    Banzai
    Angehängte Dateien Angehängte Dateien

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    09.02.2005
    Ort
    Erlangen
    Alter
    38
    Beiträge
    88

    "Discovery" Programm

    Hi,
    hab ein kleines Programm für asuro geschrieben. Asuro faährt erstmal grade aus, und wenn er anstösst fährt er erst rückwärts, dreht sich und fährt wieder geradeaus.
    Diesen Vorgang wiederholt er unendlich.
    Also ich weis das bis jetzt das Programm noch sehr simpel ist, habe aber vor es so weiterzuschreiben, dass wenn asuro wo steckenbleibt eine "Troubleshooting" Schleife einsetzt, die Asuro wieder befreit wenn er wo stecken bleibt.
    P.S.: Die Geschwindigkeiten sind für meinen Bot eingestellt. Eventuell muss man diese verändern.
    Angehängte Dateien Angehängte Dateien

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    24.03.2005
    Beiträge
    5
    Hallo Freunde,

    ich bin neu hier und habe mich mit dem Kauf des ASURO's jetzt zum ersten Mal an einen Robi gewagt. Meine C-Kenntnisse sind noch recht beschränkt, aber um das zu ändern hab ich den kleinen auch gekauft.
    Mein erstes Problem war das Auslesen der Schalter durch PollSwitch().
    Am Anfang war der Wert den ich bekam noch sehr unzuverlässig.
    Ich habe mir jetzt damit beholfen die Funktion mehrmals hintereinander aufzurufen und zwischendrin Pausen mit Sleep() einzubauen. Geht das vielleicht etwas eleganter? Oder hat mein ADC etwa noch Probleme? Tritt dieses Phänomen bei euch auch auf?

    Vielen Dank im Vorraus für die Hilfe,
    Chrispyy

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    01.12.2004
    Ort
    Buxtehude
    Beiträge
    70
    Hallo Chrispyy,
    hier sind schon einige Male Probleme mit PollSwitch() gemeldet worden.
    Bitte prüf doch mal die Funktion mit vollen Akkus/Batterien und abgeschalteten Motoren. Wenn jetzt auch falsche Werte ermittelt werden liegt warscheinlich ein kleiner Hardwarefehler vor.
    Bitte verfolge auch den Thread " erweiterte ASURO Billiothek".
    Gruß
    Weja

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also es kann ganz einfach auch mit den verwendeten Widerständen zusammenhängen. Bei mir habe ich bei einem Switch auch manchmal einen falschen Wert. Du könntest natürlich die Bibiliothek weglassen und die funktionen selber schreiben, dann könntest du die Funktion anpassen.

    MFG Moritz

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    24.03.2005
    Beiträge
    5
    Ich denke ich habe die Erklärung für das Problem selber gefunden.
    Wenn ich die Motoren nicht einschalte funktioniert das Auslesen ganz gut.
    Nach einschalten (und gerade beim einschalten) treten Fehler auf.
    ASURO hat wie ich festgestellt habe leider keine Spgsstabilisierung und da durch sinkende Betriebsspg (Motoren) leider auch der Wert im Speicher (C7) absinkt bekommt der ADC evtl. einen falschen Wert.

    Naja ... durch erneuern der Batterien tritt der Effekt seltener auf.
    Mal schauen ob ich irgendwie ne Spgsstabilisierung zwischen Batterien und ASURO bauen kann.

    MfG
    Chris

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus