Forum: Mikrocontroller und Digitale Elektronik Fehler Im Arduino code


von Stephan Cacher (Gast)


Lesenswert?

Habe einen Code geschrieben der eine Tastenkombi mit zwei tastern in ein 
Arrray schreiben soll, und dieses stück für stück wieder ausgibt. Aber 
irgendwie bekomme ich nur Ausgaben wie:
L



2
ö



2
1
 const int buttonPinRot = 4;
2
const int buttonPinBlau = 5;
3
int rot = 0;
4
int blau = 0;
5
int bpr = buttonPinRot;  //PinShorts
6
int bpb = buttonPinBlau;
7
int i= 0;  
8
char prv = rot;        //Pinvariablen
9
char pbv = blau;
10
char Muster1[5] = {
11
  rot, blau, blau, rot, rot};
12
char Muster1vgl[]={
13
};
14
//
15
//=========================================Setup===============================================================================
16
//
17
void setup() {
18
  pinMode(buttonPinRot, INPUT); //PinModeDeclarations
19
  pinMode(buttonPinBlau, INPUT);
20
  Serial.begin(9600); // debug
21
22
}
23
//
24
//=========================================Loop===============================================================================
25
//
26
void loop() {
27
 for (int i=1; i < 6; i++){
28
    do {
29
      delay(20);
30
    }
31
    while((digitalRead(bpr) == LOW) && (digitalRead(bpb) == LOW));
32
33
      if (digitalRead(bpr == HIGH)){
34
        Muster1vgl[i] =  prv;
35
        //blink rote LED
36
        delay(10);
37
      }
38
    if (digitalRead(bpr == HIGH)){
39
      Muster1vgl[i] =  pbv;
40
      //blink blaue LED
41
      delay(10);
42
    }
43
  }
44
Serial.println (Muster1vgl[0]);
45
Serial.println (Muster1vgl[1]);
46
Serial.println (Muster1vgl[2]);
47
Serial.println (Muster1vgl[3]);
48
Serial.println (Muster1vgl[4]);
49
50
}
An Pin 4 und 5 digital sind Taster angeschlossen die 5 Volt auf die Pins 
geben. Zusätzlich hängen die Pins mit PDwiderstand an 0V

von Helmut H. (helmuth)


Lesenswert?

Das sind die Anfangswerte in Muster1vgl[]. Wenn du Muster1vgl[] 
initialisiert (z.B. mit 'a','b','c'...), dann siehst du, dass die Werte 
sich nicht ändern.
Warum?
1
  if (digitalRead(bpr == HIGH))

sollte sein
1
  if (digitalRead(bpr) == HIGH)

: Bearbeitet durch User
von Leonard S. (leonard_s)


Lesenswert?

Das war ein grober Fehler danke, aber geändert hat sich bis dato noch 
nichts. Könnte es sein, dass ich es oben bei der Deklaration der char 
Variablen versaut hab? Es kommt immer noch der gleiche Mist raus.

von Helmut H. (helmuth)


Lesenswert?

Es sind noch einige Verbesserungen möglich.

Stephan Cacher schrieb:
> An Pin 4 und 5 digital sind Taster angeschlossen die 5 Volt auf die Pins
> geben. Zusätzlich hängen die Pins mit PDwiderstand an 0V
Die würde ich mit Pullup betreiben. Schau mal bei 
File/Examples/02Digital/DigitalInputPullup

prv und prb sind beide gleich (0)

Du wirfst Zeichen und Zahlen durcheinander
1
Muster1vgl[i] =  prv;
setzt das Ausgabezeichen auf ASCII 0, d.h. da wird nichts angezeigt.

Verwende doch mal z.B. 'R' und 'B'
1
Muster1vgl[i] =  'R';

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

1
char Muster1vgl[]={
2
};
->
1
char Muster1vgl[5];

von Leonard S. (leonard_s)


Lesenswert?

Endlich klappt es so wie ich es ungefähr wollte. Vielen Dank erstmal 
dafür.
Will ich jetzt aber mein neues Array mit meinem Original Array 
vergleichen kommt folgende Fehlermeldung:
1
#include <Bounce.h>
2
const int buttonPinRot = 4;
3
const int buttonPinBlau = 5;
4
int rot = 0;
5
int blau = 0;
6
int bpr = buttonPinRot;  //PinShorts
7
int bpb = buttonPinBlau;
8
int i= 0;  
9
const char Muster1[5] = {
10
  rot, blau, blau, rot, rot};
11
char Muster1vgl[5]={
12
};
13
//
14
//=========================================Setup===============================================================================
15
//
16
void setup() {
17
  pinMode(buttonPinRot, INPUT); //PinModeDeclarations
18
  pinMode(buttonPinBlau, INPUT);
19
  Serial.begin(9600); // debug
20
21
}
22
//
23
//=========================================Loop===============================================================================
24
//
25
void loop() {
26
27
  EingabeCheck1();
28
  Serial.println("Fertig");
29
  if ((Muster1[0] = Muster1vgl[0]) && (Muster1[1] = Muster1vgl[1]) && (Muster1[2] = Muster1vgl[2]) && (Muster1[3] = Muster1vgl[3]) 
30
  &&  (Muster1[0] = Muster1vgl[0])) {
31
    Serial.println("SUCCESS");
32
  }
33
34
}
Cache_ArrayChange.ino: In function 'void loop()':
Cache_ArrayChange:29: error: assignment of read-only location 
'Muster1[0]'
Cache_ArrayChange:29: error: assignment of read-only location 
'Muster1[1]'
Cache_ArrayChange:29: error: assignment of read-only location 
'Muster1[2]'
Cache_ArrayChange:29: error: assignment of read-only location 
'Muster1[3]'
Cache_ArrayChange:30: error: assignment of read-only location 
'Muster1[4]'

von Mark B. (markbrandis)


Lesenswert?

= ist der Zuweisungsoperator
== ist der Vergleichsoperator

Ein gern gemachter Fehler, diese zu verwechseln bzw. sich zu vertippen.

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.