Go Down

Topic: Analog Eingang liest nicht ? (Read 772 times) previous topic - next topic

Hupsi

Jan 25, 2013, 09:30 pm Last Edit: Jan 26, 2013, 02:55 am by uwefed Reason: 1
Hi,

ich steh da im Moment ein wenig an mit folgendem Problem:

Ich hab nen Sketch für einen einfachen Antrieb eines Roboters erstellt.
Vorerst hatte ich einen Ultraschallsensor verwendet um den Bot anhalten und ausweichen zu lassen.
Hat soweit geklappt, ausser dass der Sensor sehr schlecht im Raum reagiert hatte.
Also hab ich das Teil auf einen Infrarotsensor umgemodelt der jetzt eine Spannung 0,6 - 3 V ausgibt.
Lt. meinem sketch soll der fahren sofern die Spannung unter 1 Volt ( digital etwa 200 beim Arduino )
liegt, und bei einer Spannung größer 1 Volt erst mal anhalten. Ich nutze dazu den Analogeingang A0.
Den Sensor hab ich getestet - der gibt sauber Spannung aus - aber das Teil fährt und fährt und reagiert nicht auf den Analogeingang.
Ich hab schon direkt die 3,3 V vom Arduino auch drauf gelegt auf den Eingang aber er reagiert einfach nicht.
Hab ich da einen Fehler im sketch ? oder sonst wo einen Denkfehler ?
Hier mein sketch:

Code: [Select]
int m1Pin = 2;
int m2Pin = 3;
int m3Pin = 5;
int m4Pin = 6;
int analogPin = A0;
int dist, distl, distr;
#include <Servo.h>
Servo servoH;

void setup()
{
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 servoH.attach(8);
}

void loop()
{
 servoH.write(92);
 infra();

 if ( dist <= 200 )
 {
   vor();
   servoH.write(92);
   delay(10);
 }

 else if ( dist > 200 )
 {
   halt();
   delay(200);
   servoH.write(136);  
   infral();
   delay(200);
   servoH.write(48);
   infrar();
   delay(200);
   servoH.write(92);

   if ( distl >= distr )
   {
     linksturn();
   }
   else if ( distr > distl )
   {
     rechtsturn();
   }
 }
}

void linksturn()
{
 linksruck();
 rechtsvor();
 delay(300);
}

void rechtsturn()
{
 linksvor();
 rechtsruck();
 delay(300);
}

void vor()
{
 linksvor();
 rechtsvor();
}

void ruck()
{
 linksruck();
 rechtsruck();
}

void linksvor()
{
 digitalWrite(m1Pin,HIGH); // links vorwärts
 digitalWrite(m2Pin,LOW); // links vorwärts
}

void rechtsvor()
{
 digitalWrite(m3Pin,HIGH); // rechts vorwärts
 digitalWrite(m4Pin,LOW); // rechts vorwärts
}

void linksruck()
{
 digitalWrite(m1Pin,LOW); // links rückwärts
 digitalWrite(m2Pin,HIGH); // links rückwärts
}

void rechtsruck()
{
 digitalWrite(m3Pin,LOW); // rechts rückwärts
 digitalWrite(m4Pin,HIGH); // rechts rückwärts
}

void halt()
{
 digitalWrite(m1Pin,LOW); // stop
 digitalWrite(m2Pin,LOW); // stop
 digitalWrite(m3Pin,LOW); // stop
 digitalWrite(m4Pin,LOW); // stop
}

void infra()
{
 int dist(analogRead(analogPin));
}

void infral()
{
 int distl(analogRead(analogPin));
}

void infrar()
{
 int distr(analogRead(analogPin));
}


[EDIT] Code Tags Hinzgefügt. Grüße Uwe[/EDIT]

PeterH

Questions in German are more likely to be understood in the Deutsch section of the forum.
I only provide help via the forum - please do not contact me for private consultancy.

Runaway Pancake

Google Translate isn't really helping.
"Hello, I must be going..."
"You gotta fight -- for your right -- to party!"
Don't react - Read.
"Who is like unto the beast? who is able to make war with him?"

uwefed

#3
Jan 26, 2013, 03:02 am Last Edit: Jan 26, 2013, 03:04 am by uwefed Reason: 1
Scheint jemand den Tread in die Deutsche Sektion verschoben zu haben.

@Hupsi
Code: [Select]
void infra()
{
  int dist(analogRead(analogPin));
}


Variablen die innerhalb einer Funktion definiert werden gibt es außerhalb der Funktion oder in einer anderen Funktion nicht oder falls eine Variable mit gleichen Namen existiert ist sie nicht die gleiche Variable.
In diesem Fall ist dist in loop() nicht die Variable dist der Funktion infra.
(abgesehen vom vorhandenen Sytaxfehler)

Lösung:
entweder:
Code: [Select]
void infra()
{
  dist=(analogRead(analogPin));
}


oder
Code: [Select]

void loop()
{
  servoH.write(92);
  dist = infra();
...}

int infra()
{
  return(analogRead(analogPin));
}


Grüße Uwe



Hupsi

Ja - so lernt man was.

Herzlichen Dank UWE - nun fährt er rum wie er soll ;)


Schönen Tag noch und LG aus Österreich

btw: Wie kann ich Beiträge gleich im deutschen Forum posten ?
Ich hab da nix gefunden gestern.

uwefed

Quote
btw: Wie kann ich Beiträge gleich im deutschen Forum posten ?
Ich hab da nix gefunden gestern.

http://arduino.cc/forum/index.php/board,31.0.html


Go Up