einfach die datei umbenennen ;-)Zitat:
Zitat von Proworx
übrigens gibts keine blöden fragen, nur dumme antworten [-X
mfg knacki
Druckbare Version
einfach die datei umbenennen ;-)Zitat:
Zitat von Proworx
übrigens gibts keine blöden fragen, nur dumme antworten [-X
mfg knacki
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
Oder im Texteditor öffnen und neu speichern.
MFG Moritz
danke für die tipps
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):
..und das ASURO-Progrämmsche: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;
}
Es werden auch noch die ComTools von http://members.inode.at/anton.zechner/az/Seriell.htm Anton Zechner benötigt (sind angehängt).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;
}
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
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.
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
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
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
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