Go Down

Topic: Integer nicht akzeptiert?! (Read 173 times) previous topic - next topic

anikin2003

Ich habe da ein Problem mit einem Programm für den Arduino Nano. Und zwar meint der Kompiler, dass er meine Variablen die ich am Anfang als Integer festgelegt habe nicht kennt.
Ich habe für die Schule in meiner Technik-FiP ein elektronisches Tic-Tac-Toe geplant mit RGB-LEDs. Da diese eine PWM-Pins benötigen, habe ich noch Mikrocontroller (Tlc5940), dazu implementiert.
Ich hoffe ihr könnt mir helfen und sagen warum das nicht geht.

https://create.arduino.cc/editor/anikin2003/1f2b5cd0-95bc-4592-9aeb-4bd2b017ee82/preview

Tommy56

Variablen, die in einer Funktion (hier setup()) angelegt werden, sind nur innerhalb dieser Funktion bekannt.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

HotSystems

Poste deinen Sketch bitte hier im Forum in Code-Tags.

Und welche Variable wird nicht akzeptiert ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

MicroBahner

Alle nicht, da er alle im setup() definiert. Das muss alles außerhalb von Funktionen (global) definiert werden.
Gruß, Franz-Peter

noiasca

Ich habe da ein Problem mit einem Programm für den Arduino Nano. Und zwar meint der Kompiler, dass er meine Variablen die ich am Anfang als Integer festgelegt habe nicht kennt.
Ich habe für die Schule in meiner Technik-FiP ein elektronisches Tic-Tac-Toe geplant mit RGB-LEDs. Da diese eine PWM-Pins benötigen, habe ich noch Mikrocontroller (Tlc5940), dazu implementiert.
Ich hoffe ihr könnt mir helfen und sagen warum das nicht geht.
bin immer wieder positiv überrascht, dass der Compiler so geschickt ist, und dir mitteilt, dass er die ints nicht mag.

da ist wohl nichts dabei was ein int rechtfertigt, das kannst alles auf Byte umbauen.
Code: [Select]

  //first led
  int first_led[] = {0, 1, 2};
  //second led
  int second_led[] = {3, 4, 5};
  //third led
  int third_led[] = {6, 7, 8};
  //fourth led
  int fourth_led[] = {9, 10, 11};
  //fifth led
  int fifth_led[] = {12, 13, 14};
  //sixth led
  int sixth_led[] = {15, 16, 17};
  //seventh led
  int seventh_led[] = {18, 19, 20};
  //eighth led
  int eighth_led[] = {21, 22, 23};
  //ninth led
  int ninth_led[] = {24, 25, 26};
  //player1 led
  int player1_led[] = {27, 28, 29};
  //player2 led
  int player2_led[] = {30, 31};
  int player2_blue = 8; //on arduino
  pinMode(player2_blue, OUTPUT);
  //buttons
  int first_button = 7;
  int second_button = 6;
  int third_button = 5;
  int fourth_button = 4;
  int fifth_button = 2;
  int sixth_button = A0;
  int seventh_button = A1;
  int eighth_button = A2;
  int ninth_button = A3;


und außerdem:
viele deiner Variablen kannst und sollst du const machen.
und wenn du schon dabei bist, lösche die Kommentare, selbst ich habe spätestens nach //third led verstanden, dass nun ein array für die dritte LED kommt.

Und in der Sache wie schon von Vorposter geschrieben:
Wenn du sie gezielt aus dem Setup ins globale verschiebst (also vor setup) dann wird das möglicherweise sogar klappen.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

postmaster-ino

Hi

Oder anders ausgedrückt:
ALLES, was Du innerhalb von Klammern erstellst, bleibt darin gefangen (oder wird am Ende der Klammer vernichtet).

Außerhalb erstellte Variablen sind global und überall sichtbar, können aber von Lokalen überdeckt werden!
lokale Variablen werden bei jedem 'vorfinden' neu erzeugt, damit gearbeitet und am Ende der Funktion/des IF-Block/whatever wieder entfernt/vernichtet.
Das Entfernen kann durch 'static' verhindert werden, dann bleiben die Variablen erhalten, sind aber nur innerhalb der Klammerebene (und tiefer) sichtbar.

