PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vorrangig programmieren in C++



rocketman123
10.01.2008, 19:36
Hallo,
ich hab ein kleines Programm für meinen Asuro geschrieben. Dabei fährt dieser bei betätigen eines Kollisionstaster 5s geradeaus.
Ich möchte diesen jetzt so programmieren das wenn in dieser Zeit (5s) ein anderer Taster gedrückt wird dieser anhält.
Wie kann ich das in c++ lösen. denn wenn ich den ersten Taster gedrückt habe fährt der Asuro ja 5s und ich kann nicht auf das Programm in dieser Zeit zugreifen oder??

int main(void)
{

Init ();
while(1)
{
switch (PollSwitch())
{
case 0x02:
MotorDir(FWD,FWD);MotorSpeed(120,120);Msleep(1000) ;
break;
}
}
return 0;
}

Moritz f.
10.01.2008, 19:45
Hallo,

erste Frage: ich seh das ++ von C++ in deinem Code nicht! Wo isses denn?

Lösung:
Wenn eine Betätigung des Kollisionstasters erkannt wird, könnten die Motoren für das geradeausfahren aktiviert werden, gleichzeitg aber auch ein Timer gestartet werden der genau nach 5 Sekunden einen Interrupt auslöst welcher die Motoren wieder stoppt.

So wird der Code

while(1)
{
switch (PollSwitch())
{
case 0x02:
MotorDir(FWD,FWD);MotorSpeed(120,120);Msleep(1000) ;
break;
}
}

ausgeführt wärend die Motoren laufen.



Jaja, Timer sind eine feine Sache ;)

lg und viel Glück, MoFe

rocketman123
11.01.2008, 16:58
ja ist schon klar.
ich möchte aber in dem Zeitraum in dem der Timer läuft die Motoren stoppen. Ich kenns eben nur z.B. von einer S7-Steuerung in der ich RS-glieder benutzen kann und wenn beide gedrückt sind soll z.B. der Motor stoppen.
?????????????

McJenso
11.01.2008, 18:09
Hi,

die Funktionen, die du in deinem Code benutzt, kenne ich nicht.
Ich vermute, dass Msleep (1000) den Controler 5 sek. lang mit nichts beschäftigt und dann den Motor abschaltet. So, diese Funktion löscht du jetzt einfach und löscht danach den Papierkorb, damit sie nicht wieder raus krabbeln kann.


volatile unit8_t uiMotorAus = 0;

void InitTimer (){
WichtigeRegister |= InterruptAn|5SekEinstellen;
}

ISR (TIMERn_Dein_vector)
{
uiMotorAus = 1;
}

int main(void)
{

InitTimer ();
sei();
while(1)
{
if (Taster_ist_gedrückt){
StartTimer();
StartMotor();
}
if (uiMotorAus == 1){
StopMotor();
StopTimer();
uiMotorAus = 0;
}
if (StopTasterIstGedrückt){
uiMotorAus = 1;
}

return 0;
}

Vermutlich meinte FoFe ein Programm nach diesem Gerüst. Ob der Ablauf jetzt genau das ist was du meist, weiß ich nicht.
Das schöne daran ist, der Controller kann noch diverse andere Sachen neben der Motorsteuerung erledigen.

Gruß

Jens

ps. Bitte die Codetags in deinen Postings verwenden.