Pages: [1]   Go Down
Author Topic: Syntax Problem  (Read 427 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 4
Posts: 577
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

Tschau
Doc Arduino

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Und wenn Du die ganzen Semikolons mal innerhalb der geschweiften Klammern setzt?
smiley-wink

Logged


Offline Offline
God Member
*****
Karma: 4
Posts: 577
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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

Tschau
Doc Arduino

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

if (a == b) {

mache dies;

}

Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20273
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 577
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Tschau
Doc Arduino

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
God Member
*****
Karma: 4
Posts: 577
ATmega 2560
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
// 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);
}
« Last Edit: January 31, 2013, 04:54:21 pm by Doc_Arduino » Logged

Tschau
Doc Arduino

Pages: [1]   Go Up
Jump to: