Go Down

Topic: Syntax Problem (Read 591 times) previous topic - next topic

Doc_Arduino

Hallo,

µC = Mega 2560

IDE will nicht compilieren, meckert immer bei den if Funktionen mit "expected ';' before '}' token". Ich weis aber beim besten Willen nicht was falsch sein soll. Habe schon mit zusätzlichen ( ) probiert, hilft alles nichts.

Ideen?

Es soll nichts weiter machen als ein Lauflicht in Abhängigkeit des Analogeingangs laufen zu lassen. Geschwindigkeits und Richtungs geregelt.

Quote

int LED = 1;
int analogPin = 7;     // Poti am analog pin A7
int val = 0;           // Potiwert speichern

void setup()
{     
   DDRK = 255;       // Port.K komplett Ausgang
   PORTK = 255;      // Port.K alle Ausgänge Ein
   delay(200);
   PORTK = 0;        // Port.K alle Ausgänge Aus
   delay(500);
}

void loop()
{
   val = analogRead(analogPin/2);    // read the input pin und halbiere

   if (LED < 1) {LED = 128};   // Prüfung ob kleinstes Bit erreicht
   if (LED > 128) {LED = 1};   // Prüfung ob höchstes Bit erreicht

   PORTK = LED;                // Port.K wird neu gesetzt

   if (val >= 256) {LED = LED << 1};    // rechts herum
   if (val <= 255) {LED = LED >> 1};    // links herum

   delay(val);
}
Tschau
Doc Arduino

markbee

Und wenn Du die ganzen Semikolons mal innerhalb der geschweiften Klammern setzt?
;)

XBee blog: http://lookmanowire.blogspot.com/

Doc_Arduino

Hallo,

damit klappt es. Aber warum? Es muß doch jeder Befehl mit einem ; abgeschlossen werden?
Tschau
Doc Arduino

markbee

Ein Befehl schon, aber hier ist es ja eine Bedingung:

if (a == b) {

mache dies;

}

XBee blog: http://lookmanowire.blogspot.com/

uwefed

Die Funktion muß mit einem Semicolon abgeschlossen werden. Die Klammern gruppieren nur mehrere Funktionen.

Code: [Select]
val = analogRead(analogPin/2);    // read the input pin und halbiere
Macht auch nicht das was Du willst. Es leist das halbe Pin und halbiert nicht den gelesenen Wert.
Grüße Uwe

Doc_Arduino

Hallo,

das kompilieren und upload funktioniert, aber der gesamte code sagt auf dem µC "kein Ton".

Wenn ich Euch jetzt sage das der Code, auch mit dem falsch gesetzten Semikolon, im Arduino Simulator funktioniert, dann müßt Ihr bestimmt auch lachen.
Tschau
Doc Arduino

vieledinge


Es muß doch jeder Befehl mit einem ; abgeschlossen werden?


Befehle und Kontrollstrukturen sind aber zweierlei.

Was Du da machst ist eine verkürzte Schreibweise. Technisch ok, aber IMHO bescheiden zu lesen und bei der Fehlersuche eher hinderlich. Ich würde zur üblichen mehrzeiligen Schreibweise raten, das liest sich einfach deutlich besser und macht die Fehlersuche einfacher.

Doc_Arduino

#7
Jan 31, 2013, 09:15 pm Last Edit: Jan 31, 2013, 10:54 pm by Doc_Arduino Reason: 1
Hallo,

okay, habe verstanden. Wie die Optik täuschen kann.
Danke @ all

Programm funktioniert jetzt übrigens wie gewünscht mit eingefügtem
val = val/2;
Elektrisch lag es an meiner Beschaltung.

Hab es noch verbessert. Ab Poti Mittelstellung nach links oder rechts herum erfolgt die Richtungsänderung und die Laufgeschwindigkeit ändert sich dazu spiegelverkehrt.

Code: [Select]

// Arduino Mega 2560
int LED = 1;
int analogPin = 7;     // Poti am analog pin A7
int val = 0;           // Potiwert speichern in val
int Speed = 0;         // Lauflichtgeschwindigkeit

void setup()
{     
   Serial.begin(9600);
   
   DDRK = 255;       // Port.K komplett Ausgang
   PORTK = 255;      // Port.K alle Ausgänge Ein
   delay(200);
   PORTK = 0;        // Port.K alle Ausgänge Aus
   delay(500);
}

void loop()
{
   val = analogRead(analogPin);    // analogen Potiwert einlesen
   val = val/2;                    // und halbieren, sonst wird es zu langsam
   
   Serial.println(val, DEC);

   if (val >= 256)
    {
     Speed = 512-val;
    }
     else
         {
          Speed = val;
         }
         
   Serial.println(Speed, DEC);   
   
   if (LED < 1) {LED = 128;}   // Prüfung ob kleinstes Bit erreicht
   if (LED > 128) {LED = 1;}   // Prüfung ob höchstes Bit erreicht

   PORTK = LED;                // Port.K wird neu gesetzt

   if (val >= 256) {LED = LED << 1;}    // rechts herum
   if (val <= 255) {LED = LED >> 1;}    // links herum

   delay(Speed);
}
Tschau
Doc Arduino

Go Up