i need some help, how i can solve the error conflicting of types of 'read' void read(){ ? these code may combining form GTK and BME280 barometer sensor. the codes may work if i originally run separatly. i got some problem when i trying combine it i will share my code. the problem will say that....
///
280b.c: At top level:
280b.c:158:6: error: conflicting types for ‘read’
void read(){
^~~~
In file included from /usr/include/glib-2.0/gio/gcredentials.h:32,
from /usr/include/glib-2.0/gio/gio.h:46,
from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
from /usr/include/gtk-2.0/gdk/gdk.h:32,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from 280b.c:4:
/usr/include/unistd.h:360:16: note: previous declaration of ‘read’ was here
extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
///
bmp280 code from sunfounder
#include <stdio.h>
#include <wiringPiI2C.h>
#include <math.h>
#define QNH 1020
#define POWER_MODE 3 // normal mode
#define OSRS_T 5 // 20 Bit
#define OSRS_P 5 // 20 Bit ultra high resolution
#define FILTER 4 //
#define T_SB 4 // 100 500ms
#define BMP280_REGISTER_DIG_T1 0x88
#define BMP280_REGISTER_DIG_T2 0x8A
#define BMP280_REGISTER_DIG_T3 0x8C
#define BMP280_REGISTER_DIG_P1 0x8E
#define BMP280_REGISTER_DIG_P2 0x90
#define BMP280_REGISTER_DIG_P3 0x92
#define BMP280_REGISTER_DIG_P4 0x94
#define BMP280_REGISTER_DIG_P5 0x96
#define BMP280_REGISTER_DIG_P6 0x98
#define BMP280_REGISTER_DIG_P7 0x9A
#define BMP280_REGISTER_DIG_P8 0x9C
#define BMP280_REGISTER_DIG_P9 0x9E
#define BMP280_REGISTER_CHIPID 0xD0
#define BMP280_REGISTER_VERSION 0xD1
#define BMP280_REGISTER_SOFTRESET 0xE0
#define BMP280_REGISTER_CONTROL 0xF4
#define BMP280_REGISTER_CONFIG 0xF5
#define BMP280_REGISTER_STATUS 0xF3
#define BMP280_REGISTER_TEMPDATA_MSB 0xFA
#define BMP280_REGISTER_TEMPDATA_LSB 0xFB
#define BMP280_REGISTER_TEMPDATA_XLSB 0xFC
#define BMP280_REGISTER_PRESSDATA_MSB 0xF7
#define BMP280_REGISTER_PRESSDATA_LSB 0xF8
#define BMP280_REGISTER_PRESSDATA_XLSB 0xF9
int CONFIG = (T_SB <<5) + (FILTER <<2); int CTRL_MEAS = (OSRS_T <<5) + (OSRS_P <<2) + POWER_MODE;
int bmp280 = 0;
struct {
int chip_id;
int chip_version;
double temperature;
double pressure;
double altitude;
} bmp;
int dig_T1 = 0;
int dig_T2 = 0;
int dig_T3 = 0;
int dig_P1 = 0;
int dig_P2 = 0;
int dig_P3 = 0;
int dig_P4 = 0;
int dig_P5 = 0;
int dig_P6 = 0;
int dig_P7 = 0;
int dig_P8 = 0;
int dig_P9 = 0;
void write_byte_data(int reg, int value){
wiringPiI2CWriteReg8(bmp280, reg, value);
}
int read_byte_data(int reg){
int result;
result = wiringPiI2CReadReg8(bmp280, reg);
return result;
}
int read_word_data_unsigned(int reg){
int result;
result = wiringPiI2CReadReg16(bmp280, reg);
return result;
}
int read_word_data_signed(int reg){
int result;
result = read_word_data_unsigned(reg);
if (result > 32767){
result -= 65536;
}
return result;
}
void read_id(self){
int REG_ID = 0xD0;
int result;
result = read_word_data_unsigned(REG_ID);
bmp.chip_id = result & 0x00FF;
bmp.chip_version = result >> 8;
}
void reg_check(self){
write_byte_data(BMP280_REGISTER_SOFTRESET, 0xB6);
delay(200);
write_byte_data(BMP280_REGISTER_CONTROL, CTRL_MEAS);
delay(200);
write_byte_data(BMP280_REGISTER_CONFIG, CONFIG);
delay(200);
dig_T1 = read_word_data_unsigned(BMP280_REGISTER_DIG_T1); dig_T2 = read_word_data_signed(BMP280_REGISTER_DIG_T2);
dig_T3 = read_word_data_signed(BMP280_REGISTER_DIG_T3);
dig_P1 = read_word_data_unsigned(BMP280_REGISTER_DIG_P1);
dig_P2 = read_word_data_signed(BMP280_REGISTER_DIG_P2);
dig_P3 = read_word_data_signed(BMP280_REGISTER_DIG_P3);
dig_P4 = read_word_data_signed(BMP280_REGISTER_DIG_P4);
dig_P5 = read_word_data_signed(BMP280_REGISTER_DIG_P5);
dig_P6 = read_word_data_signed(BMP280_REGISTER_DIG_P6);
dig_P7 = read_word_data_signed(BMP280_REGISTER_DIG_P7);
dig_P8 = read_word_data_signed(BMP280_REGISTER_DIG_P8);
dig_P9 = read_word_data_signed(BMP280_REGISTER_DIG_P9);
}
void read(){
int raw_temperature_msb, raw_temperature_lsb, raw_temperature_xlsb;
int raw_pressure_msb, raw_pressure_lsb, raw_pressure_xlsb;
int raw_temperature;
int raw_pressure;
double var1, var2, temperature, t_fine, pressure, altitude;
raw_temperature_msb = read_byte_data(BMP280_REGISTER_TEMPDATA_MSB); raw_temperature_lsb = read_byte_data(BMP280_REGISTER_TEMPDATA_LSB); raw_temperature_xlsb = read_byte_data(BMP280_REGISTER_TEMPDATA_XLSB); raw_pressure_msb = read_byte_data(BMP280_REGISTER_PRESSDATA_MSB); raw_pressure_lsb = read_byte_data(BMP280_REGISTER_PRESSDATA_LSB); raw_pressure_xlsb = read_byte_data(BMP280_REGISTER_PRESSDATA_XLSB);
raw_temperature=(raw_temperature_msb <<12)+(raw_temperature_lsb<<4)+(raw_temperature_xlsb>>4); raw_pressure=(raw_pressure_msb <<12)+(raw_pressure_lsb <<4)+(raw_pressure_xlsb >>4);
var1=(raw_temperature/16384.0-dig_T1/1024.0)*dig_T2; var2=(raw_temperature/131072.0-dig_T1/8192.0)*(raw_temperature/131072.0-dig_T1/8192.0)*dig_T3; temperature=(var1+var2)/5120.0; t_fine=(var1+var2);
var1=t_fine/2.0-64000.0; var2=var1*var1*dig_P6/32768.0; var2=var2+var1*dig_P5*2; var2=var2/4.0+dig_P4*65536.0; var1=(dig_P3*var1*var1/524288.0+dig_P2*var1)/524288.0; var1=(1.0+var1/32768.0)*dig_P1; pressure=1048576.0-raw_pressure; pressure=(pressure-var2/4096.0)*6250.0/var1; var1=dig_P9*pressure*pressure/2147483648.0; var2=pressure*dig_P8/32768.0; pressure=pressure+(var1+var2+dig_P7)/16.0;
bmp.temperature = temperature;
bmp.pressure = pressure / 100.0;
}
void main(){
int address = 0x77;
bmp280 = wiringPiI2CSetup(address);
while (1){
read_id();
if(bmp.chip_id == 88){
reg_check();
read();
printf("Temperature : %2.2f `C\n", bmp.temperature);
printf("Pressure : %5.4f mbar\n\n", bmp.pressure);
}
else{
printf("Error\n");
printf("Chip ID : %d\n", bmp.chip_id);
printf("Version : %d\n", bmp.chip_version);
delay(1000);
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sample gtk with label
#include <gtk/gtk.h>
void main(int argc, char *argv[])
{
gtk_init (&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(win), 250, 150);
GtkWidget *lbl = gtk_label_new ("100 C");
GtkWidget *lbl2 = gtk_label_new ("Bar");
GtkWidget *tbl = gtk_table_new (1, 2, TRUE);
gtk_table_attach_defaults (GTK_TABLE (tbl),lbl, 0,1,0,1);
gtk_table_attach_defaults (GTK_TABLE (tbl),lbl2, 1,2,0,1);
gtk_container_add (GTK_CONTAINER (win), tbl);
gtk_widget_show_all (win);
gtk_main();
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
problem one { trying replaced the gtk label with bmp280 reading }
#include <stdio.h>
#include <wiringPiI2C.h>
#include <math.h>
#include <gtk/gtk.h>
#include <string.h>
#include <glib.h>
#include <unistd.h>
#define QNH 1020
#define POWER_MODE 3 // normal mode
#define OSRS_T 5 // 20 Bit
#define OSRS_P 5 // 20 Bit ultra high resolution
#define FILTER 4 //
#define T_SB 4 // 100 500ms
#define BMP280_REGISTER_DIG_T1 0x88
#define BMP280_REGISTER_DIG_T2 0x8A
#define BMP280_REGISTER_DIG_T3 0x8C
#define BMP280_REGISTER_DIG_P1 0x8E
#define BMP280_REGISTER_DIG_P2 0x90
#define BMP280_REGISTER_DIG_P3 0x92
#define BMP280_REGISTER_DIG_P4 0x94
#define BMP280_REGISTER_DIG_P5 0x96
#define BMP280_REGISTER_DIG_P6 0x98
#define BMP280_REGISTER_DIG_P7 0x9A
#define BMP280_REGISTER_DIG_P8 0x9C
#define BMP280_REGISTER_DIG_P9 0x9E
#define BMP280_REGISTER_CHIPID 0xD0
#define BMP280_REGISTER_VERSION 0xD1
#define BMP280_REGISTER_SOFTRESET 0xE0
#define BMP280_REGISTER_CONTROL 0xF4
#define BMP280_REGISTER_CONFIG 0xF5
#define BMP280_REGISTER_STATUS 0xF3
#define BMP280_REGISTER_TEMPDATA_MSB 0xFA
#define BMP280_REGISTER_TEMPDATA_LSB 0xFB
#define BMP280_REGISTER_TEMPDATA_XLSB 0xFC
#define BMP280_REGISTER_PRESSDATA_MSB 0xF7
#define BMP280_REGISTER_PRESSDATA_LSB 0xF8
#define BMP280_REGISTER_PRESSDATA_XLSB 0xF9
int CONFIG = (T_SB <<5) + (FILTER <<2); int CTRL_MEAS = (OSRS_T <<5) + (OSRS_P <<2) + POWER_MODE;
int bmp280 = 0;
struct {
int chip_id;
int chip_version;
double temperature;
double pressure;
double altitude;
} bmp;
int dig_T1 = 0;
int dig_T2 = 0;
int dig_T3 = 0;
int dig_P1 = 0;
int dig_P2 = 0;
int dig_P3 = 0;
int dig_P4 = 0;
int dig_P5 = 0;
int dig_P6 = 0;
int dig_P7 = 0;
int dig_P8 = 0;
int dig_P9 = 0;
void write_byte_data(int reg, int value){
wiringPiI2CWriteReg8(bmp280, reg, value);
}
int read_byte_data(int reg){
int result;
result = wiringPiI2CReadReg8(bmp280, reg);
return result;
}
int read_word_data_unsigned(int reg){
int result;
result = wiringPiI2CReadReg16(bmp280, reg);
return result;
}
int read_word_data_signed(int reg){
int result;
result = read_word_data_unsigned(reg);
if (result > 32767){
result -= 65536;
}
return result;
}
void read_id(self){
int REG_ID = 0xD0;
int result;
result = read_word_data_unsigned(REG_ID);
bmp.chip_id = result & 0x00FF;
bmp.chip_version = result >> 8;
}
void reg_check(self){
write_byte_data(BMP280_REGISTER_SOFTRESET, 0xB6);
delay(200);
write_byte_data(BMP280_REGISTER_CONTROL, CTRL_MEAS);
delay(200);
write_byte_data(BMP280_REGISTER_CONFIG, CONFIG);
delay(200);
dig_T1 = read_word_data_unsigned(BMP280_REGISTER_DIG_T1); dig_T2 = read_word_data_signed(BMP280_REGISTER_DIG_T2);
dig_T3 = read_word_data_signed(BMP280_REGISTER_DIG_T3);
dig_P1 = read_word_data_unsigned(BMP280_REGISTER_DIG_P1);
dig_P2 = read_word_data_signed(BMP280_REGISTER_DIG_P2);
dig_P3 = read_word_data_signed(BMP280_REGISTER_DIG_P3);
dig_P4 = read_word_data_signed(BMP280_REGISTER_DIG_P4);
dig_P5 = read_word_data_signed(BMP280_REGISTER_DIG_P5);
dig_P6 = read_word_data_signed(BMP280_REGISTER_DIG_P6);
dig_P7 = read_word_data_signed(BMP280_REGISTER_DIG_P7);
dig_P8 = read_word_data_signed(BMP280_REGISTER_DIG_P8);
dig_P9 = read_word_data_signed(BMP280_REGISTER_DIG_P9);
}
void read(){
int raw_temperature_msb, raw_temperature_lsb, raw_temperature_xlsb;
int raw_pressure_msb, raw_pressure_lsb, raw_pressure_xlsb;
int raw_temperature;
int raw_pressure;
double var1, var2, temperature, t_fine, pressure, altitude;
raw_temperature_msb = read_byte_data(BMP280_REGISTER_TEMPDATA_MSB); raw_temperature_lsb = read_byte_data(BMP280_REGISTER_TEMPDATA_LSB); raw_temperature_xlsb = read_byte_data(BMP280_REGISTER_TEMPDATA_XLSB); raw_pressure_msb = read_byte_data(BMP280_REGISTER_PRESSDATA_MSB); raw_pressure_lsb = read_byte_data(BMP280_REGISTER_PRESSDATA_LSB); raw_pressure_xlsb = read_byte_data(BMP280_REGISTER_PRESSDATA_XLSB);
raw_temperature=(raw_temperature_msb <<12)+(raw_temperature_lsb<<4)+(raw_temperature_xlsb>>4); raw_pressure=(raw_pressure_msb <<12)+(raw_pressure_lsb <<4)+(raw_pressure_xlsb >>4);
var1=(raw_temperature/16384.0-dig_T1/1024.0)*dig_T2; var2=(raw_temperature/131072.0-dig_T1/8192.0)*(raw_temperature/131072.0-dig_T1/8192.0)*dig_T3; temperature=(var1+var2)/5120.0; t_fine=(var1+var2);
var1=t_fine/2.0-64000.0; var2=var1*var1*dig_P6/32768.0; var2=var2+var1*dig_P5*2; var2=var2/4.0+dig_P4*65536.0; var1=(dig_P3*var1*var1/524288.0+dig_P2*var1)/524288.0; var1=(1.0+var1/32768.0)*dig_P1; pressure=1048576.0-raw_pressure; pressure=(pressure-var2/4096.0)*6250.0/var1; var1=dig_P9*pressure*pressure/2147483648.0; var2=pressure*dig_P8/32768.0; pressure=pressure+(var1+var2+dig_P7)/16.0;
bmp.temperature = temperature;
bmp.pressure = pressure / 100.0;
}
int main(){
int address = 0x77;
bmp280 = wiringPiI2CSetup(address);
while (1){
read_id();
char Sta[100];
char Stb[100];
if(bmp.chip_id == 88){
reg_check();
read();
sprintf(Sta, "Temperature : %2.2f `C\n", bmp.temperature);
sprintf(Stb, "Pressure : %5.4f mbar\n\n", bmp.pressure);
}
else{
printf("Error\n");
sprintf(Sta, "Chip ID : %d\n", bmp.chip_id);
sprintf(Stb, "Version : %d\n", bmp.chip_version);
delay(1000);
}
int gtk(int argc, char *argv[])
{
gtk_init (&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(win), 250, 150);
GtkWidget *lbl = gtk_label_new (Sta);
GtkWidget *lbl2 = gtk_label_new (Stb);
GtkWidget *tbl = gtk_table_new (1, 2, TRUE);
gtk_table_attach_defaults (GTK_TABLE (tbl),lbl, 0,1,0,1);
gtk_table_attach_defaults (GTK_TABLE (tbl),lbl2, 1,2,0,1);
gtk_container_add (GTK_CONTAINER (win), tbl);
gtk_widget_show_all (win);
gtk_main();
}
}
}
What I have tried:
i might a starter for c Programming, but i had given a task to make a gui of bmp280 sensor. Actually i haven't learn any programming before, suddenly i had transfer to programming part and i had to make the GUI about sensor reading. i want to get solution as fast as possible.