potmeter en tempmeter beide kunnen gebruiken
19 berichten
• Pagina 2 van 2 • 1, 2
Re: potmeter en tempmeter beide kunnen gebruiken
geprobeerd maar lukt me nog niet
als ik de potmeter er tussen uithaal wel, dan blijft het goed gaan gelukkig
met de potmeter nog niet echt
als ik de potmeter er tussen uithaal wel, dan blijft het goed gaan gelukkig
met de potmeter nog niet echt
Advertisement
- FonzieBonzo
- Berichten: 118
- Geregistreerd: 01 Okt 2015, 11:54
- Woonplaats: Castricum
Re: potmeter en tempmeter beide kunnen gebruiken
Verzend je de temperatuur naar het LCD via bmp085GetTemperature ? Kun je deze functie dan ook hier delen.
Re: potmeter en tempmeter beide kunnen gebruiken
Beste Fonzie,
Hier onder de CCP code
het rare is is dat de serial print goed blijft gaan
nu heb ik de potmeter vervangen door een buttoncount en hiermee de correctie toegepast
graag wil ik de hoogte meter op 0 kunnen stellen
hij begint bij bv
-12
druk ik op de button dan wordt hij gecorrigeerd voor 1
of wel
-11
daarna
-10
dan wordt het raar
je zou verwachten -9 maar dit wordt -90
volgende is -80
bij de 0 wordt dit 00
en 1 wordt dan 100
bij de serial print gaat het wel goed
/*
Barometer library V1.0
2010 Copyright (c) Seeed Technology Inc. All right reserved.
Original Author: LG
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "Barometer.h"
#include <Wire.h>
#include <Arduino.h>
void Barometer::init(void)
{
Wire.begin();
Serial.print("Temperaturet: ");
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
Serial.print("Temperaturet2: ");
}
// Read 1 byte from the BMP085 at 'address'
// Return: the read byte;
char Barometer::bmp085Read(unsigned char address)
{
//Wire.begin();
unsigned char data;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available());
return Wire.read();
}
// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
int Barometer::bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2);
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}
// Read the uncompensated temperature value
unsigned int Barometer::bmp085ReadUT()
{
unsigned int ut;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
delay(5);
ut = bmp085ReadInt(0xF6);
return ut;
}
// Read the uncompensated pressure value
unsigned long Barometer::bmp085ReadUP()
{
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
delay(2 + (3<<OSS));
// Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);
up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
return up;
}
void Barometer::writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int Barometer::readRegister(int deviceAddress, byte address)
{
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while(!Wire.available()) {
// waiting
}
v = Wire.read();
return v;
}
float Barometer::calcAltitude(float pressure)
{
float A = pressure/101325;
float B = 1/5.25588;
float C = pow(A,B);
C = 1 - C;
C = C /0.0000225577;
return C;
}
float Barometer::bmp085GetTemperature(unsigned int ut)
{
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
PressureCompensate = x1 + x2;
float temp = ((PressureCompensate + 8)>>4);
temp = temp /10;
return temp;
}
long Barometer::bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = PressureCompensate - 4000;
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
long temp = p;
return temp;
}
Hier onder de CCP code
het rare is is dat de serial print goed blijft gaan
nu heb ik de potmeter vervangen door een buttoncount en hiermee de correctie toegepast
graag wil ik de hoogte meter op 0 kunnen stellen
hij begint bij bv
-12
druk ik op de button dan wordt hij gecorrigeerd voor 1
of wel
-11
daarna
-10
dan wordt het raar
je zou verwachten -9 maar dit wordt -90
volgende is -80
bij de 0 wordt dit 00
en 1 wordt dan 100
bij de serial print gaat het wel goed
/*
Barometer library V1.0
2010 Copyright (c) Seeed Technology Inc. All right reserved.
Original Author: LG
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "Barometer.h"
#include <Wire.h>
#include <Arduino.h>
void Barometer::init(void)
{
Wire.begin();
Serial.print("Temperaturet: ");
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
Serial.print("Temperaturet2: ");
}
// Read 1 byte from the BMP085 at 'address'
// Return: the read byte;
char Barometer::bmp085Read(unsigned char address)
{
//Wire.begin();
unsigned char data;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available());
return Wire.read();
}
// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
int Barometer::bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2);
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}
// Read the uncompensated temperature value
unsigned int Barometer::bmp085ReadUT()
{
unsigned int ut;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
delay(5);
ut = bmp085ReadInt(0xF6);
return ut;
}
// Read the uncompensated pressure value
unsigned long Barometer::bmp085ReadUP()
{
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
delay(2 + (3<<OSS));
// Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);
up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
return up;
}
void Barometer::writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int Barometer::readRegister(int deviceAddress, byte address)
{
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while(!Wire.available()) {
// waiting
}
v = Wire.read();
return v;
}
float Barometer::calcAltitude(float pressure)
{
float A = pressure/101325;
float B = 1/5.25588;
float C = pow(A,B);
C = 1 - C;
C = C /0.0000225577;
return C;
}
float Barometer::bmp085GetTemperature(unsigned int ut)
{
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
PressureCompensate = x1 + x2;
float temp = ((PressureCompensate + 8)>>4);
temp = temp /10;
return temp;
}
long Barometer::bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = PressureCompensate - 4000;
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
long temp = p;
return temp;
}
- FonzieBonzo
- Berichten: 118
- Geregistreerd: 01 Okt 2015, 11:54
- Woonplaats: Castricum
Re: potmeter en tempmeter beide kunnen gebruiken
Als je voor het versturen van de temp naar je display vooraf laat gaan door het volgende ?
cpp code
cpp code
lcd.begin(1, 2); // ik ga er hier van uit dat je de temp op regel 2 van je LCD weergeeft.
lcd.print(" "); // 16 spaties indien je display 16 characters heeft
Re: potmeter en tempmeter beide kunnen gebruiken
Beste FonzieBonzo,
hartelijk dank uiteindelijk heb ik er
lcd.begin (16,2);
Bovengezet en dat werkte
nu nog de uitdaging om dit te checken met de pot meter maar dat komt goed
wel nu nog ff delta T en delta P inzichtelijk zien te maken, daar heb ik nog niet helemaal uit
Maar tot dus verre een hoop weer geleerd
hartelijk dank uiteindelijk heb ik er
lcd.begin (16,2);
Bovengezet en dat werkte
nu nog de uitdaging om dit te checken met de pot meter maar dat komt goed
wel nu nog ff delta T en delta P inzichtelijk zien te maken, daar heb ik nog niet helemaal uit
Maar tot dus verre een hoop weer geleerd
- FonzieBonzo
- Berichten: 118
- Geregistreerd: 01 Okt 2015, 11:54
- Woonplaats: Castricum
Re: potmeter en tempmeter beide kunnen gebruiken
Mooi dat dat nu is gelukt. Het lijk er wel op dat je in de problemen komt als -10 of nog kouder wordt.
Maar daar moeten we maar niet in alle opzichten van uit gaan
Maar daar moeten we maar niet in alle opzichten van uit gaan
Re: potmeter en tempmeter beide kunnen gebruiken
Beste Fonz gebruik voornamelijk de barometer als hoogtemeter voor het vliegen (zweefvliegen)
bij -10 is er dan iets gruwelijks misgegaan, hoewel ik hobby matig ook duik hahahaha
maar het enige wat ik nu nog wil uitzoeken is het hoogte verschil in 2 metingen per seconde inzichtelijk te maken zodat ik weet of ik stijg of daal
bij -10 is er dan iets gruwelijks misgegaan, hoewel ik hobby matig ook duik hahahaha
maar het enige wat ik nu nog wil uitzoeken is het hoogte verschil in 2 metingen per seconde inzichtelijk te maken zodat ik weet of ik stijg of daal
Re: potmeter en tempmeter beide kunnen gebruiken
De oplossing met het LCD begin bleek te kloppen
alleen indien ik het scherm met een kleur definieer dan knippert hij een fractie van een seconde naar een wit scherm met de waarden die er in staan.
De fout zat het dus nadrukkelijk in de setup en het verwerken van de data naar het scherm,
hoe krijg ik nu de knippering er uit?
alleen indien ik het scherm met een kleur definieer dan knippert hij een fractie van een seconde naar een wit scherm met de waarden die er in staan.
De fout zat het dus nadrukkelijk in de setup en het verwerken van de data naar het scherm,
hoe krijg ik nu de knippering er uit?
- FonzieBonzo
- Berichten: 118
- Geregistreerd: 01 Okt 2015, 11:54
- Woonplaats: Castricum
Re: potmeter en tempmeter beide kunnen gebruiken
Ik heb niet veel ervaring met LCD's maar wat je zou kunnen doen is dat je alleen gegevens naar het LCD verstuurd als de temperatuur veranderd.
cpp code
cpp code
float OudTemp=-1;
if (OudTemp!=Temp)
{
OudTemp=Temp;
lcd.begin (16,2);
// Schrijf hier de nieuwe waarde naar het LCD
}
19 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 41 gasten