Go Down

Topic: help my program please (Read 922 times) previous topic - next topic

this is my program error

Code: [Select]
  saveInterval = saveInt(); //call saveInt sub-function and return value
  lcdInterval = lcdInt();   //call lcdInt sub-function and return value


and
Code: [Select]
int saveInt() {
  int buttonValue1;
  int buttonValue2;
  int buttonState;
  int minutes;

  lcd.clear();
  lcd.print("Choose save interval");
  delay(500);
  lcd.setCursor(0,1);
  lcd.print(saveInterval);
  lcd.setCursor(3,1);
  lcd.print("seconds");
  buttonState = digitalRead(button1);
 
 
    buttonValue1 = digitalRead(button1);
    delay(10);
    buttonValue2 = digitalRead(button1);
    if (buttonValue1 == buttonValue2) {
      if (buttonValue1 != buttonState) {
        if (buttonValue1 == LOW) {
          if (saveInterval >= 5 && saveInterval < 20) {
            saveInterval = saveInterval + 5; //set value to 5, 10, 15 or 20 seconds
          } else if(saveInterval >= 20 && saveInterval < 30) {
            saveInterval = saveInterval + 10; //set value to 30 seconds
          } else if(saveInterval >= 30 && saveInterval < 60) {
            saveInterval = saveInterval + 30; //set value to 60 seconds
          } else if(saveInterval >= 60 && saveInterval < 120) {
            saveInterval = saveInterval + 60; //set value to 120 seconds
          } else if(saveInterval >= 120 && saveInterval < 300) {
            saveInterval = saveInterval + 180; //set value to 5 minutes (300 seconds)
          } else if(saveInterval >= 300 && saveInterval < 600) {
            saveInterval = saveInterval + 300; //set value to 10 minutes (600 seconds)
          } else if(saveInterval >= 600) {
            saveInterval = 5; //circle back to 5 seconds after reaching 600 second option
          }
          //Show the user the current saveInterval value before the while loop starts over
          //again and checks for new button presses
          lcd.setCursor(0,1);
          lcd.print("   ");
          if (saveInterval <= 60) {
            lcd.setCursor(0,1);
            lcd.print(saveInterval);
            lcd.setCursor(3,1);
            lcd.print("seconds");
          } else if(saveInterval > 60) {
            minutes = saveInterval / 60;
            lcd.setCursor(0,1);
            lcd.print(minutes);
            lcd.setCursor(3,1);
            lcd.print("minutes");
          }
   
        }
      }
      buttonState = buttonValue1; //update buttonState so that only changes
                                  //in button status are registered
    }

}//while loop has expired, show user that their choice is being stored
  lcd.setCursor(0,3);
  lcd.print("Storing");
  delay(400);
  for (int i = 0; i <= 2; i++) {
    lcd.print(".");
    delay(350);
  }
  return saveInterval;
} //end of saveInt sub-routine


and this is a messagge error

