hai1991 hat das erkannt: ich ha bne skizze gemacht damit das ganz klar ersichtlich wird
er soll prinzipiell zwischen rechts und linkskurve unterscheiden können.
die skizze ist im anhang zum download frei
Bild hier
hai1991 hat das erkannt: ich ha bne skizze gemacht damit das ganz klar ersichtlich wird
er soll prinzipiell zwischen rechts und linkskurve unterscheiden können.
die skizze ist im anhang zum download frei
Bild hier
Hi, zusammen,
ja, bei dieser Konstellation, muss ich euch Recht geben.
Na, dann bleibt ja noch der Timer-Interrupt, der so lustig vor sich hinzählt.
Da Msleep() benutzt wird, sehe ich, dass die Asuro-LIB benutzt wird.
Dort gibt es eine Funktion á la "HoleZeitInMSSekunden".
Hier ein ganz, ganz grober Rahmen. (Ich muss noch Arbeiten. hoffe es sieht jetzt kein Chef rein)
Gruß SternthalerCode:long letzter_kontakt = 0; long vor_letzter_kontakt; if (switched == 1) { vor_letzter_kontakt = letzter_kontakt; letzter_kontakt = "HoleZeitInMSSekunden"; if (letzter_kontakt > (ODER <??) vor_letzter_kontakt + (ODER -??) 100bisNochMehrMillisekunden) variable_fuer_grad = 90; (Oder besser hier 180) else variable_fuer_grad = 180; (und dafuer hier nur 90?? ;-)) ... ... }
P.S.: Schöne Zeichnung sebär. Nun schaffe ich es auch dein Problem zu 'sehen'. Hab leider nur schlamperlich deinen Text gelesen.
Lieber Asuro programieren als arbeiten gehen.
wir haben das problem anders lösen können
werde morgen den quelltext posten, damit ihr auch was davon habt, hab ihn aktuell nur aufm laptop in der schule und nicht hier zuhause
danke für die viele hilfe!!
lg
sooo, hier unser finaler quellcode!
einige extras (z.b. Disco-funktion) haben wir zusätzlich noch eingebaut.
danke für die ganze hilfeCode:############################################################################################ ### - FloBa Productions Inc. proudly presents: ASURO Parcourprogramm - ### ### - Ausgelegt für Parcours mit rechten Winkeln - ### ### - Asuro sollte auf einer hellen Fläche fahren um Ziellinie zu erkennen - ### ### - Programm zur öffentlichen Verwendung, Missbrauch* wird geahndet - ### ### - * zum Beispiel schlechte Kritik - ### ### - Fehler sind ausschliesslich auf Hardware und Batterie zurückzuführen - ### ### - Viel Vergnügen beim Spielspass wünscht das Asuro-Care-Team - ### ############################################################################################ #include "asuro.h" #define FULL_L 200 #define FULL_R 202 volatile unsigned int i; void Fahren(void) /* Vorwärts fahren */ { StatusLED(GREEN); BackLED(OFF,OFF); MotorDir(FWD,FWD); MotorSpeed(FULL_L,FULL_R); } void Anhalten(void) /* Anhalten */ { StatusLED(RED); BackLED(OFF,OFF); MotorDir(BREAK,BREAK); } void Zurueck(void) /* Zurück fahren */ { StatusLED(YELLOW); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(FULL_L,FULL_R); } void KurveLR(void) /* Kurve rückwärts Links */ { StatusLED(YELLOW); BackLED(ON,OFF); MotorDir(RWD,RWD); MotorSpeed(FULL_L,0); } void KurveRR(void) /* Kurve rückwärts Rechts */ { StatusLED(YELLOW); BackLED(OFF,ON); MotorDir(RWD,RWD); MotorSpeed(0, FULL_R); } void KurveRF(void) /* Kurve vorwärts Rechts */ { StatusLED(YELLOW); BackLED(OFF,OFF); MotorDir(BREAK,FWD); MotorSpeed(0,FULL_R); } void Firstcol(void) /* Programm Rechtskurve im Parcour 1. Kollision */ { Anhalten(); Msleep(250); Zurueck(); Msleep(15); Anhalten(); Msleep(10); KurveRR(); Msleep(400); Anhalten(); Msleep(250); switched = 0; StartSwitch (); } void Secondcol(void) /* Programm Linkskurve im Parcour, 2. Kollision */ { Anhalten(); Msleep(250); Zurueck(); Msleep(10); Anhalten(); Msleep(250); KurveLR(); Msleep(355); Anhalten(); Msleep(250); KurveRF(); Msleep(355); Anhalten(); Msleep(250); switched = 0; StartSwitch(); } void Thirdcol(void) /* Programm Sackgasse im Parcour, 3. Kollision */ { Anhalten(); Msleep(250); Zurueck(); Msleep(10); KurveLR(); Msleep(310); Anhalten(); Msleep(250); switched = 0; StartSwitch(); } void Disco(void) /* PARTYTIME! -15mal blinken/piepsen-*/ { for(i = 0; i < 16; i++) { MotorDir(FWD,FWD); MotorSpeed(50,50); BackLED(OFF,OFF); StatusLED(OFF); FrontLED(OFF); Msleep(200); MotorDir(BREAK,BREAK); BackLED(ON,ON); StatusLED(RED); FrontLED(ON); Msleep(200); } } int main (void) /* Hauptprogrammbeginn */ { unsigned int data[2]; /* Speicherplpatz für Helligkeitswert */ unsigned int Summe; Init (); switched = 0; /* Kollisionserkennung auf 0 setzen */ StartSwitch (); /* Taster-Interrupt aktivieren */ FrontLED(ON); LineData(data); /* Speichern von Helligkeitswert in data[0,1] */ Summe = data[0]+data[1]; /* Summe der Werte beider Fototransistoren */ while (1) { if (switched == 1) /* Wenn 1. Kollision, dann Rechtskurve 90° aus */ { Firstcol(); for(i = 0; i < 25000; i++) /* Setze Zeitschlaufe für 2. Kollision */ { if (switched == 1) /* Wenn 2. Kollision, dann Drehung 180° */ { Secondcol(); for(i = 0; i < 25000; i++) /* Setze Zeitschlaufe für dritte Kollision */ { if (switched == 1) /* Wenn 3. Kollision, dann Linksdrehung 90° */ { Thirdcol(); } else /* Keine 3. Kollision, Fahre normal */ { Fahren(); } } } else /* Keine 2. Kollision, Fahre normal */ { Fahren(); } } } else /* gar keine Kollision, Fahre normal, Stopp bei Linie */ { LineData(data); if(data[0]+data[1]+10 > Summe) /* Untergrundhelligkeitsdifferenz feststellen */ { Fahren(); } else { Disco(); /* Party gut - Alles gut */ while(1) {} /* Endlosschleife - Ende des Programmes */ } } } return 0; }
lg
wollte den code mal testen .. kriege folgende fehlermeldung .. kann mir wer weiter helfen
Code:>Session Environment Variables: AF_AVRDIR=C:\WinAVR AF_PROJECT=Project1 AF_SOURCE_FILES=new.c AF_ASM_SRC_FILES= AF_PRGDIR=C:\Program Files\AsuroFlash AF_PRJDIR=C:\ProgramData\AsuroFlash AF_LIB_PATH=%AllUsersProfile%/AsuroFlash/asuro-lib/lib File new.c saved. >Default make_all.cmd file created. >Default makefile created. Make C:\ProgramData\AsuroFlash>C:\WinAVR\utils\bin\make all set -e; avr-gcc -MM -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.lst new.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > new.d; \ [ -s new.d ] || rm -f new.d -------- begin -------- avr-gcc --version avr-gcc (WinAVR 20081205) 4.3.2 Copyright (C) 2008 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. avr-gcc -c -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.lst new.c -o new.o avr-gcc -mmcu=atmega168 -DF_CPU=8000000UL -I. -g -Os -IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=new.o new.o --output Project1.elf -Wl,-Map=Project1.map,--cref -LC:\ProgramData/AsuroFlash/asuro-lib/lib -lm -lasuro168 new.o: In function `main': C:\ProgramData\AsuroFlash/new.c:152: undefined reference to `Init' make: *** [Project1.elf] Error 1 ExitCode 2 >Ready.
Hallo ezo2k3,
als erstes solltest du einmal die '\'-Zeichen in deinen Pfadangaben gegen das '/'-Zeichen tauschen.
Möglicherweise gibt es ein Problem, wenn eine Mischform, wie bei:
-IC:\ProgramData/AsuroFlash/asuro-lib/lib/inc
-LC:\ProgramData/AsuroFlash/asuro-lib/lib
entsteht.
Auch immer seeeehhhhr Kritisch sind Pfadangaben mit Leerzeichen im Namen.
Das hast du bei der Variablen AF_PRGDIR=C:\Program Files\AsuroFlash
Du solltest Verzeichnisse mit Sonderzeichen im Namen in dieser Umgebung unbedingt vermeiden.
Viel Erfolg und Gruß
Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Lesezeichen