probleem met code

algemene C code
Berichten: 1
Geregistreerd: 10 Mrt 2014, 06:41

probleem met code

Berichtdoor Ari » 10 Mrt 2014, 06:55

Goede morgen,
ik ben een "newbie" - sinds 2 feb.2014 bezig met aller eerste Arduinoproject.
Ik heb een UNO met adafruit ADC ADS1015 en LCD om Volts & Amps te lezen voor batterijopladen.
Nu krijg ik "expected unqualified-id before '{' token" error aan lijn 154.
Ik heb wel tutorials gedaan maar heb steeds probleem met gebruik van { en }.
Daarom het error message.
Ik stuur ook mijn programma indien iemand mij kan helpen met dit probleempje.
Vooruit bedankt!
-------------------------------------------------
/*!

#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>

/* I2C ADDRESS/BITS */
#define ADS1015_ADDRESS (0x48) // 1001 000 (ADDR = GND)

/* CONVERSION DELAY (in mS) */
#define ADS1015_CONVERSIONDELAY (1)

/* POINTER REGISTER */
#define ADS1015_REG_POINTER_MASK (0x03)
#define ADS1015_REG_POINTER_CONVERT (0x00)
#define ADS1015_REG_POINTER_CONFIG (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH (0x02)
#define ADS1015_REG_POINTER_HITHRESH (0x03)

/* CONFIG REGISTER */
#define ADS1015_REG_CONFIG_OS_MASK (0x8000)
#define ADS1015_REG_CONFIG_OS_SINGLE (0x8000) // Write: Set to start a single-conversion
#define ADS1015_REG_CONFIG_OS_BUSY (0x0000) // Read: Bit = 0 when conversion is in progress
#define ADS1015_REG_CONFIG_OS_NOTBUSY (0x8000) // Read: Bit = 1 when device is not performing a conversion

#define ADS1015_REG_CONFIG_MUX_MASK (0x7000)

#define ADS1015_REG_CONFIG_MUX_SINGLE_0 (0x4000) // Single-ended AIN0
#define ADS1015_REG_CONFIG_MUX_SINGLE_1 (0x5000) // Single-ended AIN1
#define ADS1015_REG_CONFIG_MUX_SINGLE_2 (0x6000) // Single-ended AIN2
#define ADS1015_REG_CONFIG_MUX_SINGLE_3 (0x7000) // Single-ended AIN3

#define ADS1015_REG_CONFIG_PGA_MASK (0x0E00)
#define ADS1015_REG_CONFIG_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3
#define ADS1015_REG_CONFIG_PGA_4_096V (0x0200) // +/-4.096V range = Gain 1
#define ADS1015_REG_CONFIG_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 (default)
#define ADS1015_REG_CONFIG_PGA_1_024V (0x0600) // +/-1.024V range = Gain 4
#define ADS1015_REG_CONFIG_PGA_0_512V (0x0800) // +/-0.512V range = Gain 8
#define ADS1015_REG_CONFIG_PGA_0_256V (0x0A00) // +/-0.256V range = Gain 16

#define ADS1015_REG_CONFIG_MODE_MASK (0x0100)
#define ADS1015_REG_CONFIG_MODE_CONTIN (0x0000) // Continuous conversion mode
#define ADS1015_REG_CONFIG_MODE_SINGLE (0x0100) // Power-down single-shot mode (default)

#define ADS1015_REG_CONFIG_DR_MASK (0x00E0)
#define ADS1015_REG_CONFIG_DR_128SPS (0x0000) // 128 samples per second
#define ADS1015_REG_CONFIG_DR_250SPS (0x0020) // 250 samples per second
#define ADS1015_REG_CONFIG_DR_490SPS (0x0040) // 490 samples per second
#define ADS1015_REG_CONFIG_DR_920SPS (0x0060) // 920 samples per second
#define ADS1015_REG_CONFIG_DR_1600SPS (0x0080) // 1600 samples per second (default)
#define ADS1015_REG_CONFIG_DR_2400SPS (0x00A0) // 2400 samples per second
#define ADS1015_REG_CONFIG_DR_3300SPS (0x00C0) // 3300 samples per second

#define ADS1015_REG_CONFIG_CMODE_MASK (0x0010)
#define ADS1015_REG_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator with hysteresis (default)
#define ADS1015_REG_CONFIG_CMODE_WINDOW (0x0010) // Window comparator

#define ADS1015_REG_CONFIG_CPOL_MASK (0x0008)
#define ADS1015_REG_CONFIG_CPOL_ACTVLOW (0x0000) // ALERT/RDY pin is low when active (default)
#define ADS1015_REG_CONFIG_CPOL_ACTVHI (0x0008) // ALERT/RDY pin is high when active

