Promblem mit den Analogen Eingängen des Arduino

Gast #5415808
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.
Gast #5415898
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.
#5415922
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
}
Gast #5416010
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
}
Gast #5416013
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
}
#5416020
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
Gast #5416103
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
}
Gast #5416665
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.
Gast #5417450
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren