PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm hilfe



AsUro-KidY
17.03.2007, 14:35
kann mir bitte einer ein programm schreiben
wo sich der asuro 30cm vorwärts dreht und die leds
nacheinander leuchten und wieder rückwärts fährt

ist sehr wichtig bitte bin eine niete in programmieren

adrisch
17.03.2007, 15:37
also. du solltest ers einmal erklären was du genau meinst.
1. Wie kann sich der Asuro nach vorwärts ****drehen****?
2. Welche LED's sollen nacheinander leuchten, und wielange?
3. Das mit den 30cm musst du von der Zeit her dann selbst rauskriegen, da jeder asuro anders geölt ist und so was.

AsUro-KidY
17.03.2007, 15:50
hallo also ich hab mich hingehockt und dieses programmchen
mit hilfe von dem selbsttest programm geschrieben
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,0);
while(1)
return 0;

}

{
unsignet int i;
Init();
while(1)
StatusLED(RED);
for (i = 0; i < 282; i++) {
Sleep(10); }
StatusLED(GREEN);
for (i = 0; i < 282; i++) {
Sleep(10); }
StatusLED(OFF);
}
{
Init();
MotorDir(RWD,RWD);
MotorSpeed(0,255);
while(1)
return 0;
}
FrontLED(ON);
for (i = 0; i < 282; i++) {
Sleep(10); }
FrontLED(OFF);
BackLED(ON,OFF);
for (i = 0; i < 282; i++) {
Sleep(10); }
BackLED(ON,OFF);
for (i = 0; i < 282; i++) {
Sleep(10); }
BackLED(OFF,OFF);
StatusLED(GREEN);
for (i = 0; i < 282; i++) {
Sleep(10); }
}
return 0;
}

also das programm soll mit maximaler drehzahl das linker Motor vorwärts fahren und danach das rechter motor aber und in dem quellcode geschriebene leds sollen leuchten

AsUro-KidY
17.03.2007, 15:53
und wenn es klappen sollte könntet ihr mir des compalieren bei mir geht
es irgendwie nicht brauch bitte dan die hex datei

damaltor
17.03.2007, 18:11
so, das sieht schon nicht schlecht aus. mal ein paar kleinigkeiten:

1. Ein thread, der WICHTIG! BITTE HELFEN heisst, wird garantiert in keiner suche gefunden. bitte editiere deinen ersten beitrag, dann kannst du den titel ändern.
2. Ein Forum ist zum Helfen. NICHT UM FERTIGE PROGRAMME SCHREIBEN ZU LASSEN. Gut, dass du es selbst wenigstens Probiert hast.
3. Es heisst "kompilieren" und nicht kompalieren =)
4. Wenn du vor dem Programmcode den button "code" über dem textfenster drückst, und danach auch nochmal, dann sieht das ganze so aus: Hier dein Programm mit ein paar anmerkungen.


#include "asuro.h" //OK
int main(void) //OK
{ //OK
Init(); //OK
MotorDir(FWD,FWD); //OK
MotorSpeed(255,0); //OK
while(1) //Hier fehlt was. was soll passieren? entweder {anweisungen}; oder nur ein Semikolon (;) muss hier hinter
return 0; //OK

} //diese klammer zeigt das ende des programms an. schau immer, welche geöffnete klammer zu welcher geschlossenen gehört. diese gehört zur klammer hinter "int main(void)", und schliesst damit das programm.

{ //hier ist eine geöffnete klammer... einfach so. das geht zwar theoretisch, aber in diesem fall ist es witzlos: das programm ist ja schon beendet =(
unsignet int i; //es heisst "unsigned"
Init(); //haste schon am beginn des programms
while(1) //dies ist eine endlosschleife. ab hier passiet nix mehr.
StatusLED(RED); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(GREEN);
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(OFF); //OK
} //Wieder ein ende... naja
{ //und wieder ein öffnen =)
Init(); //haste schon
MotorDir(RWD,RWD); //OK
MotorSpeed(0,255); //OK
while(1) //Endlosschleife
return 0; //muss am ENDE des programmes stehen...
} //einfach so ne ende klammer... wozu gehört die?
FrontLED(ON); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
FrontLED(OFF); //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(OFF,OFF); //OK
StatusLED(GREEN); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
} // noch ne ende klammer... keine geöffnete zu sehen
return 0; //OK
//hier fehlt eine endlosschleife
} //OK


AAAlso:

bitte fang nochmal an. zusammenkopierte quelltexte funktionieren zu 99,9% nicht.

lies die anleitung genau. versuche dei beispiele zu verstehen. gerade am beginn des teils der programmierung in der anleitungen stehen wichtige grundlagen, welche hier mehr oder weniger vorausgesetzt werden.

Wenn der compiler fehlermeldungen ausgibt, kopiere sie und poste sie hier. Ebenfalls mit dem "code" button natürlich.

mach langsam, versuche, nichts fertiges zu kopieren. niemand wird dir einfach so ein programm schreiben. dadurch lernste nix, das hört man hier dauernd.

Versuche, die Programme der anleitung abzutippen (!) und sie dabei zu verstehen. sie sind ganz gut erklärt. und lies vor allen dingen den entsprechenden teil der anleitung genau, dir fehlen die grundlagen!!

Nicht aufgeben, ist alles garantiert nicht böse gemeint, aber das alles ist gar nicht so schwer, wenn man sich damit beschäftigt und nicht fertiges verlangt. ausserdem kann man dann viel stolzer darauf sein! Viel Erfolg weiterhin...

AsUro-KidY
17.03.2007, 20:30
#include "asuro.h" //OK
int main(void) //OK
{ //OK
Init(); //OK
MotorDir(FWD,FWD); //OK
MotorSpeed(255,0); //OK
while(1);
return 0; //OK


unsigned int i;


StatusLED(RED); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(GREEN);
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(OFF); //OK
} //Wieder ein ende... naja
{

MotorDir(RWD,RWD); //OK
MotorSpeed(0,255); //OK


FrontLED(ON); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
FrontLED(OFF); //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(OFF,OFF); //OK
StatusLED(GREEN); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK

return 0; //OK
while(1)
} //OK

hier mein verbessertes programm hoffe es geht

damaltor
17.03.2007, 21:06
sieht schon besser aus. kompiliere es mal, dann kannst du durch die fehlermeldungen etwas ändern.

Fehler:
- Am anfang des programms ist noch eine endlos schleife. mach die raus.
Die beiden klammern in der mitte können weg. wozu sollen sie gut sein?
- return(0) muss nur ein einziges mal, und zwar NACH der (einzigen) endlosschleife am ende stehen. hinter diese kommt ein semikolon. return(0) wird also nie ausgeführt, sondern muss nur der form wegen dastehen.
- sortiere nochmal die klammern {}: eine zu beginn der main funktion, eine als ende des quelltextes. ansonsten nur für die for() funktion und schleifen verwenden. klammern allein im quelltext haben wenig sinn.
- unsigned int i; diese zeile muss am anfang stehen, direkt vor Init();

ansonsten: viel besser =)

ändere das alles passend, und dann versuche, es zu kompilieren. was gibt der compiler aus?
die kommentare könenn drin stehen bleiben, durch die beiden schrägstriche // sind sie als kommentar gekennzeichnet und werden vom compiler ignoriert.

AsUro-KidY
17.03.2007, 21:51
{ //OK
Init(); //OK
MotorDir(FWD,FWD); //OK
MotorSpeed(255,0); //OK


unsigned int i;


StatusLED(RED); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(GREEN);
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(OFF); //OK


MotorDir(RWD,RWD); //OK
MotorSpeed(0,255); //OK


FrontLED(ON); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
FrontLED(OFF); //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(OFF,OFF); //OK
StatusLED(GREEN); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK

//OK
while(1);
return 0;
} //OK

und wie ist es jetzt

damaltor
17.03.2007, 22:04
bitte kompiliere dein programm selbst. dann siehst du schon die meisten fehler, weil der compiler zeilennummern zu den fehlern angibt.

