sketch fout, snap er niks meer van

Arduino specifieke Software
Berichten: 1
Geregistreerd: 05 Sep 2016, 18:48

sketch fout, snap er niks meer van

Berichtdoor stegging » 05 Sep 2016, 18:53

hallo iedereen,

Ik ben een beginner met Arduino, en dacht een leuk projectje te starten.
Ik wil namelijk een doseerapparaat voor mijn aquarium maken...
Het solderen etc. is allemaal al gelukt.
Maar het lukt mij maar niet met de code,
Ik krijg de gehele tijd een expected primary-expression before '*'token.

Ik maak gebruik van een arduino Uno, en het project volgt deze code en handleiding:
http://fishtankprojects.com/diy-aquarium-projects/arduino-controlled-dosing-pumps.html

ik zal hieronder mijn code posten, als iemand kan ontdekken waar het fout gaat, ben je mijn held!!
cpp code
#include <DS1307.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
/*void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.writeWire.writeWire.write(0x80);
Wire.endTransmission();
}*/

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte sec, // 0-59
byte min, // 0-59
byte hour, // 1-23
byte dow, // 1-7
byte date, // 1-28/29/30/31
byte mon, // 1-12
byte year) // 0-99

{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(sec)); // 0 to bit 7 starts the clock
Wire.write(decToBcd(min));
Wire.write(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.write(decToBcd(dow));
Wire.write(decToBcd(date));
Wire.write(decToBcd(mon));
Wire.write(decToBcd(year));
Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(byte sec,
byte min,
byte hour,
byte dow,
byte date,
byte mon,
byte year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// A few of these need masks because certain bits are control bits
sec = bcdToDec(Wire.read() && 0x7f);
min = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read() && 0x3f); // Need to change this if 12 hour am/pm
dow = bcdToDec(Wire.read());
date = bcdToDec(Wire.read());
mon = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());
}

//define pins
int motorPin1 = 9;
int motorPin2 = 10;

void setup() // run once, when the sketch starts
{
byte sec, min, hour, dow, date, mon, year;
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);


Wire.begin();
Serial.begin(9600);



/*
second = 45;
minute = 55;
hour = 9;
dow = 2;
date = 30;
month = 4;
year = 13;
setDateDs1307(second, minute, hour, dow, date, month, year);

*/

}
void loop() // run over and over again
{
getDateDs1307(
byte *sec,
byte *min,
byte *hour,
byte *dow,
byte *date,
byte *mon,
byte *year);

Serial.print(hour, DEC);
Serial.print("");
Serial.print(min, DEC);
Serial.print("");
Serial.print(sec, DEC);

// Set the time you want the motors to kick in
if((hour == 21)&&(min == 23)&&(sec==10))
{
Serial.print("TRUE");
Serial.println("");
Serial.println("MP1");
analogWrite(motorPin1, 255);
delay(2500);
analogWrite(motorPin1, 0);
Serial.println("MP2");
analogWrite(motorPin2, 255);
delay(2500);
analogWrite(motorPin2, 0);
}
};

Advertisement

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

Re: sketch fout, snap er niks meer van

Berichtdoor nicoverduin » 05 Sep 2016, 19:39

a) Gebruik de CTRL-T functie in de IDE. Maakt de code beter leesbaar
b) ik heb nogal wat veranderd door pointers te gebruiken. De oplossing is niet geweldig maar dat komt wel met de jaren.
c) bijgaand de code die wel compileerd.
d) de fout die jij kreeg wordt veroorzaakt door het kopiëren van een HTML scherm. Dasr zit (en ook in jouw geval) wel eens wat verkeerde tekens in die je niet ziet. Maar de compiler wel. De regel ff opnieuw ingetikt (dus NIET kopieren) en klaar.
e) verder zit er nogal wat waarschuwingen in de library van vervallen statements. dat wordt in de toekomst nog eens afgekeurd met nieuwe IDE versies.

cpp code
#include <DS1307.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val) {
return ((val / 10 * 16) + (val % 10));
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val) {
return ((val / 16 * 10) + (val % 16));
}

// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
/*void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.writeWire.writeWire.write(0x80);
Wire.endTransmission();
}*/

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte sec, // 0-59
byte min, // 0-59
byte hour, // 1-23
byte dow, // 1-7
byte date, // 1-28/29/30/31
byte mon, // 1-12
byte year) // 0-99

{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(sec)); // 0 to bit 7 starts the clock
Wire.write(decToBcd(min));
Wire.write(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.write(decToBcd(dow));
Wire.write(decToBcd(date));
Wire.write(decToBcd(mon));
Wire.write(decToBcd(year));
Wire.endTransmission();
}

// Gets the date and time from the ds1307

void getDateDs1307(byte *sec, byte *min, byte *hour, byte *dow, byte *date,
byte *mon, byte *year) {
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// A few of these need masks because certain bits are control bits
//
// hier ga je dus de variabelen in de loop vullen. Je krijgt een pointer (= adres van) van elke variabele
// daarna ga je op de plek waar het adres staat (vandaar dat sterretje) de verschillende velden zetten.
// zeker geen elegante oplossing. Je kan beter een struct maken en dan het adres van struct doorgeven.
// wat is een struct? ff googelelen
//
*sec = bcdToDec(Wire.read() && 0x7f);
*min = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() && 0x3f); // Need to change this if 12 hour am/pm
*dow = bcdToDec(Wire.read());
*date = bcdToDec(Wire.read());
*mon = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}

//define pins
int motorPin1 = 9;
int motorPin2 = 10;

void setup() // run once, when the sketch starts
{
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);

Wire.begin();
Serial.begin(9600);

/*
second = 45;
minute = 55;
hour = 9;
dow = 2;
date = 30;
month = 4;
year = 13;
setDateDs1307(second, minute, hour, dow, date, month, year);

*/

}
void loop() // run over and over again
{
//
// je moet het adres doorgeven van deze variabelen
//
byte sec, min, hour, dow, datum, mon, yr;
//
// dus pointers gebruiken
//
getDateDs1307(&sec, &min, &hour, &dow, &datum, &mon, &yr);

Serial.print(hour, DEC);
Serial.print("");
Serial.print(min, DEC);
Serial.print("");
Serial.print(sec, DEC);

// Set the time you want the motors to kick in
if ((hour == 21) && (min == 23) && (sec == 10)) {
Serial.print("TRUE");
Serial.println("");
Serial.println("MP1");
analogWrite(motorPin1, 255);
delay(2500);
analogWrite(motorPin1, 0);
Serial.println("MP2");
analogWrite(motorPin2, 255);
delay(2500);
analogWrite(motorPin2, 0);
}
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 101 gasten