Forum: Analoge Elektronik und Schaltungstechnik Promblem mit den Analogen Eingängen des Arduino


von Arduino_Mann (Gast)


Lesenswert?

Hallo zusammen,
wie am Betreff zu erkennen habe ich ein Problem mit den Analogen 
Eingängen des Arduino und zwar lese ich mit dem Befehl analogRead(A0) 
nur den Wert 18 aus, egal was ich anschließe. Was noch komischer ist das 
ich an A1:19, A2:20, A3:21, A4:22 und an A5:23 auslese. Woran könnte das 
liegen? Ich habe es zum Beispiel mit ein Spannungsteiler versucht bei 
dem Ich 5V angelegt habe und auch an GND angeschlossen habe. A0 habe ich 
zwischen den beiden Widerständen angeschlossen.

von Horst S. (Gast)


Lesenswert?

Bitte GANZES Programm in korrekter Forums-Form posten.

von M. K. (sylaina)


Lesenswert?

Code (in Code-Tags bitte) sowie ein Foto vom Aufbau wären sicher sehr 
hilfreich, Schaltplan ist auch nicht zu verachten.

von Erwin D. (Gast)


Lesenswert?

Arduino_Mann schrieb:
> Was noch komischer ist das
> ich an A1:19, A2:20, A3:21, A4:22 und an A5:23 auslese.

Was willst du mit diesem Satz ausdrücken?

von Arduino_Mann (Gast)


Lesenswert?

wenn ich mit analogRead(A1) A1 auslese und mit dem Befehl 
Serial.println(A1) A1 ausgebe erhalte ich 19 im Seriellen Monitor

von Arduino_Mann (Gast)


Lesenswert?

void setup() {
analogWrite(A0, Input)

}

void loop() {
 analogRead(A0);
 Serial.println(A0);

}

von Captain Albern (Gast)


Lesenswert?

A1 scheint eine Konstante zu sein, die den Port angibt. Mit 
Serial.println(A1) gibst du diese Konstante aus.

Du solltest Serial.println(analogRead(A1)) ausgeben. (Falls A1 
tatsächlich den richtigen Pin bezeichnet).

Keine Haftung für Rechtschreibung der Befehle.

von Frank L. (hermastersvoice)


Lesenswert?

analogwrite und analogread auf demselben Port? Was genau soll das 
bewirken?
Wie wäre es wenn du dir mal ansiehst was die Befehle eigentlich tun?

von M. K. (sylaina)


Lesenswert?

Captain Albern schrieb:
> A1 scheint eine Konstante zu sein, die den Port angibt. Mit
> Serial.println(A1) gibst du diese Konstante aus.
>
> Du solltest Serial.println(analogRead(A1)) ausgeben. (Falls A1
> tatsächlich den richtigen Pin bezeichnet).
>
> Keine Haftung für Rechtschreibung der Befehle.

Ja, das ist quasi richtig erklärt aber es wäre schön gewesen, wenn du 
vorher mal geschaut hättest, was A1 beim Arduino bedeutet.

@TE

Wie der Captain gesagt hat gibst du nur die Konstante aus, die hinter A1 
steht. Das ist natürlich Mumpitz. Du musst das etwa so schreiben:
1
void setup() {
2
  analogWrite(A0, Input);
3
4
}
5
6
void loop() {
7
 
8
  Serial.println(analogRead(A0));
9
10
}

oder
1
void setup() {
2
  analogWrite(A0, Input);
3
  uint16_t value;
4
5
}
6
7
void loop() {
8
  value = analogRead(A0);
9
  Serial.println(value);
10
11
}

von Arduino_Mann (Gast)


Lesenswert?

Vielen Dank jetzt weiß ich was mein Fehler war

von Arduino_Mann (Gast)


Lesenswert?

Zweite Frage:
Ich habe folgendes Programm geschrieben in dem von 1-6 gezählt wird, 
kann ich mit dem Programm wenn es bei 6 angekommen ist wieder zurück 
nach 1 zählen also dann von 6-1?

