PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Programm



wenckstar
17.06.2012, 14:22
Hallo,

ich brauche unbedingt Hilfe in C Programmierung. Ich weiß nicht wie ich
die Beiden C Programme sinnvoll verknüpfe.


Vielleicht kann mir ja jemand helfen..

/**
*
*-RP6 als Buch umblätterer-
*
*
*Zum Starten des Robotors müssen sich die beiden Fotowiderstand auf den Seiten des Buches
*befinden.Das Buch liegt auf einer schwarzen unterfläche
*Der Roboter fährt gerade, bis der Rechte LDR die schwarze Fläche erreicht.
*-PA1 wird gestzt-
*Der Roboter fährt zurück und der rechte LDR gelangt wider auf die fläche des Buches.
*Jetzt fährt weiter zurück bis der linke LDR die schwarze Fläche erreicht.
*-Er soll aber noch 5 sec weiterfahren und dann erst den PortA1 ausschalten-
*Das ganze widerholen

*/


//Auswertung der LDRs

#include "RP6RobotBaseLib.h"
#include <avr/io.h>

int main (void)
{
initRobotBase();



startStopwatch1();
writeString_P("\n\nKleines ADC Messprogramm...\n\n");

while(true)
{

if(getStopwatch1() >300) //alle 300ms...

{
writeString_P("\nADC Lichtsensor Rechts: ");
writeInteger(adcLSR, DEC);
if(adcLSR<750)
PORTA |= (1<<PA1);

setStopwatch1(0);
}
if(getStopwatch1() >300) //alle 300ms...

{
writeString_P("\nADC Lichtsensor Links: ");
writeInteger(adcLSL, DEC);
if(adcLSL<600)
PORTA &= ~(1<<PA1);
setStopwatch1(0);
}

task_ADC();
}
return 0;
}





// Strecke abfahren
// Eine Distance für das vorwärtsfahren brauch zum Vorhaben nicht mehr erfüllt werden.


#include "RP6RobotBaseLib.h"
#include <avr/io.h>



int main(void)
{
initRobotBase();
powerON();


uint8_t i = 0;
while(i < 2)
{
task_motionControl();
task_ADC();

move(30, FWD, DIST_MM(400), true); // hier fährt er 25 cm gerade
PORTA |= (1<<PA1); // der freie Port von ADC1 wird auf logisch 1 gesetzt.
// der staubsauger geht an

mSleep(3000); // Pause


move(30, BWD, DIST_MM(400), true); // fährt 25 cm zurück
PORTA &= ~(1<<PA1); // Port ADC1 wird auf logisch 0 gesetzt.
// der Staubsauger geht aus.
mSleep(3000); // Pause

i++; // wiederhole

}
return 0;
}

Dirk
17.06.2012, 15:18
Im Prinzip kannst du alles in eine while(i < 2) Schleife packen.
Probleme:
1. Sowohl durch den Lichtsensor rechts, als auch nach dem Vorwärtsfahren wird PA1 eingeschaltet?
2. Die 3 Sek. Pause: Das must du mit Stopwatches regeln.
3. Die Blocking-Parameter: Geht nicht in einer Hauptschleife. Wenn du nicht blockierend arbeitest, kannst du mit isMovementComplete() auf das Ende der Bewegung testen.
4. Empfehlung: Nicht 2 identische if(getStopwatch1() >300) Blöcke hintereinander nehmen. Das geht dann auch in einem.