Weiss zwar nicht, von welchen Sensoren du genau sprichst, aber die hc-sr04 geben nix PWM zurück.
Die machen das-im Prinzip- so: zuerst gibst du auf den Trigger-Pin Strom.
Dann schreit das Teil los-du schaltest Trig wieder ab und liest _nun_ den Echopin ein (z.B. mit pulseIn).
Die Zeit zwischen "Rufen" und "Echo hören" wird gemessen, und kann dann in ne Entfernung umgerechnet werden.
Das sieht dann z.B. so aus:
Code:
const int TrigPin = A0;
const int EchoPin = A1;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //Echo time converted into cm
cm = (int(cm * 100.0)) / 100.0; // retain two decimal places
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
Nun überlegst du dir halt, wie nahe ran du willst bzw. wanns Zeit wird, umzudrehen, und schreibst dann ungefähr sowas:
Code:
if (cm<10)
{
fahreZurueck();
}
void fahreZurueck()
{
lege rueckwärtsgang ein; // halt den Pin umschalten oder was auch immer
PWM_motor= map(cm,0,10,0,255);
}
Ob ich das mit dem map() jetzt aus der Kalten raus so richtig geschrieben hab, müsstest du testen-wenn es hinhaut, bleibt der Roboter 10 cm vorm Hindernis stehen, und je näher es kommt, umso schneller haut er rückwärts ab.
Nachzulesen da: http://arduino.cc/en/pmwiki.php?n=Reference/Map
Das ganze geht vorwärts natürlich auch, so kann man z.B. rechtzeitig vomn Gas gehen, wenn sich ein Hindernis nähert...
Und klar kannst du im if() beliebig viele Befehle schreiben (auch ganze Unterprogramme aufrufen usw.) so:
Code:
if(bedingung)
{
mache was;
mache noch was;
.........;
}
http://arduino.cc/en/pmwiki.php?n=Reference/If
Lesezeichen