Code: [Select]
sketch_jul03c.cpp: In function 'void setup()':
sketch_jul03c:156: error: 'saveInt' was not declared in this scope
sketch_jul03c.cpp: In function 'void loop()':
sketch_jul03c:247: error: a function-definition is not allowed here before '{' token
sketch_jul03c:428: error: expected `}' at end of input

Delta_G

Please post the whole code.

The error looks like you may have a function declared inside another function.  Or maybe you have some curly braces mixed up.
Ad hoc, ad loc, and quid pro quo.  So little time - so much to know!  ~Jeremy Hillary Boob Ph.D

#2
Jul 04, 2012, 05:49 am Last Edit: Jul 04, 2012, 05:51 am by rikkifirmansyah Reason: 1
this is my whole code.

Code: [Select]
#include <SD.h>
#include <LiquidCrystal.h>

int CS_pin = 53;

volatile long lastSave = 0;
volatile long lcdTimeOut = 0;
volatile int saveInterval = 10;
volatile int lcdInterval= 60;
const int reps = 9;

LiquidCrystal lcd(8,3,4,5,6,7);


#define muxA0 15
#define muxA1 16
#define muxA2 17
#define tempPin 0
#define lcdLight 9
#define button1 2                  
int button1INT = 0;
                   

#define aref_voltage 1.1


const int chs = 8;
const int numReadings = 10;
long tempInArray[numReadings][chs];
int index = 0;
long total[chs];
float averages[chs];

void error(char *str)
{
 lcd.clear();
 lcd.home();
 lcd.print("error: ");
 lcd.print(str);
 while(1);
}

void setup(void)
{

 analogReference(INTERNAL1V1);
                     
 pinMode(muxA2, OUTPUT);
 pinMode(muxA1, OUTPUT);
 pinMode(muxA0, OUTPUT);
 pinMode(button1, INPUT);
 digitalWrite(lcdLight, HIGH);
 lcd.begin(20,4);  
 lcd.setCursor(0,0);
 lcd.print("Tugas Akhir");
 lcd.setCursor(0,1);
 lcd.print("Miniatur Hujan Salju");
 delay (5000);
 lcd.clear();
 
 lcd.setCursor(0,0);
 lcd.print ("Oleh: ");
 lcd.setCursor(0,1);
 lcd.print ("Mochamad Rikki Firmansyah");
 lcd.setCursor(0,2);
 lcd.print ("dan");
 lcd.setCursor(0,3);
 lcd.print ("Ichsan T Primanizar");
 delay (5000);
 lcd.clear();

 //initialize the SD card
 if (!SD.begin(CS_pin))
   {
     lcd.setCursor(0,0);
     lcd.println ("Card Failure ");
     delay (3000);
     lcd.clear();
     return;
   }
     lcd.println ("Card Ready");
     delay (3000);
     lcd.clear();
     
 
 File commandFile = SD.open ("COMMAND.txt");
 if (commandFile)
 {
   lcd.setCursor(0,0);
   lcd.println ("Membaca File");
   delay (3000);
   lcd.clear();
   while (commandFile.available());
 }
 else
 {
   lcd.println ("File Tdk Trsedia");
   delay (3000);
   lcd.clear();
 }
 
 
 File logFile = SD.open ("LOG.csv", FILE_WRITE);
 if (logFile)
 {
   logFile.println (", , , , , , , ,");
   String header = "Ch1, Ch2, Ch3, Ch4, Ch5, Ch6, Ch7, Ch8";
   logFile.println (header);
   logFile.close();
 }
 else
 {
   lcd.setCursor (0,0);
   lcd.print  ("data failed");
   delay (2000);
   lcd.clear();
 }


 saveInterval = saveInt(); //call saveInt sub-function and return value
 lcdInterval = lcdInt();   //call lcdInt sub-function and return value


 for (int channel = 0; channel < chs; channel++) {
   for (int i = 0; i < numReadings; i++) {
     tempInArray[i][channel] = 0; //initialize all values to 0
   }
 }
}



void loop(void)
{
 
 for (int channel = 0; channel < chs; channel++) {
   total[channel] = total[channel] - tempInArray[index][channel];
 }
 

   for (int channel = 0; channel < chs; channel++) {
   
     digitalWrite(muxA0, (channel & 1));
     digitalWrite(muxA1, (channel & 2)>>1);
     digitalWrite(muxA2, (channel & 4)>>2);  
     delay(5);
     
   
     analogRead(tempPin);
     delay(20);
     tempInArray[index][channel] = analogRead(tempPin);    
       
 }
 for (int channel = 0; channel < chs; channel++) {
   total[channel] = total[channel] + tempInArray[index][channel];
   averages[channel] = total[channel] / numReadings;
   averages[channel] = averages[channel] * aref_voltage / 1024;
   averages[channel] = averages[channel] * 100;
 }
   
 index = index++;
 if (index >= numReadings) {
   index = 0;
 }

 delay(500);  
             
 lcd.home();
 int row = 0;
 for (int i = 0; i <=6; i = i + 2) {
   lcd.setCursor(0,row);
   lcd.print("Ch");
   lcd.print(i+1);
   lcd.print(":");
 lcdPrintDouble(averages[i],1);
   lcd.setCursor(10,row);
   lcd.print("Ch");
   lcd.print(i+2);
   lcd.print(":");  
  lcdPrintDouble(averages[i+1],1);  
   row++; //increment row counter
 }

int saveInt() {
 int buttonValue1;
 int buttonValue2;
 int buttonState;
 int minutes;

 lcd.clear();
 lcd.print("Choose save interval");
 delay(500);
 lcd.setCursor(0,1);
 lcd.print(saveInterval);
 lcd.setCursor(3,1);
 lcd.print("seconds");
 buttonState = digitalRead(button1);
 
 
   buttonValue1 = digitalRead(button1);
   delay(10);
   buttonValue2 = digitalRead(button1);
   if (buttonValue1 == buttonValue2) {
     if (buttonValue1 != buttonState) {
       if (buttonValue1 == LOW) {
         if (saveInterval >= 5 && saveInterval < 20) {
           saveInterval = saveInterval + 5; //set value to 5, 10, 15 or 20 seconds
         } else if(saveInterval >= 20 && saveInterval < 30) {
           saveInterval = saveInterval + 10; //set value to 30 seconds
         } else if(saveInterval >= 30 && saveInterval < 60) {
           saveInterval = saveInterval + 30; //set value to 60 seconds
         } else if(saveInterval >= 60 && saveInterval < 120) {
           saveInterval = saveInterval + 60; //set value to 120 seconds
         } else if(saveInterval >= 120 && saveInterval < 300) {
           saveInterval = saveInterval + 180; //set value to 5 minutes (300 seconds)
         } else if(saveInterval >= 300 && saveInterval < 600) {
           saveInterval = saveInterval + 300; //set value to 10 minutes (600 seconds)
         } else if(saveInterval >= 600) {
           saveInterval = 5;
         }
       
         lcd.setCursor(0,1);
         lcd.print("   ");
         if (saveInterval <= 60) {
           lcd.setCursor(0,1);
           lcd.print(saveInterval);
           lcd.setCursor(3,1);
           lcd.print("seconds");
         } else if(saveInterval > 60) {
           minutes = saveInterval / 60;
           lcd.setCursor(0,1);
           lcd.print(minutes);
           lcd.setCursor(3,1);
           lcd.print("minutes");
         }
 
       }
     }
     buttonState = buttonValue1;
                               
   }

}
 lcd.setCursor(0,3);
 lcd.print("Storing");
 delay(400);
 for (int i = 0; i <= 2; i++) {
   lcd.print(".");
   delay(350);
 }
 return saveInterval;
}

int lcdInt() {
 int buttonValue1;
 int buttonValue2;
 int buttonState;
 int minutes;
 lcd.clear();
 lcd.print("Choose LCD backlight");
 lcd.setCursor(0,1);
 lcd.print("timeout:");
 delay(500);
 lcd.setCursor(0,2);
 lcd.print(lcdInterval);
 lcd.setCursor(3,2);
 lcd.print("seconds");
 buttonState = digitalRead(button1);

 {
   buttonValue1 = digitalRead(button1);
   delay(10);
   buttonValue2 = digitalRead(button1);
   if (buttonValue1 == buttonValue2) {
     if (buttonValue1 != buttonState) {
       if (buttonValue1 == LOW) {
         if(lcdInterval >= 10 && lcdInterval < 30) {
           lcdInterval = lcdInterval + 10;
         } else if(lcdInterval >= 30 && lcdInterval < 60) {
           lcdInterval = lcdInterval + 30;
         } else if(lcdInterval >= 60 && lcdInterval < 120) {
           lcdInterval = lcdInterval + 60;
         } else if(lcdInterval >= 120 && lcdInterval < 300) {
           lcdInterval = lcdInterval + 180;
         } else if(lcdInterval >= 300 && lcdInterval < 600) {
           lcdInterval = lcdInterval + 300;
         } else if(lcdInterval >= 600) {
           lcdInterval = 10;
         }
       
         lcd.setCursor(0,2);
         lcd.print("   ");
         if (lcdInterval <= 60) {
           lcd.setCursor(0,2);
           lcd.print(lcdInterval);
           lcd.setCursor(3,2);
           lcd.print("seconds");
         } else if(lcdInterval > 60) {
           minutes = lcdInterval / 60;
           lcd.setCursor(0,2);
           lcd.print(minutes);
           lcd.setCursor(3,2);
           lcd.print("minutes");
         }
         
       }
     }
     buttonState = buttonValue1;
                               
   }
 }
 
 lcd.setCursor(0,3);
 lcd.print("Starting");
 delay(400);
 for (int i = 0; i <= 2; i++) {
   lcd.print(".");
   delay(350);
 }
 return lcdInterval;
}




void lcdPrintDouble( double val, byte precision){


 if(val < 0.0){
   lcd.print('-');
   val = -val;
 }
 if (int(val) < 100) {
   lcd.print(" ");
   lcd.print(int(val));
 } else {
   lcd.print (int(val));  
 }
 if( precision > 0) {
   lcd.print(".");
   unsigned long frac;
   unsigned long mult = 1;
   byte padding = precision -1;
   while(precision--)
     mult *=10;

   if(val >= 0)
      frac = (val - int(val)) * mult;
   else
      frac = (int(val)- val ) * mult;
   unsigned long frac1 = frac;
   while( frac1 /= 10 )
    padding--;
   while(  padding--)
      lcd.print("0");
      lcd.print(frac,DEC) ;
 }
}


and this error mesagges
Code: [Select]
sketch_jul04a.cpp: In function 'void setup()':
sketch_jul04a:119: error: 'saveInt' was not declared in this scope
sketch_jul04a.cpp: In function 'void loop()':
sketch_jul04a:183: error: a function-definition is not allowed here before '{' token
sketch_jul04a:357: error: expected `}' at end of input


WizenedEE

#3
Jul 04, 2012, 05:56 am Last Edit: Jul 05, 2012, 07:46 pm by WizenedEE Reason: 1
You're missing a } somewhere in the loop function.

If you indent properly, it'll be obvious. Try going to Tools -> Auto format in the IDE.

By properly, I mean every { should have a corresponding tab, and every } should have a corresponding anti-tab.
Code: [Select]

Like {
 This
 Code
 Here {
   That's
   Indented
 }
 properly
}

#4
Jul 04, 2012, 01:48 pm Last Edit: Jul 04, 2012, 01:54 pm by tigertrainer Reason: 1
Di dalam funksi // initialize the SD card kamu lupa elsenya!
Code: [Select]
 //initialize the SD card

 if (!SD.begin(CS_pin))
   {
     lcd.setCursor(0,0);
     lcd.println ("Card Failure ");
     delay (3000);
     lcd.clear();
     return;
   }
 else {
     lcd.println ("Card Ready");
     delay (3000);
     lcd.clear();
 }


di dalam funksi "int lcdInt()" ada { yang tampa alasan

Code: [Select]
 int buttonValue1;
 int buttonValue2;
 int buttonState;
 int minutes;
 lcd.clear();
 lcd.print("Choose LCD backlight");
 lcd.setCursor(0,1);
 lcd.print("timeout:");
 delay(500);
 lcd.setCursor(0,2);
 lcd.print(lcdInterval);
 lcd.setCursor(3,2);
 lcd.print("seconds");
 buttonState = digitalRead(button1);

 {...


saveInterval dan lcdInterval kamu tidak pernah initialize. Harus tulis "int saveInterval; int lcdInterval;" sebulumnya

PaulS

Code: [Select]
Like {
  This
  Code
  Here {
    That's
     Indented
  }
  properly
}

No, it isn't, or Indented and That's would line up.

I know, I'm picky.

PaulS

Quote
Di dalam funksi // initialize the SD card kamu lupa elsenya!
di dalam funksi "int lcdInt()" ada { yang tampa alasan
saveInterval dan lcdInterval kamu tidak pernah initialize. Harus tulis "int saveInterval; int lcdInterval;" sebulumnya

Well, why didn't you say that in the first place? Whatever that is...

I just wrote back in Mochamad Rikki Firmansyah's mother tongue is all.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy