#include <Adafruit_BMP085.h> //Bibliotheek voor de druksensor
#include <Wire.h> //Bibliotheek voor de I2C verbinding.
#include <Servo.h>
//#define EEprom 0x50 //het adres van de EEprom is 50 HEX. en wordt voortaan "EEprom" genoemd.
Servo myservo; // create servo object to control a servo
Adafruit_BMP085 bmp; //object
int EPMaddress = 0; //Adreswaarde EEprom begint op 0
float ijkwaarde;
float hoogteref; //referentiehoogte
int pos(0); //servopositie
int hoogte(0); //hoogte op nul
int apogee(0); //max geregistreerde hoogte
byte downcount; //teller die waarneemt hoevaak de voorgaande hoogte hoger is, maw wanneer er wordt gedaald
int ingang = 8;
int buzzer = 9;
void setup() {
Wire.begin(); //creates a Wire object
Serial.begin(9600);
pinMode (ingang,INPUT_PULLUP);
pinMode (buzzer, OUTPUT);
myservo.attach(10); // attaches the servo on pin 10 to the servo object
if (!bmp.begin()) { //als de module geen verbinding heeft...
Serial.println("Geen verbinding met de BMP module");
while (1) {}//in oneindige loop komen
}
ijkwaarde = (bmp.readAltitude(101500)) -4 ; //basiswaarde BMP zo verrekenen dat dit altijd op 4 uit komt bij het opstarten
Serial.println(ijkwaarde);
delay (2000);
//hier begon eerder de VOIDLOOP
hoogte = (bmp.readAltitude(101500)-ijkwaarde);//hoogte, verrekend naar "geijkte" hoogte thuis (NAP + 4); (FLOAT ivm decimalen achter de komma (nu niet))
myservo.write(0);
Serial.print("Real altitude = ");
Serial.print(hoogte);
Serial.println(" meters");
Serial.println(hoogteref);
Serial.println(downcount);
writeEEPROM (0x50, EPMaddress, 0x90);// verwijzing naar de VOID "writeEEprom" tbv het schrijven van de actuele hoogte naar de EEprom
EPMaddress++; //verhoogt het EEprom adres.
delay (500);
if (hoogte > hoogteref){ //zolang de hoogte hoger is dan de voorgaande meting...
hoogteref = hoogte; //het resultaat van de vorige meting overnemen.
downcount = 0; //de downcount resetten
}
else {
downcount++; //het aantal opeenvolgende momenten van een dalende waardes registreren.
if (downcount >5) { //wanneer daling na 5 metingen door is gezet,
downcount = 0; //teller resetten
//start servo //parachute deployen
apogee = hoogteref;
Serial.print ("Apogee = ");
Serial.println (apogee);
if (hoogte < 10){
Serial.println ("No deploy. Undershoot Hight!");
myservo.write(90);
}
else Serial.println ("Parachute deploy");
delay (5000);
hoogteref = 0;
}
}
// delay(2000);
}
void loop() {} //loop nu even hier...
//---------------------------hieronder een gecopieerd stuk. Betreft de fukties voor het EEprom schrijven en lezen---------------------------------------
//defines the writeEEprom function
void writeEEPROM(0x50, int EPMaddress, byte data ) {
Wire.beginTransmission(EEprom);
Wire.write((int)(EPMaddress >> 8)); //writes the MSB
Wire.write((int)(EPMaddress & 0xFF)); //writes the LSB
Wire.write(data); //laadt de aangeleverde data
Wire.endTransmission(); //einde transmissie naar EEprom
Serial.print (EEprom); //noemt het adres van de EEprom (80)
Serial.print ("\t"); //tab
Serial.print (EPMaddress); //benoemt het adres van de EEprom waar de data is opgeslagen
Serial.print ("\t"); //tab
Serial.println (data); //toont de aangeleverde data. (hoogte in meters)
}
//defines the readEEprom function
byte readEEPROM(int deviceaddress, int eeaddress )
{
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); //writes the MSB
Wire.write((int)(eeaddress & 0xFF)); //writes the LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
rdata = Wire.read();
Serial.print (rdata, HEX);
Serial.print ("\t");
return rdata;
}
Het is wat spelerij hoor. Ik wil het wat in de vingers krijgen, maar hier lukt het even niet.
@Sterretje, wat bedoel je precies? Ik hoop dat de code hierboven wat verheldering biedt.
In grote lijnen komt het er op neer dat ik in het programma een verwijzing maak naar een funktie waar ik geen waarde uit terug hoef te krijgen. Een VOID dus, als ik de materie goed heb begrepen, met de naam writeEEPROM.
Oja, hieronder de foutmelding(en)
Arduino:1.8.13 (Windows 10), Board:"Arduino Leonardo"
C:\Users\Eigenaar\Documents\Arduino\Hoofd_Sketch_Raket\Hoofd_Sketch_Raket.ino: In function 'void setup()':
Hoofd_Sketch_Raket:47:5: error: 'writeEEPROM' was not declared in this scope
writeEEPROM (0x50, EPMaddress, 0x90);// verwijzing naar de VOID "writeEEprom" tbv het schrijven van de actuele hoogte naar de EEprom
^~~~~~~~~~~
C:\Users\Eigenaar\Documents\Arduino\Hoofd_Sketch_Raket\Hoofd_Sketch_Raket.ino:47:5: note: suggested alternative: 'readEEPROM'
writeEEPROM (0x50, EPMaddress, 0x90);// verwijzing naar de VOID "writeEEprom" tbv het schrijven van de actuele hoogte naar de EEprom
^~~~~~~~~~~
readEEPROM
C:\Users\Eigenaar\Documents\Arduino\Hoofd_Sketch_Raket\Hoofd_Sketch_Raket.ino: At global scope:
Hoofd_Sketch_Raket:86:17: error: variable or field 'writeEEPROM' declared void
void writeEEPROM(0x50, int EPMaddress, byte data ) {
^
Hoofd_Sketch_Raket:86:24: error: expected primary-expression before 'int'
void writeEEPROM(0x50, int EPMaddress, byte data ) {
^~~
Hoofd_Sketch_Raket:86:45: error: expected primary-expression before 'data'
void writeEEPROM(0x50, int EPMaddress, byte data ) {
^~~~
Meerdere bibliotheken gevonden voor "Adafruit_BMP085.h"
Gebruikt: C:\Users\Eigenaar\Documents\Arduino\libraries\Adafruit-BMP085-Library-master
Niet gebruikt: C:\Program Files (x86)\Arduino\libraries\Adafruit-BMP085-Library-master
Meerdere bibliotheken gevonden voor "Servo.h"
Gebruikt: C:\Users\Eigenaar\Documents\Arduino\libraries\Servo
Niet gebruikt: C:\Program Files (x86)\Arduino\libraries\Servo
exit status 1
'writeEEPROM' was not declared in this scope
Dit rapport zou meer informatie bevatten met
"Uitgebreide uitvoer weergeven tijden compilatie"
optie aan in Bestand -> Voorkeuren.