if(variable = 1) klappt nicht

hi hier ist wieder der 14 jährige der nicht progammieren kann
könnt ihr mir helfen nnachdem ich diesen text jetzt zum 4. mal neu schreibe da er jedesmal abgestürzt ist
ich möchte 6 analoge kanäle auslesen und sobald ein kanal seinen mindestwert überschreitet soll er seine variable [jeder kanal hat seine eigene] auf null setzen damit der kanal nicht nocheinmal auslöst und dann seriell scheiben welcher kanal grad ausgelöst hat
(soll am ende für ein quiz werden)
problem ist ich kann irgendwie keine variable erstellen die ich mit if(variable = ...) auslesen kann und später dann umschreiben kann
wen ich den code zum laufen bekomme dann copier ich den für alle 6 analogen kanäle
schonmal danke das du dieses thema geöffnet hast würde mich über hilfe freuen

void setup() {

  #define TOGGLE1 0               //setze lesebereitschaft auf aus für spieler 1
  #define TOGGLE2 0                 //setze lesebereitschaft auf aus für spieler 2
  #define TOGGLE3 0                 //setze lesebereitschaft auf aus für spieler 3
  #define TOGGLE4 0                 //setze lesebereitschaft auf aus für spieler 4
  #define TOGGLE5 0                 //setze lesebereitschaft auf aus für spieler 5
  #define TOGGLE6 0                 //setze lesebereitschaft auf aus für spieler 6
  #define TRIGGER1 10                //schwelle für das auslösen von spieler 1
  #define TRIGGER2 10                //schwelle für das auslösen von spieler 2
  #define TRIGGER3 10                //schwelle für das auslösen von spieler 3
  #define TRIGGER4 10                //schwelle für das auslösen von spieler 4
  #define TRIGGER5 10                //schwelle für das auslösen von spieler 5
  #define TRIGGER6 10                //schwelle für das auslösen von spieler 6
  pinMode (2 ,OUTPUT);               //definiere pin 2 als ausgang
  pinMode (3 ,OUTPUT);               //definiere pin 3 als ausgang
  pinMode (4 ,OUTPUT);               //definiere pin 4 als ausgang
  pinMode (5 ,OUTPUT);               //definiere pin 5 als ausgang
  pinMode (6 ,OUTPUT);               //definiere pin 6 als ausgang
  pinMode (7 ,OUTPUT);               //definiere pin 7 als ausgang
  digitalWrite (2 ,LOW);             //deaktiviere die led an pin 2 (um bugs zu beheben)
  digitalWrite (3 ,LOW);             //deaktiviere die led an pin 3 (um bugs zu beheben)
  digitalWrite (4 ,LOW);             //deaktiviere die led an pin 4 (um bugs zu beheben)
  digitalWrite (5 ,LOW);             //deaktiviere die led an pin 5 (um bugs zu beheben)
  digitalWrite (6 ,LOW);             //deaktiviere die led an pin 6 (um bugs zu beheben)
  digitalWrite (7 ,LOW);             //deaktiviere die led an pin 7 (um bugs zu beheben)
  Serial.begin (250000);
/*
  //dieser absatz dient nur zum testen ohne den reset jedes mal zu nutzen für diesen falle einfach die zeichen vor und nach dem code entfernen
  #define TOGGLE1 1                  //setze lesebereitschaft auf an für spieler 1
  #define TOGGLE2 1                  //setze lesebereitschaft auf an für spieler 2
  #define TOGGLE3 1                  //setze lesebereitschaft auf an für spieler 3
  #define TOGGLE4 1                  //setze lesebereitschaft auf an für spieler 4
  #define TOGGLE5 1                  //setze lesebereitschaft auf an für spieler 5
  #define TOGGLE6 1                  //setze lesebereitschaft auf an für spieler 6
*/
}

void loop() {
      if (TOGGLE1 == 1)              //schalter der nach einmaligem auslösen nicht mehr auslösen soll da beim 2. auslösen dann die variable auf null stehen soll
        {
         if (analogRead (0) >= 10)
          {
           Serial.write ("1");
           #define TOGGLE1 0
          }
        }
}
Int test1 = 0;

Loop

Test1 = Analogread(0);

if ((TOGGLE1 == 1)  && (test1 >= 10)) )
        {
         Mach was
}

Nur grob als Gedanke.

#define TOGGLE1 0

Ließ mal nach was #define macht. Nicht was du denkst

Serenifly:

#define TOGGLE1 0

Ließ mal nach was #define macht. Nicht was du denkst

und auch icht was ich von dem will das ist ja das problem ich habe keine ahnug wie ich toggle als veränderbare variable erstelle und abfrage

Micha383:

Int test1 = 0;

Loop

Test1 = Analogread(0);

if ((TOGGLE1 == 1)  && (test1 >= 10)) )
       {
        Mach was
}




Nur grob als Gedanke.

gäbe es die möglichkeit das ganze in 2 versetzten if befehlen zu machen (erst wenn if1 ist ja dann startet if2) eher ist mir wichtig wie ich toggle belege und auslese/anschließend umschreibe
nehme gerne noch vorschläge an binn jetzt aber bis 19:30 c.a. bei der jugendfeuerwehr schüssikowski XD

#define TOGGLE1 0 ersetzt vor dem Kompilieren den Text “TOGGLE” mit “1”.

toggle als veränderbare variable erstelle und abfrage

Wie alle anderen Variablen:

zB außerhalb der Funktionen schreibst Du
int toggle;

Außerdem müssen #define außerhalb der Funktionen definiert werden.

Du solltest mal die Anfängerbeispiele irgendeines Tutorial durcharbeiten.

Grüße Uwe

Und wie serenifly schon schrieb, auch mal lesen, das macht schlauer. :wink:

#define

Schon in deinem Thread-Thema ist ein Fehler:

if(variable = 1)

sollte sein:

if(variable == 1)

Außerdem müssen #define außerhalb der Funktionen definiert werden.

Müssen nicht. Aber Makros folgen keinerlei Scope Regeln

#define TOGGLE1 0 ersetzt vor dem Kompilieren den Text "TOGGLE" mit "1".

Einspruch:
Wenn zwischen TOGGLE und 1 kein Leerzeichen ist, ist es eher so, dass der Text TOGGLE1 durch 0 eretzt wird.
Die Anweisung

 if ((TOGGLE1 == 1) && ... ) {
   ...
  }

ist dann das gleiche wie

 if ((0 == 1) && ... ) {
   ...
  }

und wird schon vom Compiler erbarmungslos komplett entfernt, egal was an Stelle der ... da steht.

Nachtrag: Das eigentliche Problem ist: die #define werden vor dem Übersetzen aufgelöst, nicht zur Laufzeit auf dem Arduino. Dafür sind Variable da.

byte TOGGGLE1 = 1;
void loop() {
      if (TOGGLE1 == 1)      //schalter der nach einmaligem auslösen nicht mehr auslösen soll 
      {
         if (analogRead (0) >= 10)
          {
           Serial.write ("1");
           TOGGLE1= 0;
          }
      }
}

TOGGLE1 muss eine Variable sein, sonst kann es nicht gehen.


  if (variable = 1)  ist übrigens richtig: variable erhält den Wert1und der Block nach dem if wird immer ausgeführt. Dass das wahrscheinlich nicht so gedacht war, ist ein anderes Thema.

[/code]

Define merke ich mir so: es entspricht am ehesten der Suchen und ersetzen Funktion eines Editors. Wird beim Übersetzen benutzt, nicht im Programmablauf.

Willst du vergleichen musst du == benutzen

Willst du was ändern musst du = benutzen

If (toggle == 1) -> wenn Variable Toggle auf 1 ist, dann...
toggle = 0 -> Setzt die Variable toggle auf 0
If (toggle =1) -> setzt variable toggle auf 1 und vergleicht ob es true ist. True ist mit 1 definiert. IF ist also immer wahr und wird immer ausgeführt
If (toggle = 0) -> setzt die variable auf 0 und führt folglich If nie aus.

Eigentlich gehört das zu den Grundlagen der C-Programmierung, weniger zum speziellen des Arduinos.

Aber wie die Jugend so ist: wozu lesen wenn ich probieren kann. Ich würde mich da aber all den Vorrednern anschliessen: Lese mal und dann entwickel eigene Dinge. Grundsätzlich scheinst du ja das Zeugs dazu zu haben. Jedenfalls ist dein Code gut dokumentiert und strukturiert.

sketch_jan24a:41: error: 'TOGGLE1' was not declared in this scope

if (TOGGLE1 == 1) //schalter der nach einmaligem auslösen nicht mehr auslösen soll

^

exit status 1
'TOGGLE1' was not declared in this scope
den fehler bekomme ich jetzt immernoch so wie vorher bitte versucht mal meinen code bei euch zu compilen vllt findet ihr meinen fehler ich glaube es liegt immernoch daran das ich
a das auslesen von toggle1 nicht hinbekommen habe oder
b das ich für meinen arduino immernoch nicht dem zeichensatz:"toggle1" einen sinn gegeben habe also kennt er das noch nicht

void setup() {

  byte TOGGLE1 = 0;               //setze lesebereitschaft auf aus für spieler 1
  byte TOGGLE2 = 0;               //setze lesebereitschaft auf aus für spieler 2
  byte TOGGLE3 = 0;               //setze lesebereitschaft auf aus für spieler 3
  byte TOGGLE4 = 0;               //setze lesebereitschaft auf aus für spieler 4
  byte TOGGLE5 = 0;               //setze lesebereitschaft auf aus für spieler 5
  byte TOGGLE6 = 0;               //setze lesebereitschaft auf aus für spieler 6

                   //setze lesebereitschaft auf aus für spieler 6
  #define TRIGGER1 10                //schwelle für das auslösen von spieler 1
  #define TRIGGER2 10                //schwelle für das auslösen von spieler 2
  #define TRIGGER3 10                //schwelle für das auslösen von spieler 3
  #define TRIGGER4 10                //schwelle für das auslösen von spieler 4
  #define TRIGGER5 10                //schwelle für das auslösen von spieler 5
  #define TRIGGER6 10                //schwelle für das auslösen von spieler 6
  pinMode (2 ,OUTPUT);               //definiere pin 2 als ausgang
  pinMode (3 ,OUTPUT);               //definiere pin 3 als ausgang
  pinMode (4 ,OUTPUT);               //definiere pin 4 als ausgang
  pinMode (5 ,OUTPUT);               //definiere pin 5 als ausgang
  pinMode (6 ,OUTPUT);               //definiere pin 6 als ausgang
  pinMode (7 ,OUTPUT);               //definiere pin 7 als ausgang
  digitalWrite (2 ,LOW);             //deaktiviere die led an pin 2 (um bugs zu beheben)
  digitalWrite (3 ,LOW);             //deaktiviere die led an pin 3 (um bugs zu beheben)
  digitalWrite (4 ,LOW);             //deaktiviere die led an pin 4 (um bugs zu beheben)
  digitalWrite (5 ,LOW);             //deaktiviere die led an pin 5 (um bugs zu beheben)
  digitalWrite (6 ,LOW);             //deaktiviere die led an pin 6 (um bugs zu beheben)
  digitalWrite (7 ,LOW);             //deaktiviere die led an pin 7 (um bugs zu beheben)
  Serial.begin (250000);
/*
  //dieser absatz dient nur zum testen ohne den reset jedes mal zu nutzen für diesen falle einfach die zeichen vor und nach dem code entfernen
  byte TOGGLE1 = 1;               //setze lesebereitschaft auf an für spieler 1
  byte TOGGLE2 = 1;               //setze lesebereitschaft auf an für spieler 2
  byte TOGGLE3 = 1;               //setze lesebereitschaft auf an für spieler 3
  byte TOGGLE4 = 1;               //setze lesebereitschaft auf an für spieler 4
  byte TOGGLE5 = 1;               //setze lesebereitschaft auf an für spieler 5
  byte TOGGLE6 = 1;               //setze lesebereitschaft auf an für spieler 6
  */
}
void loop() {
      if (TOGGLE1 == 1)      //schalter der nach einmaligem auslösen nicht mehr auslösen soll
      {
         if (analogRead (0) >= 10)
          {
           Serial.write ("1");
           TOGGLE1 = 0;
          }
      }
}

Weil Du ihn mit 3G angelegt hast:

byte TOGGGLE1 = 1;

Gruß Tommy

3g was meinst du damit?

Zähle mal die G in Deiner Variable, die ich zitiert habe. Es könnten 3 sein.
In der Verwendung hast Du nur 2 drin.

Gruß Tommy

habs gecheckt war aber leider nicht so ich glaube einfach das es nicht geht eine int variable oder eine byte variable im if(........) auszulesen kann ich da irgendwie nachhelfen

und nochwas sollte einer bereit dazu sein am wochenende per videokonferenz (skype) es mir zu erklären das das ganze dann etwas schneller evtl geht der kann mich ja mal per pm anschreiben oder schickt mir ne mail (joro28062002@gmail.com)

Du hast es immer noch nicht geschnallt.

byte TO**GGGLE1 = 1;
void loop() {
if (TO
GGLE1 == 1) //schalter der nach einmaligem auslösen nicht mehr auslösen soll
{
if (analogRead (0) >= 10)
{
Serial.write ("1");
TO
GG**LE1= 0;
}
}
}

Gruß Tommy

JohannesRoering:
und nochwas sollte einer bereit dazu sein am wochenende per videokonferenz (skype) es mir zu erklären das das ganze dann etwas schneller evtl geht der kann mich ja mal per pm anschreiben oder schickt mir ne mail (joro28062002@gmail.com)

Vergiß es!
Ich gebe keine Arduino-Nachhilfestunden per Skype-Videokonferenz!
NIE!
Ich habe noch nicht mal eine Webcam!
Und ansonsten: Zehn Tage vor Heiligabend 2016 habe ich Dir in Deinem anderen Thema ein fertiges Beispielprogramm zum Testen gepostet! Mein letzter Stand: Du hattest wohl Dein einziges Arduino-Board durch einen Kurzschluss mit einer Büroklammer geschrottet und wolltest Dich wieder melden, wenn Du ein brauchbares Board hast.

Bis heute keine Rückfrage oder Rückmeldung zu dem von mir geposteten Programmcode.
Jetzt sehe ich, dass Du hier ein "Neues Thema" zum selben Quiz-Buzzer-System gestartet hast und wieder nach Hilfe fragst.

OK, was kümmert mich mein Geschwätz von gestern?
Ich habe jedenfalls heute alle meine Beiträge in Deinem alten Thema gelöscht.
Dich interessiert das dort gepostete Programm ja offenbar überhaupt nicht.
Mich auch nicht, denn bei Bedarf schreibe ich sowas ruckzuck neu.
Also wenn es sowieso niemanden interessiert, nicht mal Dich als Starter des Themas im Dezember:
WEG DAMIT!
UND AB DAFÜR!

bitte versucht mal meinen code bei euch zu compilen

Das hätte ich mit meinem Beispiel natürlich auch machen können. Sorry. :-*
Hab auch lange gebraucht, meinen TOGGGLE1 - Fehler zu sehen.

Danke, Tommy.

Ich habe jetzt nicht geschaut, von wem der Code ist.
Aber der TO hat sich schon ziemlich hartleibig im Verständnis gezeigt.
Wnn man das in Verbindung mit Jurs Einlassung betrachtet - wohl vergebene Liebesmüh.

Gruß Tommy