#define ADS1015_REG_CONFIG_CLAT_MASK (0x0004) // Determines if ALERT/RDY pin latches once asserted
#define ADS1015_REG_CONFIG_CLAT_NONLAT (0x0000) // Non-latching comparator (default)
#define ADS1015_REG_CONFIG_CLAT_LATCH (0x0004) // Latching comparator

#define ADS1015_REG_CONFIG_CQUE_MASK (0x0003)
#define ADS1015_REG_CONFIG_CQUE_1CONV (0x0000) // Assert ALERT/RDY after one conversions
#define ADS1015_REG_CONFIG_CQUE_2CONV (0x0001) // Assert ALERT/RDY after two conversions
#define ADS1015_REG_CONFIG_CQUE_4CONV (0x0002) // Assert ALERT/RDY after four conversions
#define ADS1015_REG_CONFIG_CQUE_NONE (0x0003) // Disable the comparator and put ALERT/RDY in high state (default)

#include <LiquidCrystal.h>

typedef enum
{
GAIN_TWOTHIRDS = ADS1015_REG_CONFIG_PGA_6_144V,
GAIN_ONE = ADS1015_REG_CONFIG_PGA_4_096V,
GAIN_TWO = ADS1015_REG_CONFIG_PGA_2_048V,
GAIN_FOUR = ADS1015_REG_CONFIG_PGA_1_024V,
GAIN_EIGHT = ADS1015_REG_CONFIG_PGA_0_512V,
GAIN_SIXTEEN = ADS1015_REG_CONFIG_PGA_0_256V
} adsGain_t;

class Adafruit_ADS1015
{
protected:
// Instance-specific properties
uint8_t m_i2cAddress;
uint8_t m_conversionDelay;
uint8_t m_bitShift;
adsGain_t m_gain;

public:
Adafruit_ADS1015(uint8_t i2cAddress = ADS1015_ADDRESS);
void begin(void);
uint16_t readADC_SingleEnded(uint8_t channel);
int16_t readADC_Differential_0_1(void);
int16_t readADC_Differential_2_3(void);
void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
int16_t getLastConversionResults();
void setGain(adsGain_t gain);
adsGain_t getGain(void);

private:
};

// Derive from ADS1105 & override construction to set properties
class Adafruit_ADS1115 : public Adafruit_ADS1015
{

};
// from Adafruit-4-channel-adc-breakouts/programming

Adafruit_ADS1015 ads1015;

void setup(void)
{
Serial.begin(9600);

ads1015.begin();
}

void loop(void)
{
int16_t adc0, adc1, adc2, adc3;

adc0 = ads1015.readADC_SingleEnded(0);
adc1 = ads1015.readADC_SingleEnded(1);
adc2 = ads1015.readADC_SingleEnded(2);
adc3 = ads1015.readADC_SingleEnded(3);
Serial.print("AIN0: "); Serial.println(adc0);
Serial.print("AIN1: "); Serial.println(adc1);
Serial.print("AIN2: "); Serial.println(adc2);
Serial.print("AIN3: "); Serial.println(adc3);
Serial.println(" ");
delay(1000);
}

//end of ADS1015

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

const int numReadings = 100;
int readings[numReadings];
int index = 0;
int total = 0;
int average = 0;
int inputPin = 0;


{ lcd.begin(16, 2);

Serial.begin(9600);
for (int thisReading = 0; thisReading < numReadings; thisReading ++)
readings[thisReading] = 0;


total = total - readings [index];
readings [index] = analogRead (chgaPin);
total = total + readings[index];
index = index + 1;if (index >= numReadings) index = 0;
average = total / numReadings ;
Serial.println (average);
delay(1);

int chgaReading = analogRead(adc0);
float chgaVolts = chgaReading * 1.0 / 27.0 ;

lcd.setCursor(0, 0);
lcd.print ("+ A");
lcd.setCursor (1, 0);
lcd.print(chgaVolts);

int bavoltReading = analogRead(adc2);
float bavoltVolts = bavoltReading * 1.0 / 56.0 ;

lcd.setCursor (9, 0);
lcd.print (" V");
lcd.setCursor (10, 0);
lcd.print (bavoltVolts);
}

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: probleem met code

Berichtdoor shooter » 10 Mrt 2014, 12:16

het gaat al fout bij de for loop daar moeten {} omheen
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: probleem met code

Berichtdoor nicoverduin » 10 Mrt 2014, 19:44

Ik heb de code ff door ECLIPSE gehaald en geformatteerd. Dat leest wat beter:

Maar eerst de accolades, setup() en loop()
Je gebruikt accolades als je code hebt wat bij elkaar hoort. Daarnaast moet je het begrip van setup() en loop() begrijpen.
Code: Alles selecteren
void setup() {

}


