Pages: [1]   Go Down
Author Topic: Analog Eingang liest nicht ?  (Read 573 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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]
« Last Edit: January 25, 2013, 08:55:18 pm by uwefed » Logged

UK
Offline Offline
Shannon Member
****
Karma: 183
Posts: 11142
-
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questions in German are more likely to be understood in the Deutsch section of the forum.
Logged

I only provide help via the forum - please do not contact me for private consultancy.

Online Online
Edison Member
*
Karma: 56
Posts: 2183
Now, More Than Ever
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Google Translate isn't really helping.
Logged

"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?"

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20184
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scheint jemand den Tread in die Deutsche Sektion verschoben zu haben.

@Hupsi
Code:
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:
void infra()
{
  dist=(analogRead(analogPin));
}

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

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

Grüße Uwe


« Last Edit: January 25, 2013, 09:04:11 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja - so lernt man was.

Herzlichen Dank UWE - nun fährt er rum wie er soll smiley-wink


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.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20184
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci.
Logged

Pages: [1]   Go Up
Jump to: