PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einfaches programm will nicht



chineseboy
29.03.2010, 15:52
#include "asuro.h"
int main(void){
Init();
while(1){
char Taster;
Taster=PollSwitch();
if (Taster<1){
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
else {
int I;
for (I=0;I<4000;I=I+1){
StatusLED(RED);
MotorDir(RWD,BREAK);
MotorSpeed(200,0);
}
}
}
}

*Funktionsbeschreibung*
Der Asuro wird abgefragt ob Pollswitch betätigt oder nicht ist .
Wenn Pollswitch 0 dann geradeausfahren
Wenn Pollswitch 1 oder höher dann eine bestimmte zeit zurückfahren
dann mit der while schleifen wieder prüfen welche Wert Pollswitch hat.

irgendwie ist das da momentan einfach nur so das mein asuro sofort ROT leuchtet und rückwärtsfährt also der eine motor und zwischendurch immer schnell grün blinkt was aber eignetlich gar nicht sein darf

Thund3r
29.03.2010, 16:16
Hallo

Ein viel besprochenes Problem ist dass die Taster beim Asuro nicht besonders zuverlässig sind.
Aufgrund mehrerer Faktoren wird manchmal ein Wert ungleich 0 zurückgegeben obwohl nichts gedrückt wurde.

Um dies vorzubeugen gibt es mehrere Möglichkeiten wie mehrfache Abfragen:


...
int T,T1,T2;
T=PollSwitch();
T1=PollSwitch();
T2=PollSwitch();
if (T==0||T1==0||T2==0)
{
...
}
...

oder indem du einfach auf einen Taster verzichtest und sagst


...
if (Taster<2)
{
...
}
...

oder etwas ausgefallener:


...
while(1)
{
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(150,150);

while((PollSwitch()==0) || (PollSwitch()==0) || (PollSwitch()==0));

int I;
for (I=0;I<4000;I=I+1){
StatusLED(RED);
MotorDir(RWD,BREAK);
MotorSpeed(200,0);
}
}
...

Gruß Thund3r

chineseboy
29.03.2010, 16:29
okay cool, wahnsinn , ich hab mir durch die ganzen seiten geschaut und nie richtig verstanden ... muss schon sagen super netter support ... interessant wäre noch für mich warum ein ungleicher wert ausgegeben wird? wegen dem programm oder wegen den elektrischen komponenten. und was wird durch die || eigentlic hrealisiert was ist das für eine funktionen ? etwa ein UND ?

Thund3r
29.03.2010, 16:49
Hallo

Also der ungleiche Wert entsteht einfach gesagt aufgrund von Bauteilunterschieden. Auch wenn zB 2 Widerstände laut Bezeichnung gleich sein sollten gibt es minimale Unterschiede. Diese Unterschiede summieren sich und können zB in Verbindung mit laufenden Motoren die Stromschwankungen o.ä. hervorbringen zu Ungenauigkeiten führen welche sich zB in falschen Tasterwerten wiederspiegeln.

Die || sind "oder" && wäre "und"

In dem Teil hier:

T==0||T1==0||T2==0

wird gefragt: Ist T(Taster) oder T2 oder T3 = 0 (nicht gedrückt)
Also muss nur einer von den 3 mal abgefragten Werten stimmen. So wird der Sensor etwas abgestumpft um solchen bauteilbedingten Schwankungen zu entgehen. Beim drücken eines Tasters wird ein Wert zurückgegeben der immer über 0 ist. Also sind alle 3 Abfragen nicht mehr gleich 0 und der weitere Programmteil wird abgearbeitet

Gruß Thund3r

chineseboy
29.03.2010, 17:11
und nochmal herzlichen dank! mit UND und ODER befehlen kann ich besser umgehen , bin ja schließlich auch elektroniker. und kein informatiker

Thund3r
29.03.2010, 17:20
Hallo

Gern geschehn !
Ach jeder Anfang ist schwer aber mit der Zeit lernt man.
Viel Erfolg bei deinen weiteren Projekten und
wenn du Hilfe brauchst sach bescheid ;)

Gruß Thund3r

Valen
29.03.2010, 17:57
Die unzuverlässiger taster werten entstehen durch störungen von den elektromotoren. Diese animaition erklärt das ein bisschen.

http://www.walter-fendt.de/ph14d/elektromotor.htm

Auf den drehende achse gibt es ein scheibe das die strom mittels kohlebürste uberträgt an dem magnetische spülen. Durch drehen wird abwechselend die stromrichtung geändert damit das magnetische feld die motor nicht wieder abremmst. Aber das umdrehen von den polarität auf einer spule verursacht schwere spannungswechselungen. In dem Asuro sind die motoren leider ganz direkt mit den akkus und analoge messschaltung verbunden. Dadurch werden die spannung schwankungen leicht aufgemerkt bei dem tastertest. Aber ich denke auch die andere analoge messungen.