gelöst : Array abfragen und damit andere Arrays bearbeiten

Hallo Community.

Ich würde gern mit einem Uno, an welchem 12 Taster angeschlossen sind, nach Betätigung eines Tasters ein Zeichen per Serial.write() an einen Raspberry Pi übertragen, der dann abhängig vom empfangenen Zeichen unterschiedliche Aktionen ausführen soll.
Zum Zwecke der Übersichtlichkeit habe ich dafür verschiedene Arrays angelegt. Da ich bisher noch nie mit Arrays gearbeitet habe und mich jetzt daran versuchen wollte wäre es mir eine große Hilfe, wenn jemand über den Code schauen könnte bis mein neuer Arduino irgendwann nächste Woche hier eintrifft.

void setup(){

const byte pins[12] = {2;3;4;5;6;7;8;9;10;11;12;13}; //Array für Pins
char serial[12] = {'a';'b';'c';'d';'e';'f';'g';'h';'i';'j';'k';'l'}; //Zeichen für serielle Übertragung
const byte bstate[12] = {1;1;1;1;1;1;1;1;1;1;1;1}; //aktueller Pin-Status (High, weil Pullup und active Low)
const byte bstatealt[12] = {1;1;1;1;1;1;1;1;1;1;1;1}; //alter Pin-Status

Serial.begin(9600);

for (byte i=0; i < 12; i++) { //Pins setzen als Input, interner Pullup aktiv
    pinMode(pins[i]; INPUT_PULLUP);
}

void loop(){

for (byte a = 0; a < 12; a++) { //Pin-Status in bstate schreiben
    bstate = digitalRead(pins[a]);
if (bstate[a] == 0 && bstate[a] != bstatealt[a]) { //wenn Pin-Status Low und vorher High, dann Serial.write()
   Serial.write(serial[a]);
   bstatealt[a] = bstate[a]; //alter Status = neuer Status
   }
   else {
   bstatealt[a] = bstate[a]; 
   }
}

Dies ist wie gesagt mein erster Versuch mit Arrays. Auch beim Serial.write bin ich mir nicht sicher, ob es so richtig ist (die ' im Array). Es soll der jeweils entsprechende Buchstabe, nicht der Wert übertragen werden (habe gelesen, dass A auch 66 sein kann, wenn nicht richtig definiert).

Vielen Dank im Voraus

Dominik

Das Trennzeichen in Arrays ist das ,
Du kannst in der IDE doch auch ohne Arduino schon kompilieren und so formale Fehler bereits finden.

Gruß Tommy

Stimmt, das habe ich ehrlich gesagt noch nie gemacht :astonished: , habe immer gleich auf hochladen geklickt. Asche auf mein Haupt.

Habe den Code jetzt folgendermaßen verändert:

int pins[12] = {2,3,4,5,6,7,8,9,10,11,12,13};        //Array für Pins
char serial[12] = {'a','b','c','d','e','f','g','h','i','j','k','l'};    //Zeichen für serielle Übertragung
int bstate[12] = {1,1,1,1,1,1,1,1,1,1,1,1};        //aktueller Pin-Status (High, weil Pullup und active Low)
int bstatealt[12] = {1,1,1,1,1,1,1,1,1,1,1,1};       //alter Pin-Status

void setup(){

Serial.begin(9600);

for (byte i=0; i < 12; i++) {             //Pins setzen als Input, interner Pullup aktiv
    pinMode(pins[i], INPUT_PULLUP);
}
}
void loop()
{

for (byte a = 0; a < 12; a++) {             //Pin-Status in bstate schreiben
    bstate = digitalRead(pins[a]);
if (bstate[a] == 0 && bstate[a] != bstatealt[a]) {        //wenn Pin-Status Low und vorher High, dann Serial.write()
   Serial.write(serial[a]);
   bstatealt[a] = bstate[a];              //alter Status = neuer Status
   }
   else {
   bstatealt[a] = bstate[a];              
   }
}
}

Ich bekomme hier noch folgende Fehlermeldung:

/home/dominik/Arduino/Arduino-Radio/Arduino-Radio.ino: In function 'void loop()':
Arduino-Radio:18:33: error: incompatible types in assignment of 'int' to 'int [12]'
     bstate = digitalRead(pins[a]);
                                 ^

Ich verstehe nicht, warum int nicht mit int kompatibel ist :sob:
Hat das etwas mit digitalRead zu tun, wegen HIGH und LOW? Ich dachte, das wäre dasselbe wie 1 und 0.

Dann hast Du Arrays noch nicht wirklich verstanden.
Dein bstate sind 12 int. Du musst ihm schon sagen, an welche Position Du das schreiben willst.

bstate[a] = digitalRead(pins[a]);

Gruß Tommy

lies mal genau wo der fehler ist, nicht bei digitalRead().

Habe es auch gerade gesehen, ist mir wohl durch die Lappen gegangen, an den anderen bstates steht es ja korrekt.
Danke für die Hinweise, jetzt kompiliert es schon mal korrekt. Jetzt muss ich nur noch auf Hermes warten :slight_smile:

Edit: wie kann ich als gelöst markieren?
Edit Edit: Ist aber auch verwirrend, dass die Markierung der Fehlermeldung auf die ) zeigt.

Indem Du den Titel des ersten Postings bearbeitest.

Nö, es zeigt aug einen der beteiligten Werte (der von der Funktion zurückgeliefert wird).

Gruß Tommy

Danke euch beiden für die Hilfe.