Deze wordt ALTIJD aangeroepen door de processor als je de reset indrukt of de spanning erop zet. Alle code tussen de accolades wordt uitgevoerd. Daarnaast wordt deze functie EENMALIG uitgevoerd. Deze functie gebruik je om zaken te initialiseren, pinnen zetten, variabelen initialiseren, kijken of bepaalde interfaces ed werken.

Code: Alles selecteren
void loop() {

}


Deze functie wordt elke keer opnieuw aangeroepen nadat de setup() is uitgevoerd. Zowel de setup() als de loop() moeten in de code zijn opgenomen.

Dus nogmaals:
setuo() {} voor initialisatie taken
loop() {} functie die eindeloos opnieuw start. Dus kom je op het einde start hij gewoon weer opnieuw.

Nu jouw code

Code: Alles selecteren
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>

/* I2C ADDRESS/BITS */
#define ADS1015_ADDRESS (0x48) // 1001 000 (ADDR = GND)
/* CONVERSION DELAY (in mS) */
#define ADS1015_CONVERSIONDELAY (1)

/* POINTER REGISTER */
#define ADS1015_REG_POINTER_MASK (0x03)
#define ADS1015_REG_POINTER_CONVERT (0x00)
#define ADS1015_REG_POINTER_CONFIG (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH (0x02)
#define ADS1015_REG_POINTER_HITHRESH (0x03)

/* CONFIG REGISTER */
#define ADS1015_REG_CONFIG_OS_MASK (0x8000)
#define ADS1015_REG_CONFIG_OS_SINGLE (0x8000) // Write: Set to start a single-conversion
#define ADS1015_REG_CONFIG_OS_BUSY (0x0000) // Read: Bit = 0 when conversion is in progress
#define ADS1015_REG_CONFIG_OS_NOTBUSY (0x8000) // Read: Bit = 1 when device is not performing a conversion
#define ADS1015_REG_CONFIG_MUX_MASK (0x7000)

#define ADS1015_REG_CONFIG_MUX_SINGLE_0 (0x4000) // Single-ended AIN0
#define ADS1015_REG_CONFIG_MUX_SINGLE_1 (0x5000) // Single-ended AIN1
#define ADS1015_REG_CONFIG_MUX_SINGLE_2 (0x6000) // Single-ended AIN2
#define ADS1015_REG_CONFIG_MUX_SINGLE_3 (0x7000) // Single-ended AIN3
#define ADS1015_REG_CONFIG_PGA_MASK (0x0E00)
#define ADS1015_REG_CONFIG_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3
#define ADS1015_REG_CONFIG_PGA_4_096V (0x0200) // +/-4.096V range = Gain 1
#define ADS1015_REG_CONFIG_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 (default)
#define ADS1015_REG_CONFIG_PGA_1_024V (0x0600) // +/-1.024V range = Gain 4
#define ADS1015_REG_CONFIG_PGA_0_512V (0x0800) // +/-0.512V range = Gain 8
#define ADS1015_REG_CONFIG_PGA_0_256V (0x0A00) // +/-0.256V range = Gain 16
#define ADS1015_REG_CONFIG_MODE_MASK (0x0100)
#define ADS1015_REG_CONFIG_MODE_CONTIN (0x0000) // Continuous conversion mode
#define ADS1015_REG_CONFIG_MODE_SINGLE (0x0100) // Power-down single-shot mode (default)
#define ADS1015_REG_CONFIG_DR_MASK (0x00E0)
#define ADS1015_REG_CONFIG_DR_128SPS (0x0000) // 128 samples per second
#define ADS1015_REG_CONFIG_DR_250SPS (0x0020) // 250 samples per second
#define ADS1015_REG_CONFIG_DR_490SPS (0x0040) // 490 samples per second
#define ADS1015_REG_CONFIG_DR_920SPS (0x0060) // 920 samples per second
#define ADS1015_REG_CONFIG_DR_1600SPS (0x0080) // 1600 samples per second (default)
#define ADS1015_REG_CONFIG_DR_2400SPS (0x00A0) // 2400 samples per second
#define ADS1015_REG_CONFIG_DR_3300SPS (0x00C0) // 3300 samples per second
#define ADS1015_REG_CONFIG_CMODE_MASK (0x0010)
#define ADS1015_REG_CONFIG_CMODE_TRAD (0x0000) // Traditional comparator with hysteresis (default)
#define ADS1015_REG_CONFIG_CMODE_WINDOW (0x0010) // Window comparator
#define ADS1015_REG_CONFIG_CPOL_MASK (0x0008)
#define ADS1015_REG_CONFIG_CPOL_ACTVLOW (0x0000) // ALERT/RDY pin is low when active (default)
#define ADS1015_REG_CONFIG_CPOL_ACTVHI (0x0008) // ALERT/RDY pin is high when active
#define ADS1015_REG_CONFIG_CLAT_MASK (0x0004) // Determines if ALERT/RDY pin latches once asserted
#define ADS1015_REG_CONFIG_CLAT_NONLAT (0x0000) // Non-latching comparator (default)
#define ADS1015_REG_CONFIG_CLAT_LATCH (0x0004) // Latching comparator
#define ADS1015_REG_CONFIG_CQUE_MASK (0x0003)
#define ADS1015_REG_CONFIG_CQUE_1CONV (0x0000) // Assert ALERT/RDY after one conversions
#define ADS1015_REG_CONFIG_CQUE_2CONV (0x0001) // Assert ALERT/RDY after two conversions
#define ADS1015_REG_CONFIG_CQUE_4CONV (0x0002) // Assert ALERT/RDY after four conversions
#define ADS1015_REG_CONFIG_CQUE_NONE (0x0003) // Disable the comparator and put ALERT/RDY in high state (default)
#include <LiquidCrystal.h>