1
int i = 0;
2
3
4
void setup() {
5
 pinMode(2, OUTPUT);
6
 pinMode(3, OUTPUT);
7
 pinMode(4, OUTPUT);
8
 pinMode(5, OUTPUT);
9
 pinMode(6, OUTPUT);
10
 pinMode(7, OUTPUT);
11
}
12
13
void loop() {
14
  if((i=1)|| (i=12)){
15
    digitalWrite(2, HIGH);
16
    Serial.println("1");
17
    delay(1000);
18
     }
19
     else{
20
     digitalWrite(2, LOW);
21
     }
22
  if((i=2)|| (i=11)){
23
    digitalWrite(3, HIGH);
24
    Serial.println("2");
25
    delay(1000);
26
  }
27
     else{
28
      digitalWrite(3, LOW);
29
     }
30
  if((i=3)|| (i=10)){
31
    digitalWrite(4, HIGH);
32
    Serial.println("3");
33
    delay(1000);
34
  }
35
     else{
36
      digitalWrite(4, LOW);
37
     }
38
  if((i=4)|| (i=9)){
39
    digitalWrite(5, HIGH);
40
    Serial.println("4");
41
    delay(1000);
42
     }
43
     else{
44
     digitalWrite(5, LOW);
45
     }
46
  if((i=5)|| (i=8)){
47
    digitalWrite(6, HIGH);
48
    Serial.println("5");
49
    delay(1000);
50
  }
51
     else{
52
      digitalWrite(6, LOW);
53
     }
54
  if((i=6)|| (i=7)){
55
    digitalWrite(7, HIGH);
56
    Serial.println("6");
57
    delay(1000);
58
    
59
  }
60
     else{
61
      digitalWrite(7, LOW);
62
     }
63
}

von Arduino_Mann (Gast)


Lesenswert?

Das Programm oben ist nicht ganz richtig.
Ich habe es folgender maßen versucht:
1
int i = 0;
2
3
4
void setup() {
5
 pinMode(2, OUTPUT);
6
 pinMode(3, OUTPUT);
7
 pinMode(4, OUTPUT);
8
 pinMode(5, OUTPUT);
9
 pinMode(6, OUTPUT);
10
 pinMode(7, OUTPUT);
11
}
12
13
void loop(){
14
  while(i=0, i=12, i++){
15
  if((i=1)|| (i=12)){
16
    digitalWrite(2, HIGH);
17
    Serial.println("1");
18
    delay(1000);
19
     }
20
     else{
21
     digitalWrite(2, LOW);
22
     }
23
  if((i=2)|| (i=11)){
24
    digitalWrite(3, HIGH);
25
    Serial.println("2");
26
    delay(1000);
27
  }
28
     else{
29
      digitalWrite(3, LOW);
30
     }
31
  if((i=3)|| (i=10)){
32
    digitalWrite(4, HIGH);
33
    Serial.println("3");
34
    delay(1000);
35
  }
36
     else{
37
      digitalWrite(4, LOW);
38
     }
39
  if((i=4)|| (i=9)){
40
    digitalWrite(5, HIGH);
41
    Serial.println("4");
42
    delay(1000);
43
     }
44
     else{
45
     digitalWrite(5, LOW);
46
     }
47
  if((i=5)|| (i=8)){
48
    digitalWrite(6, HIGH);
49
    Serial.println("5");
50
    delay(1000);
51
  }
52
     else{
53
      digitalWrite(6, LOW);
54
     }
55
  if((i=6)|| (i=7)){
56
    digitalWrite(7, HIGH);
57
    Serial.println("6");
58
    delay(1000);
59
    
60
  }
61
     else{
62
      digitalWrite(7, LOW);
63
     }
64
}
65
}

von Kilo K. (kilo81)


Lesenswert?

ich glaube das:
1
while(i=0, i=12, i++){

wird schon mal nicht funktionieren da i nur nochzählt solange i=12 ist.
Richtig müsste es sein:
1
while(i=0, i<12, i++){

solange i kleiner 12 ist soll er hochzählen.


Dann sowas:
1
if((i=5)|| (i=8)){

Zuweisungen werden mit einem "=" geschrieben.
Bei Vergleichen in einer if Abfrage werden jedoch zwei "==" benutzt.
1
int i=0;
2
if(i==1) { blablablubb }
So, mal als Laie ausgedrückt

von Zeno (Gast)


Lesenswert?

Arduino_Mann schrieb:
> void loop() {
>  analogRead(A0);
>  Serial.println(A0);
>
> }

analogRead ist doch meines Wissens eine Funtion? Da müßte es doch so 
gemacht werden:
1
long INPUT;
2
INPUT=analogRead(A0);
3
Serial.println(INPUT);

oder
1
Serial.println(analogRead(A0));

von Äxl (geloescht) (Gast)


Lesenswert?

als long #issklar. 10Bit gehen bis 1023...

von Arduino_Mann (Gast)


Lesenswert?

So funktioniert es jetzt:
1
//__________Wichtige_Information___________//
2
//__Version_1.0____________________________//
3
//__Erstellt_am:_08.05.2018________________//
4
//_Geändert_am:____________________________//
5
//_________________________________________//
6
//_Funktion_des_Programms:_________________//
7
//_In_diesem_Programm_wird_ein_Lauflicht___//
8
//_generiert_das_vor-_und_rückwärst_läuft._//
9
//_Außerdem_wird_im_seriellen_Monitor_von__//
10
//_1-6_und_dann_wieder_zurück_von_6-1______//
11
//_gezählt.________________________________//
12
13
14
15
16
int i = 0;                        //Variable i festlegen
17
18
19
void setup() {                    
20
 pinMode(2, OUTPUT);              //Digital Pin als Ausgang festlegen
21
 pinMode(3, OUTPUT);              //Digital Pin als Ausgang festlegen
22
 pinMode(4, OUTPUT);              //Digital Pin als Ausgang festlegen
23
 pinMode(5, OUTPUT);              //Digital Pin als Ausgang festlegen
24
 pinMode(6, OUTPUT);              //Digital Pin als Ausgang festlegen
25
 pinMode(7, OUTPUT);              //Digital Pin als Ausgang festlegen
26
}
27
28
void loop(){
29
  for(i=0; i<11; i++){            //For Schleife
30
  if((i==1)|| (i==11)){           //Im Vorlauf wenn i=1/ Im Rücklauf wenn I=11 
31
    digitalWrite(2, HIGH);        // Setzen des zweiten Augangs auf HIGH (Vorlauf)
32
    digitalWrite(3, LOW);         // Setzen des dritten Ausgangs auf LOW (Rücklauf)
33
    Serial.println("1");          // Das Schreiben einer "1" im Seriellen Monitor
34
    delay(500);                   // Verzögerung
35
     }
36
   
37
  if((i==2)|| (i==10)){           //Im Vorlauf wenn i=2/ Im Rücklauf wenn I=10
38
    digitalWrite(3, HIGH);        // Setzen des dritten Augangs auf HIGH (Vorlauf)
39
    digitalWrite(2, LOW);         // Setzen des zweiten Ausgangs auf LOW (Vorlauf)
40
    digitalWrite(4, LOW);         // Setzen des vierten Ausgangs auf LOW (Rücklauf)
41
    Serial.println("2");          // Das Schreiben einer "2" im Seriellen Monitor
42
    delay(500);                   // Verzögerung
43
  }
44
   
45
  if((i==3)|| (i==9)){           //Im Vorlauf wenn i=3/ Im Rücklauf wenn I=9
46
    digitalWrite(4, HIGH);       // Setzen des vierten Augangs auf HIGH (Vorlauf)
47
    digitalWrite(3, LOW);        // Setzen des dritten Ausgangs auf LOW (Vorlauf)
48
    digitalWrite(5, LOW);        // Setzen des fünften Ausgangs auf LOW (Rücklauf)
49
    Serial.println("3");         // Das Schreiben einer "3" im Seriellen Monitor
50
    delay(500);                  // Verzögerung
51
  }
52
    
53
  if((i==4)|| (i==8)){           //Im Vorlauf wenn i=4/ Im Rücklauf wenn I=8
54
    digitalWrite(5, HIGH);       // Setzen des fünften Augangs auf HIGH (Vorlauf)
55
    digitalWrite(4, LOW);        // Setzen des vierten Ausgangs auf LOW (Vorlauf)
56
    digitalWrite(6, LOW);        // Setzen des sechsten Ausgangs auf LOW (Rücklauf)
57
    Serial.println("4");         // Das Schreiben einer "4" im Seriellen Monitor
58
    delay(500);                  // Verzögerung
59
     }
60
    
61
  if((i==5)|| (i==7)){           //Im Vorlauf wenn i=5/ Im Rücklauf wenn I=7
62
    digitalWrite(6, HIGH);       // Setzen des sechsten Augangs auf HIGH (Vorlauf)
63
    digitalWrite(5, LOW);        // Setzen des fünften Ausgangs auf LOW (Vorlauf)
64
    digitalWrite(7, LOW);        // Setzen des siebten Ausgangs auf LOW (Rücklauf)
65
    Serial.println("5");         // Das Schreiben einer "5" im Seriellen Monitor
66
    delay(500);                  // Verzögerung
67
  }
68
    
69
  if(i==6){                      //Im Vorlauf wenn i=6/ Im Rücklauf wird diese If verknüpfung überspungen da sie sonst zweimal ausgeführt wird.
70
    digitalWrite(7, HIGH);       // Setzen des siebten Augangs auf HIGH (Vorlauf)
71
    digitalWrite(6, LOW);        // Setzen des sechsten Ausgangs auf LOW (Vorlauf)
72
    Serial.println("6");         // Das Schreiben einer "6" im Seriellen Monitor
73
    delay(500);                  // Verzögerung
74
    
75
  }
76
}
77
}

von Zeno (Gast)


Lesenswert?

Äxl (geloescht) schrieb:
> als long #issklar. 10Bit gehen bis 1023...

Reg Dich mal wieder ab.

Da ich Arduino eher nicht benutze ist mir die Auflösung des AD Wandlers 
von Selbigen eher nicht geläufig.

Es ging hier auch eher ums Prinzip, das die genannte Funktion einen 
ganzzahligen Wert zurück gibt. Du darfst natürlich gern einen uint16 
einsetzen. Der würde dann bis 16Bit gehen, was der Arduino auch können 
soll, wie ich gerade nachgelesen habe.

von ArduHelp (Gast)


Lesenswert?

Mach das Delay aus der Schleife, mach bei digitalisiere als Pinnummer 
eine Variable (hint: x) und was macht analogWrite(A0, INPUT) bitte? Wie 
wärs mit pinmode?

von ArduHelp (Gast)


Lesenswert?

digitalisiere soll natürlich DigitalWrite heißen

von Stefan F. (Gast)


Lesenswert?

Abwechselnd hoch und runter zählen macht man so:
1
void loop()
2
{
3
    for (int i=1; i<=5; i++) // 1,2,3,4,5,6
4
    {
5
        anzeigen(i);
6
        delay(500);
7
    }
8
    for (int i=5; i>=2; i--) // 5,4,3,2
9
    {
10
        anzeigen(i);
11
        delay(500);
12
    }
13
}

Aber eigentlich sollte man die loop() immer möglichst rasch verlassen, 
indem man das ganze Ereignisorientiert statt mit Wiederholschleifen 
umsetzt.
1
int i=0;
2
int schritt=1;
3
long lastTime=millis();
4
5
void loop()
6
{
7
    long jetzt=millis();
8
    if (jetzt-lastTime>500)
9
    {
10
        // eine halbe Sekunde ist verstrichen
11
        lastTime=jetzt;
12
13
        // i erhöhen oder verringern
14
        i += schritt;
15
        
16
        anzeigen(i);
17
18
        // Laufrichtung ggf. umschalten
19
        if (i==6)
20
        {
21
            // Ab jetzt rückwärts zählen
22
            schritt=-1; 
23
        }
24
        if (i==1)
25
        {
26
            // Ab jetzt vorwärts zählen
27
            schritt=1;
28
        }        
29
    }
30
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.