Archiv verlassen und diese Seite im Standarddesign anzeigen : [ASURO] Eure Programme
Ich würd mal gern sehen, was ihr euch für euren ASURO so für Programme geschrieben habt. Ich bastel zur Zeit an diesem hier:
#include "asuro.h"
int main(void)
{
Init();
unsigned int crash;
unsigned int i;
i = 0;
crash = 0;
while(1)
{
if(PollSwitch() != 0)
{
crash = 1;
MotorSpeed(0, 0);
StatusLED(YELLOW);
}
if(crash == 1)
{
StatusLED(RED);
while(i < 10)
{
MotorDir(RWD, RWD);
MotorSpeed(100, 100);
i++;
}
i = 0;
while(i < 10)
{
MotorDir(FWD, RWD);
MotorSpeed(100, 100);
i++;
}
crash = 0;
}
else
{
MotorSpeed(150, 150);
MotorDir(FWD, FWD);
StatusLED(GREEN);
}
}
return 0;
}
Wobei das nicht so läuft wie es sollte. Ich möchte, dass wenn mein ASURO irgendwo gegenfährt, ca. 1-2 Sekunden rückwärts fährt, sich dann ein wenig dreht und dann wieder vorwärts. Und das dann immer so, wenn er irgendwo gegenfährt. Nur habe ich das Problem, dass er sich nur dann dreht, wenn PollSwitch() ungleich 0 ist, also wenn einer der Sensoren gedrückt ist.
Also wie schon geschrieben habe ich mich mit Sonics Hilfe mal dran gesetzt und die Funktionen in Bascom geschrieben. Das gibts alles hier zum Downloaden mit einer Beschreibung aller Funktionen:
Zur Seite (http://www.free-webspace.biz/update/)
Oder halt hier das ganze Script:
'************************************************* *************
'****** Der Versuch Asuro in Bascom zu übersetzen ;-) ******
'****** Von: RCO ******
'****** Mit Hilfe von Sonic und natürlich der Asuro.c ******
'************************************************* *************
'********* www.Roboternetz.de **********
'************************************************* *************
'Integrierte Funktionen:
'Motordir(x,x) x: Fwd, Rwd, Break, Free
'Motorspeed(x,x) x: 0-255
'Backled(x,x) x: An, Aus
'Statusled(x) x: Aus, Green, Red, Yellow
'Frontled(x) x: An, Aus
'Odometrie() Ausgabe in Odoright;Odoleft(word)
'Linidata() Ausgabe in Lineright;lineleft(word) (da data reserviert)
'Pollswitch() :ist selbst die Variable(byte)
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400
On Int1 Int1_int
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Enable Interrupts
Start Adc
Enable Adc
Enable Int1
Config Int1 = Falling
Declare Sub Motordir(byval Mldir As Byte , Byval Mrdir As Byte)
Declare Sub Motorspeed(byval Mlspeed As Byte , Byval Mrspeed As Byte)
Declare Sub Backled(byval Led1 As Byte , Byval Led2 As Byte)
Declare Sub Frontled(byval Led1 As Byte)
Declare Sub Statusled(byval Color As Byte)
Declare Sub Odometrie()
Declare Sub Linedata()
Declare Function Pollswitch() As Byte
'-----------Motoren-------------------
Const Fwd = 1
Const Rwd = 2
Const Free = 3
Const Brake = 4
'Motor Rechts
Config Pinb.1 = Output
Config Pind.4 = Output
Config Pind.5 = Output
'Motor Links
Config Pinb.2 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
'----------Led------------------------
Const Aus = 0
Const Red = 1
Const Green = 2
Const Yellow = 3
Const An = 1
'FrontLED (Odometrie)
Config Pind.6 = Output
' ****** !!! ACHTUNG !!! *******BACKLEDs***********************************
Config Pinc.0 = Output 'Rechts
Config Pinc.1 = Output 'Links
' Die BackLEDs können nicht genutzt werden wenn die Odometrie benutzt wird.
' --> BackLEDs pinc.0 und pinc.1 als Ausgang definieren
' --> Odometrie pinc.0 und pinc.1 als Eingang bzw. ADC definieren
' ****** !!! ACHTUNG !!! **************************************************
'StatusLED
Config Pind.2 = Output 'Rot?
Config Pinb.0 = Output 'Grün?
'----------Odometrie-------------------
Dim Odoright As Word 'data geht nciht, da expression
Dim Odoleft As Word
Config Pinc.2 = Input
Config Pinc.3 = Input
'----------Line-------------------
Dim Lineright As Word
Dim Lineleft As Word
'Config Pinc.0 = Input 'Nur aktivieren wenn Backleds aus
'Config Pinc.1 = Input
'-----------Pollswitch-----------
Config Pind.3 = Input
Portd.3 = 0 'für den Interrupt
Config Pinc.4 = Input
Portc.4 = 0
Dim Poll As Byte
'################################################# #########################
'############################### Main #####################################
'################################################# #########################
Do
Loop
End
'################################################# #########################
'############################### Ende #####################################
'################################################# #########################
'--------Subs-------------------------
Sub Motorspeed(byval Mlspeed As Byte , Byval Mrspeed As Byte)
Pwm1a = Mlspeed
Pwm1b = Mrspeed
End Sub
Sub Frontled(byval Led1 As Byte)
Portd.6 = Led1
End Sub
Sub Motordir(byval Mldir As Byte , Byval Mrdir As Byte)
If Mldir = 1 Then 'FWD
Portd.4 = 0
Portd.5 = 1
Elseif Mldir = 2 Then 'RWD
Portd.4 = 1
Portd.5 = 0
Elseif Mldir = 3 Then 'FREE
Portd.4 = 0
Portd.5 = 0
Elseif Mldir = 4 Then 'BRAKE
Portd.4 = 1
Portd.5 = 1
End If
'-----------------
If Mrdir = 1 Then 'FWD
Portb.4 = 0
Portb.5 = 1
Elseif Mrdir = 2 Then 'RWD
Portb.4 = 1
Portb.5 = 0
Elseif Mrdir = 3 Then 'FREE
Portb.4 = 0
Portb.5 = 0
Elseif Mrdir = 4 Then 'BRAKE
Portb.4 = 1
Portb.5 = 1
End If
End Sub
Sub Backled(byval Led1 As Byte , Byval Led2 As Byte)
Portc.1 = Led1
Portc.0 = Led2
End Sub
Sub Statusled(byval Color As Byte)
If Color = 0 Then 'Aus
Portd.2 = 0
Portb.0 = 0
Elseif Color = 1 Then 'ROT?
Portd.2 = 1
Portb.0 = 0
Elseif Color = 2 Then 'Green ?
Portd.2 = 0
Portb.0 = 1
Elseif Color = 3 Then 'Yellow
Portd.2 = 1
Portb.0 = 1
End If
End Sub
Sub Linedata()
Lineright = Getadc(2)
Lineleft = Getadc(3)
End Sub
Sub Odometrie()
Odoright = Getadc(0)
Odoleft = Getadc(1)
End Sub
Function Pollswitch() As Byte
Dim Erg2 As Long
Dim Erg1 As Word
Portd.3 = 1
Erg1 = Getadc(4)
Erg2 = 10240000 / Erg1
Erg2 = Erg2 - 10000
Erg2 = Erg2 * 63
Erg2 = Erg2 + 5000
Erg2 = Erg2 / 10000
Pollswitch = Erg2
Portd.3 = 0
End Function
Int1_int:
'Platz fpr Routine, z.B. Aufruf von Pollswitch()
Return
MFG Moritz
bergowitch
03.01.2005, 08:15
Das ist wirklich sehr schön und vereinfacht das Leben ungemein.
Ich habe mal ein wenig gespielt. Ich möchte gerne Eure Treiber auslagern und mit :
$include "Asu_Basc2_h.bas"
und
$include "Asu_Basc2_c.bas"
die Anteile vor bzw nach der dem eigentlichen Hauptprogramm einbinden.
Wenn ich das aber mache bekomme ich diverse Fehlermeldungen, die nicht erscheinen, wenn ich alles in einem File lasse.
Kann mir das jemand erklären?
Gruß Stefan
Sorry, da kann ich dir auch nicht helfen, ich wollte eigentlich das selbe machen, habe mihc aber noch nicht damit beschäftigt, wie man Code auslagern kann.
Vielleicht einfach mal einen neuen Thread dazu aufmachen. :mrgreen:
MFG moritz
bergowitch
05.01.2005, 18:51
Ich habs,
man muss nur die ersten initialisierungsdaten (mit dem "$" davor im Hauptfile haben - dann gehts
yjeanrenaud
26.01.2005, 21:04
Ich habs,
man muss nur die ersten initialisierungsdaten (mit dem "$" davor im Hauptfile haben - dann gehts
du meinst das $include <>? natürlich muss das im Hauptfile sein, weil du compilierst ja das Hauptfile ;-)
ansonsten, schau mal in google nach "C in 21 days" da lernst du bestimmt schnell und viel
Hallo!!
Ich arbeite grade an einer extra datei die das programmieren in c mit bisher 3 funktionen vereinfacht:
-MotorSpeed wird zu Speed und muss nun in prozent angegeben werden(individuell einstellbar auf eigenen roboter rechts-links-verhältnis....)
-Blinken aller LEDs mit angaben des zeitintervalls in 10tel sekunden
- unsd die dafür nötige funktion die sleep benutzt um einen timer in 10tel sekunden einzubauen.
/************************************************** **********
*
* Dateiname: eigen.h
* Projekt : ASURO
*
*
* Ver. Date Author Comments
* ------- ---------- -------------- ------------------------------
* 1.00 27.01.2005 build
*
************************************************** **********/
/************************************************** *********
*
* Dieses Program ist frei verwendbar für jegliche Zwecke. man darf es verändern und/oder * duplizieren. Ich übernehme keine Haftung für eventuelle Schäden durch diese Datei.
*
************************************************** **********/
//Sleep mit eingabe in 10tel sekunden!
//-----------------------------------------------------
void Wait(unsigned int sek);
void Wait(unsigned int sek){
unsigned int i;
unsigned int x;
for(i=0; i<sek;i++){
for(x=0;x<36;x++){
Sleep(200);
}
}
}
//-----------------------------------------------------
/*Blinken aller LEDs in rot */
//-------------------------------------------------
void Blinken(int i);
void Blinken(int i){
StatusLED(RED);
FrontLED(ON);
BackLED(ON,ON);
Wait(i);
StatusLED(OFF);
FrontLED(OFF);
BackLED(OFF,OFF);
Wait(i);
}
//---------------------------------------------------
/*MotorSpeed=Speed ( jetzt mit prozent angabe!)*/
//----------------------------------------------------
void Speed(int x, int y);
void Speed(int x, int y){
unsigned char left,right;
if (((x*255)/100)>255){Blinken(10);}
if (((x*251)/100)>251){Blinken(20);}
left=(x*255)/100;
right=(y*251)/100;
MotorSpeed (left,right);
}
//-----------------------------------------------------/
Arexx-Henk
14.02.2005, 19:57
Hallo Robotiker,
Ich hab mich ein bischen verliebt in die Asuro und seinem Atmega chip. Ich mochte mahl genau verstehen wass da alles in die Atmega chip hervor geht. Mann ist das ein menge Arbeit!
Ich hab mich jetzt mahl auf die InfraRot empfanger geworfen (mit hilfe von die Asuro.c Datei) und mahl ein einfaches Asuro steurung program geschrieben.
Vielleicht habt Ihr schon manchmal dasselbe gemacht. Ich mochte's nur zeigen.
Mit Hyperterminal kan mann Asuro mittels die pfeilen-tasten lenken.
(immer die '.txt' entfernen)
Gruss,
Henk
Simpel und trotzdem lustig, macht echjt Spaß ;-)
MFG Moritz
Auch wenn das eine ziemlich blöde Frage ist wie kann ich das ´.txt´entfernen?????
Alter Knacker
27.02.2005, 12:00
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
Arexx-Henk
27.02.2005, 13:22
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
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):
//************************************************** ***************************
//*
//*
//* 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:
#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
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.
chrispyy
24.03.2005, 12:19
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
chrispyy
24.03.2005, 18:32
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
chrispyy
24.03.2005, 18:40
Ohh sehe grad die Antwort von Weja.
Dann liege ich wohl gar nicht so falsch mit meiner Vermutung.
Evtl langt schon eine Diode vor R23 um Abhilfe zu schaffen und die Batterien länger nutzen zu können.
Hat jemand von Euch schon ein funktionierendes Programm mit Auswertung der Odometrie?
Ich bin noch etwas ratlos wie ich die OdometrieDaten sinnvoll verwende. Für einen kleinen Denkanstoss wäre ich sehr dankbar.
MfG
Chris
Hallo Chris,
wegen der Odometrie Sache siehe mal unter:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=7571
Wie Du die Tasten auch bei eingeschalteten Motoren und schwachen Batterien korrek ausliet kommt da auch, aber teste erstmal die Odometrie Funktion.
Gruß, Weja
Hi Leutz,
haben wohl viele Leute, wie auch ich, die Idee von nem ASURO der rumfährt und bei Bedarf zurücksetzt und in einer anderen Richtung weiter fährt.
Habs mal probiert und das ist raus gekommen:
/* fahren(Kai) */
/* langsam fahren, irgendwo anstoßen, schnell zurücksetzen, 90°drehen, weiterfahren */
/* 02.08.2005 vom Kai */
#include "asuro.h"
int main(void){
int i;
Init();
while(1){
if(PollSwitch()>0){ /* falls taster gedrückt --> */
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD); /* fahre rückwärts -->*/
MotorSpeed(200,200);
for(i=0;i<=270;i++){ /* --> für diese wilkürliche zeitspanne */
Sleep(255);
if(i==270){ /* ist die zeit abgegelaufen--> */
StatusLED(YELLOW);
MotorDir(RWD,FWD); /* --> dreh linksherum --> */
MotorSpeed(152,150);
for(i=0;i<=120;i++){ /* --> für diese wilkürliche zeitspanne */
Sleep(255);
}
}
}
}
else{ /* falls kein taster gedrückt --> */
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD); /* fahre vorwärts */
MotorSpeed(150,150);
}
}
return 0;
}
und weil mir das noch nicht gereicht hat, hab ich mal versucht das noch ein bißchen schöner zu machen:
/* fahrenfeiner2 */
#include "asuro.h"
int main(void){
int j,i;
Init();
while(1){
if(PollSwitch() > 0 && PollSwitch() < 8){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,202);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(ON,OFF);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
}
}
}
else if(PollSwitch() > 7 && PollSwitch() < 60 && PollSwitch() != 12 && PollSwitch() != 18 && PollSwitch() != 30){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,202);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(OFF,ON);
MotorDir(FWD,RWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
}
}
}
else if(PollSwitch() == 12 || PollSwitch() == 18 || PollSwitch() == 30){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,200);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(ON,ON);
MotorDir(RWD,FWD);
MotorSpeed(152,150);
for(j=0;j<=200;j++){
Sleep(255);
}
}
}
}
else{
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
}
return 0;
}
Sorry habs leider noch nicht geschafft mir die anderen Beiträge anzuschauen. Sind bestimmt ganz ähnliche Sachen dabei.
Und habs auch noch nicht geschafft die Dokumentation zu schreiben; aber ist ja eigentlich auch ganz einfach das Programm.
Jetzt will ich fahrenfeiner2 mit noch nen paar Funktionen und vielleicht auch mit einer anderen Struktur verfeinern.
@freq.9: fahren und fahrenfeiner funktionieren ziemlich gut auf meinem ASURO
@Banzai: Das klingt echt gut was du da gemacht hast werd ich direkt mal ausprobieren
@Moebius: Deine Idee mit der Befreiungsschleife gefällt mir, werd ich auch mal probieren in fahrenfeiner2 einzubauen
Hi Leutz,
haben wohl viele Leute, wie auch ich, die Idee von nem ASURO der rumfährt und bei Bedarf zurücksetzt und in einer anderen Richtung weiter fährt.
Habs mal probiert und das ist raus gekommen:
/* fahren(Kai) */
/* langsam fahren, irgendwo anstoßen, schnell zurücksetzen, 90°drehen, weiterfahren */
/* 02.08.2005 vom Kai */
#include "asuro.h"
int main(void){
int i;
Init();
while(1){
if(PollSwitch()>0){ /* falls taster gedrückt --> */
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD); /* fahre rückwärts -->*/
MotorSpeed(200,200);
for(i=0;i<=270;i++){ /* --> für diese wilkürliche zeitspanne */
Sleep(255);
if(i==270){ /* ist die zeit abgegelaufen--> */
StatusLED(YELLOW);
MotorDir(RWD,FWD); /* --> dreh linksherum --> */
MotorSpeed(152,150);
for(i=0;i<=120;i++){ /* --> für diese wilkürliche zeitspanne */
Sleep(255);
}
}
}
}
else{ /* falls kein taster gedrückt --> */
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD); /* fahre vorwärts */
MotorSpeed(150,150);
}
}
return 0;
}
und weil mir das noch nicht gereicht hat, hab ich mal versucht das noch ein bißchen schöner zu machen:
/* fahrenfeiner2 */
#include "asuro.h"
int main(void){
int j,i;
Init();
while(1){
if(PollSwitch() > 0 && PollSwitch() < 8){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,202);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(ON,OFF);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
}
}
}
else if(PollSwitch() > 7 && PollSwitch() < 60 && PollSwitch() != 12 && PollSwitch() != 18 && PollSwitch() != 30){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,202);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(OFF,ON);
MotorDir(FWD,RWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
}
}
}
else if(PollSwitch() == 12 || PollSwitch() == 18 || PollSwitch() == 30){
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,200);
for(i=0;i<=270;i++){
Sleep(255);
if(i==270){
StatusLED(YELLOW);
BackLED(ON,ON);
MotorDir(RWD,FWD);
MotorSpeed(152,150);
for(j=0;j<=200;j++){
Sleep(255);
}
}
}
}
else{
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
}
return 0;
}
Sorry habs leider noch nicht geschafft mir die anderen Beiträge anzuschauen. Sind bestimmt ganz ähnliche Sachen dabei.
Und habs auch noch nicht geschafft die Dokumentation zu schreiben; aber ist ja eigentlich auch ganz einfach das Programm.
Jetzt will ich fahrenfeiner2 mit noch nen paar Funktionen und vielleicht auch mit einer anderen Struktur verfeinern.
@freq.9: fahren und fahrenfeiner funktionieren ziemlich gut auf meinem ASURO
@Banzai: Das klingt echt gut was du da gemacht hast werd ich direkt mal ausprobieren
@Moebius: Deine Idee mit der Befreiungsschleife gefällt mir, werd ich auch mal probieren in fahrenfeiner2 einzubauen
Fahren jetzt noch feiner:
/* fahrenfeiner3 */
#include "asuro.h"
int back(void){
int i;
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(200,202);
for(i=0;i<=270;i++){
Sleep(255);
}
}
int taster(void){
if(PollSwitch() > 0 && PollSwitch() < 8)
return 0;
else if(PollSwitch() > 7 && PollSwitch() < 60 && PollSwitch() != 12 && PollSwitch() != 18 && PollSwitch() != 30)
return 1;
else if(PollSwitch() == 12 || PollSwitch() == 18 || PollSwitch() == 30)
return 2;
}
int main(void){
int j;
Init();
while(1){
if(PollSwitch() != 0){
taster();
taster();
taster();
switch(taster()){
case 0:
back();
StatusLED(YELLOW);
BackLED(ON,OFF);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
break;
case 1:
back();
StatusLED(YELLOW);
BackLED(OFF,ON);
MotorDir(FWD,RWD);
MotorSpeed(150,150);
for(j=0;j<=120;j++){
Sleep(255);
}
break;
case 2:
back();
StatusLED(YELLOW);
BackLED(ON,ON);
MotorDir(RWD,FWD);
MotorSpeed(152,150);
for(j=0;j<=200;j++){
Sleep(255);
}
break;
}
}
else{
StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
}
return 0;
}
So und jetzt werd ich das mal alles ausbauen.
Schönen Abend
fotomarco
07.05.2007, 00:32
moibius sehr einfaches program ,gefaelt mir aber sehr gut
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.