typedef enum
{
   GAIN_TWOTHIRDS = ADS1015_REG_CONFIG_PGA_6_144V,
   GAIN_ONE = ADS1015_REG_CONFIG_PGA_4_096V,
   GAIN_TWO = ADS1015_REG_CONFIG_PGA_2_048V,
   GAIN_FOUR = ADS1015_REG_CONFIG_PGA_1_024V,
   GAIN_EIGHT = ADS1015_REG_CONFIG_PGA_0_512V,
   GAIN_SIXTEEN = ADS1015_REG_CONFIG_PGA_0_256V
} adsGain_t;

class Adafruit_ADS1015 {
protected:
// Instance-specific properties
   uint8_t m_i2cAddress;
   uint8_t m_conversionDelay;
   uint8_t m_bitShift;
   adsGain_t m_gain;

public:
   Adafruit_ADS1015(uint8_t i2cAddress = ADS1015_ADDRESS);
   void begin(void);
   uint16_t readADC_SingleEnded(uint8_t channel);
   int16_t readADC_Differential_0_1(void);
   int16_t readADC_Differential_2_3(void);
   void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
   int16_t getLastConversionResults();
   void setGain(adsGain_t gain);
   adsGain_t getGain(void);

private:
};

// Derive from ADS1105 & override construction to set properties
class Adafruit_ADS1115: public Adafruit_ADS1015 {

};
// from Adafruit-4-channel-adc-breakouts/programming

Adafruit_ADS1015 ads1015;

void setup(void) {
   Serial.begin(9600);

   ads1015.begin();
}

void loop() {
   int16_t adc0, adc1, adc2, adc3;

   adc0 = ads1015.readADC_SingleEnded(0);
   adc1 = ads1015.readADC_SingleEnded(1);
   adc2 = ads1015.readADC_SingleEnded(2);
   adc3 = ads1015.readADC_SingleEnded(3);
   Serial.print("AIN0: ");
   Serial.println(adc0);
   Serial.print("AIN1: ");
   Serial.println(adc1);
   Serial.print("AIN2: ");
   Serial.println(adc2);
   Serial.print("AIN3: ");
   Serial.println(adc3);
   Serial.println(" ");
   delay(1000);
}

//end of ADS1015

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int numReadings = 100;
int readings[numReadings];
int index = 0;
int total = 0;
int average = 0;
int inputPin = 0;

{   lcd.begin(16, 2);

   Serial.begin(9600);
   for (int thisReading = 0; thisReading < numReadings; thisReading ++)
   readings[thisReading] = 0;

   total = total - readings [index];
   readings [index] = analogRead (chgaPin);
   total = total + readings[index];
   index = index + 1;if (index >= numReadings) index = 0;
   average = total / numReadings;
   Serial.println (average);
   delay(1);

   int chgaReading = analogRead(adc0);
   float chgaVolts = chgaReading * 1.0 / 27.0;

   lcd.setCursor(0, 0);
   lcd.print ("+ A");
   lcd.setCursor (1, 0);
   lcd.print(chgaVolts);

   int bavoltReading = analogRead(adc2);
   float bavoltVolts = bavoltReading * 1.0 / 56.0;

   lcd.setCursor (9, 0);
   lcd.print (" V");
   lcd.setCursor (10, 0);
   lcd.print (bavoltVolts);
}


De functie setup() is er. De functie loop() is er. En daarna nog een stel statements. Nu is de grote vraag wanneer worden die statements volgens jouw uitgevoerd nadat ik je bovenaan uitleg wat de setup() en de loop() doen.

Daarnaast is je for (..;..;..) loop in diezelfde statements fout zoals Shooter al heeft aangegeven. Als je in die loop bepaalde statements uitgevoerd wil hebben dan moet je die statements tussen een open en sluit accolade zetten.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten