在坛友叶斌的帮助下,第一版OLED的软件算是出来了,下面贴图先{:soso_e113:}
软件是参考http://www.instructables.com/id/ ... erature-Compass-An/修改的。
目前的情况是:1.秒数隔两秒才跳动一次;
2.温度一直显示:211℃;
3.高度一直显示-626m,气压一直显示109076;
4.有时按多次按键画面都不能切换;有时按按键会熄屏;
5.不能调时间;
6.开机反应慢
下面放代码出来,本人不会编程,代码全是叶斌帮忙写的,他目前很忙,所有大家有空的话最好能帮忙改一下,谢谢![pre lang="arduino" line="1" file="原版代码"]- [code][code][code][code]#include "Wire.h"
- #include "I2Cdev.h"
- #include "MPU6050.h"
- #include "U8glib.h"
- #include "Time.h"
- #include "HMC5883L.h"
- #include "Adafruit_BMP085.h"
- #include "avr/sleep.h"
- #include "avr/power.h"
- #include "avr/wdt.h"
- U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
- #define NUMCOUNTB1 7
- #define NUMCOUNTB2 3
- #define NUMCOUNTB3 3
- #define NUMCOUNTB4 3
- #define NUMBOT1 350 //miliseconds to activate button 2
- #define NUM2 7
- #define NUM3 10
- #define NUM4 7
- #define NUM5 33000 //acc. for wlaking
- #define NUM6 46000 //acc. for running
- #define NUM7 1300 //acc. for running
- #define BOTAO 2
- #define KcalWalk 0.0392 // == (0,7 m/step) * (56kcal/km) / (1000 m)
- #define KcalRun 0.0544 // == (0,8 m/step) * (68kcal/km) / (1000 m)
- //BOTOES
- int BOTAO_01 = 0;
- int BOTAO_02 = 0;
- int BOTAO_03 = 0;
- int BOTAO_04 = 0;
- int BOTAO_05 = 0;
- long int timer_botao = 0;
- //BUSSOLA
- MPU6050 accelgyro;
- Adafruit_BMP085 bmp;
- HMC5883L compass;
- double error;
- int Z = -30;
- int k = 0;
- int y = 0;
- int16_t ax, ay, az;
- int16_t gx, gy, gz;
- int16_t mx, my, mz;
- unsigned long int PdXYZ[NUM3];
- unsigned long int PdXYZant;
- unsigned long int PdXYZat;
- unsigned long int PdXYZmax[NUM4];
- unsigned long int PdXYZmed;
- unsigned long int timerpasso = 0;
- unsigned long int passo = 0;
- unsigned long int activestep = 0;
- unsigned long int actstep = 0;
- boolean andando = false;
- boolean correndo = false;
- double calorie = 0;
- unsigned int KcalD[NUM2];
- unsigned int KcalMed;
- unsigned long int KcalT = 0;
- unsigned int stepD[NUM2];
- unsigned int stepMed;
- unsigned long int stepT = 0;
- boolean dayrefresh = false;
- boolean meiopasso = false;
- boolean active = false;
- unsigned long int timer_var1;
- unsigned long int timer_var2;
- unsigned long int timer_disp;
- unsigned long int timer_step;
- String str1; //declaring string
- String str2; //declaring string
- String str3; //declaring string
- String str4; //declaring string
- String str5; //declaring string
- String str6; //declaring string
- String str7; //declaring string
- String str8; //declaring string
- String str9; //declaring string
- String str10; //declaring string
- String str11; //declaring string
- String str12; //declaring string
- String str13; //declaring string
- ISR(WDT_vect)
- {
- }
- void enterSleep(void)
- {
- set_sleep_mode(SLEEP_MODE_PWR_DOWN); /* EDIT: could also use SLEEP_MODE_PWR_SAVE */
- sleep_enable();
- /* Now enter sleep mode. */
- sleep_mode();
- sleep_disable(); /* First thing to do is disable sleep. */
- power_all_enable();
- }
- void setup(void) {
- pinMode(BOTAO, INPUT_PULLUP);
- Wire.begin();
- setTime(18, 28, 0, 21, 06, 2015);
- accelgyro.initialize();
- Wire.beginTransmission(0x68);
- Wire.write(0x37);
- Wire.write(0x02);
- Wire.endTransmission();
- Wire.beginTransmission(0x68);
- Wire.write(0x6A);
- Wire.write(0x00);
- Wire.endTransmission();
- //Disable Sleep Mode
- Wire.beginTransmission(0x68);
- Wire.write(0x6B);
- Wire.write(0x00);
- Wire.endTransmission();
- compass = HMC5883L();
- compass.SetScale(1.3);
- error = compass.SetMeasurementMode(Measurement_Continuous);
- if (!bmp.begin()) {
- while (1) {}
- }
- //watchdog on
- MCUSR &= ~(1 << WDRF);
- WDTCSR |= (1 << WDCE) | (1 << WDE);
- WDTCSR = 1 << WDP1; /* 32ms sleep */
- WDTCSR |= _BV(WDIE);
- //first readstr1 = String(hour()); //converting integer into a string
- str6 = String((int)(bmp.readTemperature() - 2));
- str6 = str6 + "*C";
- str7 = String((long int)(bmp.readAltitude()));
- str7 = str7 + " m";
- str8 = String((long int)(bmp.readPressure()));
- str9 = String((int)error);
- str9 = str9 + "'";
- if ((error > -23) && (error < 23)) str10 = "NT";
- if ((error < -157) || (error > 157)) str10 = "SL";
- if ((error > -113) && (error < -67)) str10 = "OE";
- if ((error > 67) && (error < 113)) str10 = "LE";
- if ((error >= -67) && (error <= -23)) str10 = "NO";
- if ((error >= 23) && (error <= 67)) str10 = "NE";
- if ((error >= -157) && (error <= -113)) str10 = "SO";
- if ((error >= 113) && (error <= 157)) str10 = "SE";
- steps();
- str11 = String(passo);
- str12 = String((int)calorie);
- str13 = String((int)(((double)passo) * 0.75));
- }
- void loop(void) {
- enterSleep();
- if (!digitalRead(BOTAO)) {
- timer_botao = millis();
- while (!digitalRead(BOTAO)) {
- //wait
- delay(1);
- }
- if ((millis() - timer_botao) > NUMBOT1) {
- BOTAO_02++;
- } else {
- if (BOTAO_02 > 0) {
- switch (BOTAO_02) {
- case 4:
- setTime(hour(), minute(), second(), day() + 1, month(), year());
- break;
- case 5:
- setTime(hour(), minute(), second(), day(), month() + 1, year());
- break;
- case 6:
- if (year() < 2020) setTime(hour(), minute(), second(), day(), month(), year() + 1);
- else setTime(hour(), minute(), second(), day(), month(), 2015);
- break;
- case 3:
- setTime(hour() + 1, minute(), second(), day(), month(), year());
- break;
- case 2:
- setTime(hour(), minute() + 1, second(), day(), month(), year());
- break;
- case 1:
- setTime(hour(), minute(), second() + 1, day(), month(), year());
- break;
- case 7:
- BOTAO_02 = 0;
- break;
- }
- } else {
- BOTAO_01++;
- }
- }
- }
- switch (BOTAO_01) {
- case 0:
- BOTAO_02 = 0;
- break;
- case 1:
- if ((millis() - timer_var1) > 500) {
- str1 = String(hour()); //converting integer into a string
- str2 = String(minute()); //converting integer into a string
- str3 = String(second()); //converting integer into a string
- if (second() < 10) str3 = "0" + str3;
- if (minute() < 10) str2 = "0" + str2;
- if (hour() < 10) str1 = "0" + str1;
- str4 = str1 + ":" + str2 + ":" + str3;
- str1 = String(day());
- str2 = String(month());
- str3 = String(year());
- if (day() < 10) str1 = "0" + str1;
- if (month() < 10) str2 = "0" + str2;
- str5 = str1 + "/" + str2 + "/" + str3;
- timer_var1 = millis();
- if (BOTAO_02 >= NUMCOUNTB1) BOTAO_02 = 0;
- }
- case 2:
- if ((millis() - timer_var2) > 5000) {
- str6 = String((int)(bmp.readTemperature() - 2));
- str6 = str6 + "*C";
- str7 = String((long int)(bmp.readAltitude()));
- str7 = str7 + " m";
- str8 = String((long int)(bmp.readPressure()));
- timer_var2 = millis();
- }
- break;
- case 3:
- if ((millis() - timer_var2) > 100) {
- leitura();
- str9 = String((int)error);
- str9 = str9 + "'";
- if ((error > -23) && (error < 23)) str10 = "NT";
- if ((error < -157) || (error > 157)) str10 = "SL";
- if ((error > -113) && (error < -67)) str10 = "OE";
- if ((error > 67) && (error < 113)) str10 = "LE";
- if ((error >= -67) && (error <= -23)) str10 = "NO";
- if ((error >= 23) && (error <= 67)) str10 = "NE";
- if ((error >= -157) && (error <= -113)) str10 = "SO";
- if ((error >= 113) && (error <= 157)) str10 = "SE";
- timer_var2 = millis();
- }
- break;
- case 4:
- if ((millis() - timer_var2) > 1000) {
- steps();
- str11 = String(passo);
- str12 = String((int)calorie);
- str13 = String((int)(((double)passo) * 0.75));
- timer_var2 = millis();
- }
- break;
- case 5:
- BOTAO_01 = 0;
- break;
- }
- if ((millis() - timer_disp) > 500) {
- u8g.firstPage();
- do {
- draw();
- u8g.setColorIndex(1);
- } while ( u8g.nextPage() );
- timer_disp = millis();
- }
- pedometer();
- delay(20);
- }
- void leitura()
- {
- MagnetometerScaled scaled = compass.ReadScaledAxis();
- error = atan2(scaled.YAxis, scaled.XAxis);
- error = error - 2.094; //correction on error
- error = error * 180 / M_PI;
- if (error < -180) error = 360 + error; //correction again
- accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
- ax = abs(ax);
- ay = abs(ay);
- az = abs(az);
- }
- void draw(void) {
- char b[20];
- switch (BOTAO_01) {
- case 0:
- BOTAO_02 = 0;
- break;
- case 1:
- u8g.drawLine(0, 0, 127, 0);
- u8g.drawLine(0, 23, 127, 23);
- u8g.drawLine(127, 0, 127, 63);
- u8g.drawLine(127, 63, 0, 63);
- u8g.drawLine(0, 63, 0, 0);
- u8g.setFont(u8g_font_fub11r);
- str5.toCharArray(b, 11);
- u8g.drawStr( 11, 20, b);
- str4.toCharArray(b, 11);
- u8g.drawStr( 24, 50, b);
- switch (BOTAO_02) {
- case 4: u8g.drawLine(10, 2, 35, 2);
- break;
- case 5: u8g.drawLine(40, 2, 67, 2);
- break;
- case 6: u8g.drawLine(75, 2, 116, 2);
- break;
- case 3: u8g.drawLine(25, 33, 48, 33);
- break;
- case 2: u8g.drawLine(53, 33, 77, 33);
- break;
- case 1: u8g.drawLine(80, 33, 105, 33);
- break;
- }
- break;
- case 2:
- u8g.drawLine(0, 0, 127, 0);
- u8g.drawLine(0, 22, 127, 22);
- u8g.drawLine(0, 42, 127, 42);
- u8g.drawLine(127, 0, 127, 63);
- u8g.drawLine(127, 63, 0, 63);
- u8g.drawLine(0, 63, 0, 0);
- u8g.drawStr( 2, 18, "Temp:");
- u8g.drawStr( 2, 40, "Altd:");
- u8g.drawStr( 2, 60, "Pres:");
- str6.toCharArray(b, 11);
- u8g.drawStr(68, 18, b);
- str7.toCharArray(b, 11);
- u8g.drawStr(68, 40, b);
- str8.toCharArray(b, 11);
- u8g.drawStr(68, 60, b);
- break;
- case 3:
- u8g.drawLine(0, 0, 127, 0);
- u8g.drawLine(0, 32, 75, 32);
- u8g.drawLine(127, 0, 127, 63);
- u8g.drawLine(127, 63, 0, 63);
- u8g.drawLine(0, 63, 0, 0);
- u8g.drawLine(75, 0, 75, 63);
- str10.toCharArray(b, 11);
- u8g.drawStr( 24, 24, b);
- str9.toCharArray(b, 11);
- u8g.drawStr( 15, 56, b);
- u8g.drawCircle(100, 32, 20);
- u8g.drawLine(100, 32, 100 - (20 * sin(error * PI / 180)), 32 - (20 * cos(error * PI / 180)));
- break;
- case 4:
- u8g.drawLine(0, 0, 127, 0);
- u8g.drawLine(0, 22, 127, 22);
- u8g.drawLine(0, 42, 127, 42);
- u8g.drawLine(127, 0, 127, 63);
- u8g.drawLine(127, 63, 0, 63);
- u8g.drawLine(0, 63, 0, 0);
- u8g.drawStr( 2, 18, "Step:");
- u8g.drawStr( 2, 40, "Kcal:");
- u8g.drawStr( 2, 60, "Mts:");
- str11.toCharArray(b, 11);
- u8g.drawStr(65, 18, b);
- str12.toCharArray(b, 11);
- u8g.drawStr(65, 40, b);
- str13.toCharArray(b, 11);
- u8g.drawStr(65, 60, b);
- break;
- }
- }
- void pedometer() {
- int m = 0;
- PdXYZ[k] = abs((signed long int) (ax)) + abs((signed long int) (ay)) + abs((signed long int) (az));
- PdXYZant = PdXYZat;
- PdXYZat = PdXYZ[k];
- if (k == (NUM3 - 1)) {
- PdXYZmax[y] = 0;
- for (m = 0; m < NUM3; m++) {
- if (PdXYZmax[y] < PdXYZ[m]) {
- PdXYZmax[y] = PdXYZ[m];
- }
- }
- }
- if (y == (NUM4 - 1)) {
- PdXYZmed = 0;
- for (m = 0; m < NUM4; m++) {
- PdXYZmed = PdXYZmed + PdXYZmax[m] / NUM4;
- }
- }
- if (PdXYZmed > NUM5) {
- if (PdXYZmed > NUM6) {
- correndo = true;
- andando = false;
- } else {
- correndo = false;
- andando = true;
- }
- if ((PdXYZat > (PdXYZant + NUM7)) && (!meiopasso)) {
- meiopasso = true;
- timerpasso = millis();
- }
- if ((PdXYZat < (PdXYZant - NUM7)) && (meiopasso)) {
- activestep++;
- if ((millis() - timer_step) >= 10000) {
- if ((activestep - actstep) >= 10) {
- if (!active) {
- active = true;
- passo = passo + (activestep - actstep);
- calorie = calorie + (correndo * KcalRun + andando * KcalWalk) * (activestep - actstep);
- }
- active = true;
- }
- else {
- active = false;
- }
- actstep = activestep;
- timer_step = millis();
- }
- if (active) {
- passo++;
- calorie = calorie + correndo * KcalRun + andando * KcalWalk;
- }
- meiopasso = false;
- }
- } else {
- correndo = false;
- andando = false;
- }
- if ((millis() - timerpasso) >= 1000) {
- meiopasso = false;
- correndo = false;
- andando = false;
- }
- k++;
- if (k >= NUM3) k = 0;
- y++;
- if (y >= NUM4) y = 0;
- }
- void steps() {
- int m = 0;
- if (hour() > 1) dayrefresh = true;
- if ((hour() == 0) && (minute() == 0) && (dayrefresh)) {
- for (m = 0; m < (NUM2 - 1); m++) {
- KcalD[m] = KcalD[m + 1];
- stepD[m] = stepD[m + 1];
- }
- KcalD[NUM2] = calorie;
- KcalMed = 0;
- stepMed = 0;
- for (m = 0; m < NUM2; m++) {
- KcalMed = KcalMed + KcalD[m] / NUM2;
- stepMed = stepMed + stepD[m] / NUM2;
- }
- stepT = stepT + passo;
- KcalT = KcalT + calorie;
- calorie = 0;
- stepD[NUM2] = passo;
- passo = 0;
- dayrefresh = false;
- }
- }
复制代码 [/code][/code][/code][/code][/code]
这个是原版的代码
下面是叶斌修改之后的代码:
/*
reference URL:
oled Watch1: http://geek-workshop.com/forum.p ... &highlight=oled
oled watch2: http://geek-workshop.com/forum.p ... &highlight=oled
original code: http://geek-workshop.com/home.ph ... mp;touid=35816#last
how to Choose the u8glib font :https://code.google.com/p/u8glib/wiki/tstring
NOTE:
add DS3231
add DHT11 humidity
not use D218B20 because the DHT11 and DS3231, and BMP085 can also measure the tmeperature
important: NOTE: i think that i should add my DHT11's humaduty in Draw function's case 2
*/
#include "U8glib.h"
#include "DHT11.h"
#include "I2Cdev.h" // if you get the I2Cdev.h , you could use the BMP085 directly
#include "HMC5883L.h"
#include "DS3231.h"
#include "Wire.h"
#include "Adafruit_BMP085.h"
#include "avr/sleep.h"
#include "avr/power.h"
#include "avr/wdt.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
int dhtPin = 10;
DHT11 dht11(dhtPin);
//========定义时钟需要的各种变量========
DS3231 Clock;
HMC5883L compass;
Adafruit_BMP085 bmp;
//-------set font Large、Middle、Small
#define setFont_L u8g.setFont(u8g_font_7x13)
#define setFont_M u8g.setFont(u8g_font_fixed_v0r)
#define setFont_S u8g.setFont(u8g_font_chikitar)
#define BOTAO 13 // digital Pin 2, maybe it is a wakeup button
#define DHT11PIN 10
#define NUMCOUNTB1 7
#define NUMCOUNTB2 3
#define NUMCOUNTB3 3
#define NUMCOUNTB4 3
#define NUMBOT1 350 //miliseconds to activate button 2
#define NUM2 7
#define NUM3 10
#define NUM4 7
#define NUM5 33000 //acc. for wlaking
#define NUM6 46000 //acc. for running
#define NUM7 1300 //acc. for running
//BOTOES BOTOES is a brazil word , which means button
int BOTAO_01 = 0;
int BOTAO_02 = 0; // this variable is for settup time, when BOTAO_02 is increase 7, it will be settup 0
int BOTAO_03 = 0;
int BOTAO_04 = 0;
int BOTAO_05 = 0;
int second, minute, hour, date, dow, month, year;
double error;
long int timer_botao = 0;
int err;
float temp, humi;
bool Century = false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
unsigned long int timer_var1;
unsigned long int timer_var2;
unsigned long int timer_disp;
String str1; //declaring string
String str2; //declaring string
String str3; //declaring string
String str4; //declaring string
String str5; //declaring string
String str6; //declaring string
String str7; //declaring string
String str8; //declaring string
String str9; //declaring string
String str10; //declaring string
String str11; //declaring string
String str12; //declaring string
String str13 = "YeBin"; //declaring string
String str14;
String str15;
String str16;
ISR(WDT_vect)
{
}
void enterSleep(void)
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN); /* EDIT: could also use SLEEP_MODE_PWR_SAVE */
sleep_enable();
/* Now enter sleep mode. */
sleep_mode();
sleep_disable(); /* First thing to do is disable sleep. */
power_all_enable();
}
void setup(void) {
pinMode(BOTAO,INPUT);
Wire.begin();
Clock.setSecond(50);
Clock.setMinute(05);
Clock.setHour(11);
Clock.setDoW(7);
Clock.setDate(01);
Clock.setMonth(11);
Clock.setYear(15);
Clock.setClockMode(true);
compass = HMC5883L();
compass.SetScale(1.3);
error = compass.SetMeasurementMode(Measurement_Continuous);
if (!bmp.begin()) {
while (1) {}
}
//watchdog on
MCUSR &= ~(1 << WDRF);
WDTCSR |= (1 << WDCE) | (1 << WDE);
WDTCSR = 1 << WDP1; /* 32ms sleep */
WDTCSR |= _BV(WDIE);
//first readstr1 = String(hour()); //converting integer into a string
str6 = String((int)(bmp.readTemperature() - 2));
str6 = str6 + "*C";
str7 = String((long int)(bmp.readAltitude()));
str7 = str7 + " m";
str8 = String((long int)(bmp.readPressure()));
str9 = String((int)error);
str9 = str9 + "'";
if ((error > -23) && (error < 23)) str10 = "NT";
if ((error < -157) || (error > 157)) str10 = "SL";
if ((error > -113) && (error < -67)) str10 = "OE";
if ((error > 67) && (error < 113)) str10 = "LE";
if ((error >= -67) && (error <= -23)) str10 = "NO";
if ((error >= 23) && (error <= 67)) str10 = "NE";
if ((error >= -157) && (error <= -113)) str10 = "SO";
if ((error >= 113) && (error <= 157)) str10 = "SE";
//steps();
//str11 = String(passo); // passo means step
//str12 = String((int)calorie); // calorie means
//str13 = String((int)(((double)passo) * 0.75));
}
void loop(void) {
enterSleep();
if (digitalRead(BOTAO))
{
timer_botao = millis();
while (!digitalRead(BOTAO))
{
//wait
delay(1);
}
/************************************ if ((millis() - timer_botao) > NUMBOT1) ***************************************/
if ((millis() - timer_botao) > NUMBOT1) // NUMBOT1's value is 350 millisecond which mean you should press you button until 350 millisecond
{
BOTAO_02++;
}
else
{
if (BOTAO_02 > 0) { //BOTAO_02 variable is for setting time
switch (BOTAO_02) {
case 4:
//setTime(hour(), minute(), second(), day() + 1, month(), year());
Clock.setDate(Clock.getDate() + 1);
break;
case 5:
//setTime(hour(), minute(), second(), day(), month() + 1, year());
Clock.setMonth(Clock.getMonth(Century) + 1);
break;
case 6:
if (Clock.getYear() < 2020)
//setTime(hour(), minute(), second(), day(), month(), year() + 1);
Clock.setYear(Clock.getYear() + 1);
else
//setTime(hour(), minute(), second(), day(), month(), 2015);
Clock.setYear(2015);
break;
case 3:
//setTime(hour() + 1, minute(), second(), day(), month(), year());
Clock.setHour(Clock.getHour(h12, PM) + 1);
break;
case 2:
//setTime(hour(), minute() + 1, second(), day(), month(), year());
Clock.setMinute(Clock.getMinute() + 1);
break;
case 1:
//setTime(hour(), minute(), second() + 1, day(), month(), year());
Clock.setSecond(Clock.getSecond() + 1);
break;
case 7:
BOTAO_02 = 0;
break;
}
} else {
BOTAO_01++;
}
}
/************************************ if ((millis() - timer_botao) > NUMBOT1) ***************************************/
}
/************************************ if (!digitalRead(BOTAO)) ***************************************/
/************************************ switch (BOTAO_01) ***************************************/
switch (BOTAO_01) {
case 0:
BOTAO_02 = 0;
break;
case 1: // here for time display setup
if ((millis() - timer_var1) > 500) {
str1 = String(Clock.getHour(h12, PM)); //converting integer into a string
str2 = String(Clock.getMinute()); //converting integer into a string
str15 = String(Clock.getSecond()); //converting integer into a string
if (Clock.getSecond() < 10) str3 = "0" + str3;
if (Clock.getMinute() < 10) str2 = "0" + str2;
if (Clock.getHour(h12, PM) < 10) str1 = "0" + str1;
str4 = str1 + ":" + str2;
str16 = ":" + str15;
str1 = String(Clock.getYear());
str2 = String(Clock.getMonth(Century));
str3 = String(Clock.getDate());
str14 = String(Clock.getDoW());
if (Clock.getDate() < 10) str1 = "0" + str1;
if (Clock.getMonth(Century) < 10) str2 = "0" + str2;
str5 ="2" + str1 + "." + str2 + "." + str3;
timer_var1 = millis();
if (BOTAO_02 >= NUMCOUNTB1) BOTAO_02 = 0;
}
case 2: // here for temperature altitude and pressure display setup
if ((millis() - timer_var2) > 5000) {
str6 = String((int)(bmp.readTemperature() - 2));
str6 = str6 + "*C";
str7 = String((long int)(bmp.readAltitude()));
str7 = str7 + " m";
str8 = String((long int)(bmp.readPressure()));
timer_var2 = millis();
}
break;
case 3: // here is for compass display setup
if ((millis() - timer_var2) > 100) {
leitura();
str9 = String((int)error);
str9 = str9 + "'";
if ((error > -23) && (error < 23)) str10 = "NT";
if ((error < -157) || (error > 157)) str10 = "SL";
if ((error > -113) && (error < -67)) str10 = "OE";
if ((error > 67) && (error < 113)) str10 = "LE";
if ((error >= -67) && (error <= -23)) str10 = "NO";
if ((error >= 23) && (error <= 67)) str10 = "NE";
if ((error >= -157) && (error <= -113)) str10 = "SO";
if ((error >= 113) && (error <= 157)) str10 = "SE";
timer_var2 = millis();
}
break;
case 4:
if ((millis() - timer_var2) > 1000) {
if ((err = dht11.read(humi, temp)) == 0)
{
str11 = String((int)temp);
str11 = str11 + "*C";
str12 = String((int)humi);
str12 = str12 + "%";
}
else
{
str11 = "Error Read";
str12 = "Error Read";
str13 = "DTH11 Read";
}
/*
steps();
str11 = String(passo);
str12 = String((int)calorie);
str13 = String((int)(((double)passo) * 0.75));
*/
timer_var2 = millis();
}
break;
case 5:
BOTAO_01 = 0;
break;
}
/************************************ switch (BOTAO_01) ***************************************/
if ((millis() - timer_disp) > 500) {
u8g.firstPage();
do {
draw();
u8g.setColorIndex(1);
} while ( u8g.nextPage() );
timer_disp = millis();
}
delay(20);
}
/****************************** loop ********* loop ************** loop **************************/
//======definded Draw function======
void draw(void) {
char b[20];
switch (BOTAO_01) {
case 0:
BOTAO_02 = 0;
break;
case 1:
u8g.setFont(u8g_font_freedoomr25n);
str4.toCharArray(b, 10);
u8g.drawStr( 10, 60, b);
u8g.setFont(u8g_font_gdr10);
str16.toCharArray(b, 102);
u8g.drawStr( 102, 58, b);
str5.toCharArray(b, 10);
u8g.drawStr( 10, 18, b);
str14.toCharArray(b, 110);
u8g.drawStr( 110, 18, b);
switch (BOTAO_02) {
case 4: u8g.drawLine(10, 2, 35, 2);
break;
case 5: u8g.drawLine(40, 2, 67, 2);
break;
case 6: u8g.drawLine(75, 2, 116, 2);
break;
case 3: u8g.drawLine(25, 33, 48, 33);
break;
case 2: u8g.drawLine(53, 33, 77, 33);
break;
case 1: u8g.drawLine(80, 33, 105, 33);
break;
}
break;
case 2: // NOTE: i think that i should add my DHT11's humaduty here
u8g.drawLine(0, 0, 127, 0);
u8g.drawLine(0, 22, 127, 22);
u8g.drawLine(0, 42, 127, 42);
u8g.drawLine(127, 0, 127, 63);
u8g.drawLine(127, 63, 0, 63);
u8g.drawLine(0, 63, 0, 0);
u8g.drawStr( 2, 18, "Temp:");
u8g.drawStr( 2, 40, "Altd:");
u8g.drawStr( 2, 60, "res:");
str6.toCharArray(b, 11);
u8g.drawStr(68, 18, b);
str7.toCharArray(b, 11);
u8g.drawStr(68, 40, b);
str8.toCharArray(b, 11);
u8g.drawStr(68, 60, b);
break;
case 3: //draw the HMC5883L information
u8g.drawLine(0, 0, 127, 0);
u8g.drawLine(0, 32, 75, 32);
u8g.drawLine(127, 0, 127, 63);
u8g.drawLine(127, 63, 0, 63);
u8g.drawLine(0, 63, 0, 0);
u8g.drawLine(75, 0, 75, 63);
str10.toCharArray(b, 11);
u8g.drawStr( 24, 24, b);
str9.toCharArray(b, 11);
u8g.drawStr( 15, 56, b);
u8g.drawCircle(100, 32, 20);
u8g.drawLine(100, 32, 100 - (20 * sin(error * PI / 180)), 32 - (20 * cos(error * PI / 180)));
break;
case 4:
u8g.drawLine(0, 0, 127, 0);
u8g.drawLine(0, 22, 127, 22);
u8g.drawLine(0, 42, 127, 42);
u8g.drawLine(127, 0, 127, 63);
u8g.drawLine(127, 63, 0, 63);
u8g.drawLine(0, 63, 0, 0);
u8g.drawStr( 2, 18, "Temp:");
u8g.drawStr( 2, 40, "Humi:");
u8g.drawStr( 2, 60, "Info:");
str6.toCharArray(b, 11);
u8g.drawStr(68, 18, b);
str12.toCharArray(b, 11);
u8g.drawStr(65, 40, b);
str13.toCharArray(b, 11);
u8g.drawStr(65, 60, b);
break;
}
}
void leitura() //get the HMC5883L information
{
MagnetometerScaled scaled = compass.ReadScaledAxis();
error = atan2(scaled.YAxis, scaled.XAxis);
error = error - 2.094; //correction on error
error = error * 180 / M_PI;
if (error < -180) error = 360 + error; //correction again
//accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//ax = abs(ax);
//ay = abs(ay);
//az = abs(az);
} |