jetzt fehlt der kopf (das #include), es fehlt der beginn der main funktion, und das unsigned int i steht noch immer an der falschen stelle.

AsUro-KidY
17.03.2007, 22:13
#include "asuro.h" //OK
int main(void) //OK
{ //OK
Init(); //OK
MotorDir(FWD,FWD); //OK
MotorSpeed(255,0); //OK


unsigned int i;


StatusLED(RED); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(GREEN);
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
StatusLED(OFF); //OK


MotorDir(RWD,RWD); //OK
MotorSpeed(0,255); //OK


FrontLED(ON); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
FrontLED(OFF); //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK
BackLED(OFF,OFF); //OK
StatusLED(GREEN); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK

//OK
while(1);
return 0;
} //OK

ich habs compalier und des kam raus


C:\ASURO_src\FirstTry>make all
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
test.elf :
section size addr
.text 1512 0
.data 0 8388704
.bss 1 8388704
.noinit 0 8388705
.eeprom 0 8454144
.stab 3120 0
.stabstr 1698 0
Total 6331


Size after:
test.elf :
section size addr
.text 1512 0
.data 0 8388704
.bss 1 8388704
.noinit 0 8388705
.eeprom 0 8454144
.stab 3120 0
.stabstr 1698 0
Total 6331


Errors: none
-------- end --------

> Process Exit Code: 0

es hat keine hex datei erstellt

AsUro-KidY
18.03.2007, 14:10
kann mir jemand bitte diesen quell code kompilieren und mir die hex file schicken?

radbruch
18.03.2007, 14:39
Dein Programm wurde bei mir ohne Probleme kompiliert.

AsUro-KidY
18.03.2007, 14:41
hallo zuerst mal danke aber wenn ich auf download klicke kommt
diese meldung: #include "../inc/asuro.h" int main(void) { Init(); MotorSpeed(150,100); do{ MotorDir(FWD,FWD); }while (1); return 0; }

AsUro-KidY
18.03.2007, 14:47
ok konnts doch downloaden und ich hab am ende das txt
rausgemacht wenn ich flashen will kommt da wrong file

radbruch
18.03.2007, 14:53
Sorry, hab blöderweise ein C-File im Anhang gepostet. Ich habs geändert, jetzt sollte es funktionieren (nochmal downloaden, das .txt kann man direkt flaschen ohne umbenennen). Allerdings ist die Funktionen des Codes etwas fragwürdigt, mein asuro zuckt kurz und zirckelt dann endlos...

In der Zeit, in der du versucht hast, meine Datei zum Laufen zu bringen, hättest du auch untersuchen können, warum bei mir das Programm übersetzt wurde und bei dir nicht.

AsUro-KidY
18.03.2007, 15:02
ich konnts jetzt flashen aber irgendwas stimmt an meinem code nicht wollt eigentlich das mein asuro zuerst in eine richtung im kreis dreht und danach die led angeheht und dann in die andre richtung im kreis dreht
aber in meinem programm dreht es sich dauerhaft nach hinten im kreis nur der linker motor dreht sich kannst du mir helfen?

AsUro-KidY
18.03.2007, 15:30
sorry das ich dich nochmal nerve hab an meinem quellcode weitergemacht
kannst du es mit nochmal compilieren


#include "asuro.h" //OK

int main(void) //OK
{ //OK
Init(); //OK
MotorDir(FWD,FWD); //OK
MotorSpeed(255,0); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); }

unsigned int i;


StatusLED(RED); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); } //OK
StatusLED(GREEN);
for (i = 0; i < 10; i++) { //OK
Sleep(10); } //OK
StatusLED(OFF); //OK


MotorDir(RWD,RWD); //OK
MotorSpeed(0,255); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); }


FrontLED(ON); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); } //OK
FrontLED(OFF); //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); } //OK
BackLED(ON,OFF); //OK
for (i = 0; i < 10; i++) { //OK
Sleep(10); } //OK
BackLED(OFF,OFF); //OK
StatusLED(GREEN); //OK
for (i = 0; i < 282; i++) { //OK
Sleep(10); } //OK

//OK
while(1);
return 0;
} //OK

radbruch
18.03.2007, 16:18
Ja, ich könnte es nochmal kompilieren, aber ich tuts nicht, weils nichts bringt. Ich kann mir schon vorstellen, dass du grad "heiß" bist und weitermachen möchtest, aber auf dieser Basis kann man kein Programm entwickeln.

Suche den Fehler beim deiner C-Installation oder warte, bis dir jemand einen Tipp zum Kompilieren gibt. Ich kenne mich damit leider auch nicht aus.

In deinem, nun wohl etwas hektisch überarbeiteten Programm wird die Variable i erst nach der neuen Zählschleife initialisiert, dass wird beim Komplilieren sicher einen Fehler erzeugen.

MartinFunk
18.03.2007, 16:31
hast du die datei vor dem kompilieren gespeichert?

AsUro-KidY
18.03.2007, 17:10
ja hab ich des erstellt immer die gleiche test file

ach bitte das letzte mal compilier es bitte

damaltor
18.03.2007, 17:39
natürlich erstellt er das test file... was hast du erwartet?

er meldet keine fehler, und dann kannst du die test.hex aus dem verzeichnis flashen.

AsUro-KidY
18.03.2007, 19:25
ja aber der test file macht nix nur die led leuchtet grün

damaltor
18.03.2007, 19:50
dann hast du vergessen zu speichern...

1. programm schreiben (test.c)
2. SPEICHERN
3. kompilieren
4. test.hex flashen

_HP_
19.03.2007, 08:58
Hi Kidy.

nur so als Tip: Setz mal im Flash-Programm den Haken bei "flash only new page". Wenn Du dann das gleiche Programm überträgst, das schon auf dem ASURO drauf ist, meldet er sich sofort mit der Meldung, dass alles übertragen wurde. Hast Du in deinem Programm etwas geändert, muß mindestens eine Seite neu übertragen werden. Wenn das nicht passiert, dann schau nach, ob Dein Quelltext gespeichert wurde. Das erkennst Du entweder am Dateidatum oder wenn Du die Datei mit einem Texteditor öffnest. Dann kannst Du auch sehen, ob Deine Änderungen in der Datei gelandet sind, die Du ändern und kompilieren wolltest.

Gruß,

_HP_