Ja nach jedem if oder else muss der Teil der ausgeführt werden soll zwischen {} stehen
Ja nach jedem if oder else muss der Teil der ausgeführt werden soll zwischen {} stehen
Ist es so richtig eingefügt?
Jetzt hätt ich noch eine Frage und zwar wie kann ich die Zeit verkürzen die der Asuro rückwärts fähr, jetzt ist es ja 1 Sec.
Ich kann das über Sleep einstellen oder?
Im moment ist es ja auf Sleep(255) eingestellt, aber was entspricht dem Wert 255? ^^
Hallo
Sleep(1) dauert je nach Version der Library 1/72000 oder 1/36000 Sekunde. Normalerweise ist PrintInt() nur in 36kHz-Libraries zu finden, aber dann passt die genannte Sekunde nicht zum errechneten Wert:
for (i=0;i<280;i++){Sleep(255);
280 * 255 * 1/36000sek = 1,98sek
Möglicherweise erkennt der Kompiler int debug_mode = 0; und optimiert den Debugteil raus. Dann wäre das mit der CD-Lib und 72kHz übersetzbar.
Gruß
mic
P.S.: Eine Sekunde:
for(i=0; i<1000; i++) Sleep(36); // Sleep(36) dauert 1/1000Sek, bei CD-Library Sleep(72)
Geändert von radbruch (30.11.2011 um 20:45 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Also ich hab mir alle neuesten Versionen aus dem internet runtergeladen welche Version habe ich dann ?
for(i=0, i<1000; i++) für was steht die 1000 in diesem fall?
bei meinem programm ist das ja auf 280
for(i=0, i<1000; i++)
ist eine Zählschleife. Der startet mit i = 0 und führt den Befehl der danach kommt solange aus bis i größer als 1000 ist. Das i++ heißt das er in einser Schritten zählt.
Eine komplette Zählschleife würde so aussehen:
for(i=0, i<1000; i++)
{
}
Radbruch hat ja eben gesagt das Sleep(1) = 1/36000 Sekunden ist. Dementsprechend ist Sleep(36)= 36/36000 und das ergibt 1/1000. Das heißt Sleep(36) dauert 36/36000 Sekunden oder gut 1ms. Und deswegen machst du die Zählschleife von 0 bis 1000. Weil er dann 1000x Sleep(36) ausführt. Und das sind 1000x 1ms also 1 Sekunde. Wenn du jetzt 2 Sekunden haben willst schreibste statt 1000 2000. Für 3 Sekunden 3000 usw.
Hoffe das hilft dir weiter![]()
Geändert von Kampi (30.11.2011 um 21:15 Uhr)
Ja sehr! Vielen dank x) .. ich werd das morgen alles mal testen und dann mal sehen. Hoff ihr helft mir dann ein weiteres mal falls Schwierigkeiten auftreten sollten.
Aktuell ist V2.8:Also ich hab mir alle neuesten Versionen aus dem internet runtergeladen welche Version habe ich dann?
https://www.roboternetz.de/community...l=1#post252982
In der Datei CHANGELOG steht der Hinweis auf die Version. Ab v2.3 sind es 36kHz.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich meine mich zu erinnern, dass ich mal irgendwo gelesen hab das diese formulierung hier problematisch werden kann:
(PollSwitch()!=0) <-- das soll die bedingung sein das er für kurze zeit rückwärs fährt
falls diese schreibweise tatsächlich problematisch ist, was wäre besser?
denn bei meinem aktuellen programm folgt er erst der linie und dann fängt er plötzlich an sich zu dreht? kann das daran liegen? oder sind noch andere fehler in dem programm?
Denn eigendlich soll er ja einer linie folgen und wenn er wo dagegen stößt kurz rückwärtsfahren und dann eine links/rechts kurve machen und dann wieder einer linie folgen.
Kann mir bitte jemand helfen?
#include "asuro.h"
int main(void)
{
Init();
int i;
while(1)
{
if(PollSwitch()!=0)
{StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
MotorDir(FWD,FWD);
MotorSpeed (0,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
}
else{
int line_data[2];
LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
// schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte
FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
int speed = 120;
int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück
while (line_data[1] > limit)
{
if (debug_mode)
{
SerWrite("rechts\r\n", 8 );
PrintInt(line_data[1]);
SerWrite("\r\n", 2);
}
BackLED(OFF, ON);
MotorSpeed(0, speed);
LineData(line_data);
}
while (line_data[0] > limit)
{
if (debug_mode)
{
SerWrite("links\r\n", 7);
PrintInt(line_data[0]);
SerWrite("\r\n", 2);
}
BackLED(ON, OFF);
MotorSpeed(speed, 0);
LineData(line_data);
}
MotorDir(FWD, FWD);
MotorSpeed(speed, speed);
}
}
return 0;
}
Geändert von LikeYou (01.12.2011 um 14:23 Uhr)
Lesezeichen