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;
}
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.
Gruß
Dirk
Lesezeichen