potmeter en tempmeter beide kunnen gebruiken

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 13
Geregistreerd: 08 Okt 2015, 13:24

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor JohnF » 13 Okt 2015, 13:04

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

Advertisement

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor FonzieBonzo » 13 Okt 2015, 14:08

Verzend je de temperatuur naar het LCD via bmp085GetTemperature ? Kun je deze functie dan ook hier delen.

Berichten: 13
Geregistreerd: 08 Okt 2015, 13:24

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor JohnF » 13 Okt 2015, 16:08

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;
}

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor FonzieBonzo » 13 Okt 2015, 16:26

Als je voor het versturen van de temp naar je display vooraf laat gaan door het volgende ?

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

Berichten: 13
Geregistreerd: 08 Okt 2015, 13:24

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor JohnF » 13 Okt 2015, 17:36

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

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor FonzieBonzo » 13 Okt 2015, 18:10

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 :D

Berichten: 13
Geregistreerd: 08 Okt 2015, 13:24

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor JohnF » 13 Okt 2015, 18:41

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

Berichten: 13
Geregistreerd: 08 Okt 2015, 13:24

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor JohnF » 15 Okt 2015, 22:03

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?

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: potmeter en tempmeter beide kunnen gebruiken

Berichtdoor FonzieBonzo » 16 Okt 2015, 08:57

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
float OudTemp=-1;


if (OudTemp!=Temp)
{
OudTemp=Temp;
lcd.begin (16,2);
// Schrijf hier de nieuwe waarde naar het LCD

}

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 45 gasten