MfG

PS: Gerade, wenn man Anderen Was beibringen will(soll), sollte man doch halbwegs wissen, was man tut.
Bereits erwähnte Typenwahl der Variablen zum Beispiel.
Für Pin-Nummern z.B. reicht byte, viel mehr als 256 Beinchen haben bisher meine µC nicht - passt somit in ein Byte, kann binnen eines Takt gelesen werden, ohne größere Krämpfe atomar les/beschreibbar.

Dinge, Die sich NIE ändern werden - z.B. besagte Pin-Nummern werden sich während der Laufzeit wohl nicht ändern, const.
Das hilft dem Kompiler, schlankeren Code zu produzieren - was nun auch nicht sonderlich schlecht ist.

Kommentare: Bitte mit Sinn - wie oben schon geschrieben wurde, können die Kinder in der ersten Klasse schon bis drei Zählen - viel wichtiger ist, WAS SOLL dieses Array machen/wofür wird Es benutzt, worin unterscheidet Es Sich von dem anderen Kram?
byte _pinLED=3;  //Anschluss LED 'Störung'
uint32_t lastheartbeat; //'Uhrzeit' des letzten Herzschlag
const uint32_t heartbeattime=3000;  //Wartezeit zwischen Herzschlägen in Millisekunden

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

uwefed

Deine Schreibwütigkeit tut meinen Augen weh. Lerne den Umgang mit Arrays anstatt die Variablen Nummernnamen zu geben.

Grüße Uwe

Doc_Arduino

#7
Feb 13, 2020, 10:00 pm Last Edit: Feb 13, 2020, 10:01 pm by Doc_Arduino
Hallo,

hier muss ich Uwe recht geben. Das ist kaum bis nicht lesbar auf Grund der Code-Vielfachen.
Strukturiere deine Daten im wahrsten Sinne.
Stichtwort 'struct'
Vermeide Spaghetticode, nutze Funktionen, Arrays, for Schleifen.
Deine while mit break, bitte nicht.
Vielleicht ist nach aufräumen switch case eine Option.

Kleines Bsp. womit du bspw. deine Buttons mit wenigen Zeilen "initialisierst".

Code: [Select]

const byte pinButton[] = {7, 6, 5, 4, 2, A0, A1, A2, A3};

void setup(void)
{  
  for (auto &i: pinButton)    // for Range-Based Variante
  {
    pinMode(i, INPUT);
  }
}

void loop(void)
{
}


Mit dem gleichem Schema kannste alle in einem Rutsch abfragen.
i stellt die Indexposition im Array dar. Die Länge wird automatisch ermittelt.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

anikin2003

Hallo nochmal und danke sehr für die ganze Hilfe. Das hat mir schon sehr geholfen. Jedoch habe ich jetzt ein weiteres Problem, und zwar muss ich hier booleans un integers in einer Schleife erstellen und in der nächsten wieder Abfragen. Aber wie mach ich das?

Tommy56

Am Besten, indem Du genauer erklärst, was Du machen willst.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

anikin2003

Also ich möchte, dass wenn ein Spieler seine Farbe gewählt hat, der andere diese nicht mehr nehmen kann. Dazu habe ich bei der Auswahl des ersten Spielers einen boolean erstellt, den ich dann in der nächsten Auswahl nutzen wollte um zu vermeiden, dass beide Spieler eine Farbe haben.

Tommy56

#11
Feb 17, 2020, 03:00 pm Last Edit: Feb 17, 2020, 03:01 pm by Tommy56
Dann biete ihm diese doch einfach nicht an oder wenn es nur 2 Farben gibt, dann hat der 2. automatisch die andere Farbe.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

anikin2003

Ja, das wäre auch eine möglichkeit, aber da muss ich ja trotzdem noch eine variable aus der funktion bringen.

Gruss Tim OwO

Tommy56

Dann gib mal "Funktion C++" in die Suchmaschine Deiner Wahl ein.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up