• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Miernik temperatury wilgotności i ciśnienia
#21
Więc wgrałem, PWM wygląda że działa, problem jest tylko z wyświetlaniem tzn na ekranie 2 z wielkościami mierzonymi widać szybko migające w tle dane z ekranu 1, na jedynce też są blade śmieci.
 
Odpowiedź
#22
te 4 linie odkomenduj wyświetlają zegar w loop niepotrzebnie P.s. Jaki masz wyświetlacz ??

Kod:
digitalClockDisplay();          //display time
Serial.println();
lcd.setCursor(0,0);            
lcd.println();
lcdClockDisplay();


a to jest zbędne

Kod:
void lcdClockDisplay() {
lcd.setCursor(0,0);
lcd.print(hour());
displayDigits(minute());
displayDigits(second());
lcd.print("   ");
lcd.print(month());
lcd.print("/");
lcd.print(day());
lcd.print("/");
lcd.print(year());

}


tutaj nie może być żaden wpis związany z wyświetlaniem jeżeli coś z tego ma być wyświetlane musi być w strona 1 i strona 2 nigdzie indziej

Kod:
void determine_state() {
if ( ctr >= 0 && ctr < kTurnOn ) { // night
   set_state(kNightState);
   
   lcd.setCursor(0,2);
   //lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE ");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");
   
} else if ( ctr >= kTurnOn && ctr <= (kTurnOn+kFadeDuration) ) { // sunrise
 int foo[2];
 fader(kTurnOn, kNightState, kDayState, foo);
 set_state(foo);
   
   lcd.setCursor(0,2);
   //lcd.print("                   ");
   lcd.setCursor(3,2);
   lcd.print("SUNRISE/MODE");              
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");
} else if ( ctr > (kTurnOn+kFadeDuration) && ctr < kTurnOff ) { // day
 set_state(kDayState);
   
   lcd.setCursor(0,2);
   //lcd.print("                   ");
   lcd.setCursor(5,2);            
   lcd.print("DAY/MODE");              
  digitalWrite(ledEnable, HIGH);
  lcd.setCursor(7,3);
   lcd.print("LED-ON");
} else if ( ctr >= kTurnOff && ctr <= (kTurnOff+kFadeDuration) ) { // sunset
 int foo[2];
 fader(kTurnOff, kDayState, kNightState, foo);
 set_state(foo);
   lcd.setCursor(0,2);
   //lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("SUNSET/MODE");              
   //lcd.setCursor(11,2);
   //lcd.print("  ");
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");
} else if ( ctr > (kTurnOff+kFadeDuration) && ctr < 86400 ) { // night
 set_state(kNightState);
   lcd.setCursor(0,2);
   //lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");
}
}

/*
* Utility function for pretty digital clock time output
*/
void printDigits(int digits) {
Serial.print(":");
if(digits < 10)
 Serial.print('0');
Serial.print(digits);

}
void displayDigits(int digits) {
lcd.print(":");
if(digits < 10)
 lcd.print('0');
lcd.print(digits);

}

/*
* Display time
*/
void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print("  ");
Serial.print(month());
Serial.print("/");
Serial.print(day());
Serial.print("/");
Serial.print(year());
Serial.println();
}
void lcdClockDisplay() {
lcd.setCursor(0,0);
lcd.print(hour());
displayDigits(minute());
displayDigits(second());
lcd.print("   ");
lcd.print(month());
lcd.print("/");
lcd.print(day());
lcd.print("/");
lcd.print(year());

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#23
Wyświetlacz to 20x4
Po poprawkach wygląda to tak jednak nadal jest problem na ekranie z danymi ze statusem LED szybko zmieniają się stany pomiędzy ON i OFF
Kod:
#include <TimerOne.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <OneWire.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

OneWire  ds(11);  // on pin 10 (a 4.7K resistor is necessary)
Adafruit_BME280 bme; // I2C

const char *monthName[12] = {
"01", "02", "03", "04", "05", "06",
"07", "08", "09", "10", "11", "12"
};
byte temp[8] = //ikona temperatury
{
 B00100,
 B01010,
 B01010,
 B01110,
 B01110,
 B11111,
 B11111,
 B01110
};

byte wilg[8] = //ikona wilgotnosci
{
 B00100,
 B00100,
 B01010,
 B10001,
 B10001,
 B10001,
 B01110,
};

byte stopnie[8] = //ikona stopni
{
     B01100,
     B10010,
     B10010,
     B01100,
     B00000,
     B00000,
     B00000,
     B00000
};

byte procent[8] = //ikona stopni
{
     B11001,
     B11001,
     B00010,
     B00100,
     B00100,
     B01000,
     B10011,
     B10011
};

byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

unsigned long odczyt = 0;
unsigned long czas = 0;
unsigned long z = 0 ;
byte lcdx = 1;
byte strona = 1;

float temperatura ;
float wilgotnosc ;
float cisnienie ;

//Start PWM
int ledEnable = 6;// assigns cooling fan ON/OFF control to digital pin 6.

/*
* IMPORTANT:  These *must* be the pins corresponding to the Timer1 timer on
* the ATmega168/328.  These are digital pins 9 and 10 on the Uno/Duemilanove.
*/
const int kChan0Pin = 9; // Channel 0 Pin
const int kChan1Pin = 10; // Channel 1 Pin

// All times are in seconds since midnight (valid 0 - 86399)
const long kTurnOn = 32400; // time dawn begins - 0900hrs
const long kTurnOff = 75600; // time sunset begins - 2100hrs

/*
* Light "state" represents the PWM duty cycle for each channel This normally
* dictates light intensity. It is an array { duty_chan_1, duty_chan_2 }.
* Possible values for duty cycle are 0 - 1023.
*/
const int kDayState[] = { 1023,1023 }; // daytime LED state
const int kNightState[] = { 0, 0 }; // nighttime LED state

// duration (in seconds) of sunrise/sunset fade
const long kFadeDuration = 3600; // 60 minutes

long ctr;

/*
* fader -- Determine output state for a given time to provide smooth fade from
* one state to another.
*     Args:
*     start_time  -- time (in seconds) of start of fade
*     start_state -- beginning state
*     end_state   -- ending state
*     out         -- array to update with state
*/
void fader(long start_time, const int start_state[], const int end_state[], int out[2]) {

float per_second_delta_0 = (float) (end_state[0]-start_state[0])/kFadeDuration;
float per_second_delta_1 = (float) (end_state[1]-start_state[1])/kFadeDuration;

long elapsed = ctr-start_time;

out[0] = start_state[0] + per_second_delta_0 * elapsed;
out[1] = start_state[1] + per_second_delta_1 * elapsed;
}

// return seconds elapsed since midnight
long seconds_since_midnight() {
//  setTime(21, 45, 00, 16, 2, 2015);
//set the system time to 21hrs 45min 00sec 16,Feb 2015...does not set RTC, will reset upon powerup

time_t t = now();
long hr = hour(t);
long min = minute(t);
long sec = second(t);
long total = hr * 3600 + min * 60 + sec;
return total;
}

// set output state
void set_state(const int state[]) {
if (state[0] >= 0 && state[0] <= 1023) Timer1.setPwmDuty(kChan0Pin, state[0]);
if (state[1] >= 0 && state[1] <= 1023) Timer1.setPwmDuty(kChan1Pin, state[1]);
}

/*
* determine_state -- This is where the actual timing logic resides.  We
* examine ctr (seconds since midnight) and then set output state accordingly.
* Variable ctr rolls back to 0 at midnight so stages that cross midnight (ie:
* nighttime) are broken up into two stages.
*/
void determine_state() {
if ( ctr >= 0 && ctr < kTurnOn ) { // night
    set_state(kNightState);
   
//     lcd.setCursor(0,2);
    //lcd.print("                   ");
//     lcd.setCursor(5,2);
//     lcd.print("NIGHT/MODE ");        
//     digitalWrite(ledEnable,LOW);
//     lcd.setCursor(6,3);
//     lcd.print("LED-OFF");
   
} else if ( ctr >= kTurnOn && ctr <= (kTurnOn+kFadeDuration) ) { // sunrise
  int foo[2];
  fader(kTurnOn, kNightState, kDayState, foo);
  set_state(foo);
   
//     lcd.setCursor(0,2);
    //lcd.print("                   ");
//     lcd.setCursor(3,2);
//     lcd.print("SUNRISE/MODE");              
//     digitalWrite(ledEnable, HIGH);
//     lcd.setCursor(7,3);
//     lcd.print("LED-ON");
} else if ( ctr > (kTurnOn+kFadeDuration) && ctr < kTurnOff ) { // day
  set_state(kDayState);
   
//     lcd.setCursor(0,2);
    //lcd.print("                   ");
//     lcd.setCursor(5,2);            
//     lcd.print("DAY/MODE");              
//    digitalWrite(ledEnable, HIGH);
//    lcd.setCursor(7,3);
//    lcd.print("LED-ON");
} else if ( ctr >= kTurnOff && ctr <= (kTurnOff+kFadeDuration) ) { // sunset
  int foo[2];
  fader(kTurnOff, kDayState, kNightState, foo);
  set_state(foo);
//     lcd.setCursor(0,2);
    //lcd.print("                   ");
//     lcd.setCursor(5,2);
//     lcd.print("SUNSET/MODE");              
    //lcd.setCursor(11,2);
    //lcd.print("  ");
//     digitalWrite(ledEnable, HIGH);
//     lcd.setCursor(7,3);
//     lcd.print("LED-ON");
} else if ( ctr > (kTurnOff+kFadeDuration) && ctr < 86400 ) { // night
  set_state(kNightState);
//     lcd.setCursor(0,2);
    //lcd.print("                   ");
//     lcd.setCursor(5,2);
//     lcd.print("NIGHT/MODE");        
//     digitalWrite(ledEnable,LOW);
//     lcd.setCursor(6,3);
//     lcd.print("LED-OFF");
}
}

/*
* Utility function for pretty digital clock time output
*/
void printDigits(int digits) {
Serial.print(":");
if(digits < 10)
  Serial.print('0');
Serial.print(digits);

}
//void displayDigits(int digits) {
// lcd.print(":");
// if(digits < 10)
//   lcd.print('0');
// lcd.print(digits);

//}

/*
* Display time
*/
void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print("  ");
Serial.print(month());
Serial.print("/");
Serial.print(day());
Serial.print("/");
Serial.print(year());
Serial.println();
}
//void lcdClockDisplay() {
// lcd.setCursor(0,0);
// lcd.print(hour());
// displayDigits(minute());
// displayDigits(second());
// lcd.print("   ");
// lcd.print(month());
// lcd.print("/");
// lcd.print(day());
// lcd.print("/");
// lcd.print(year());
 
//}
//End PWM  
void setup(void) {

//  Serial.begin(9600);
//Start PWM
Serial.begin(115200);        // Max for Arduino Uno
setSyncProvider(RTC.get);
setSyncInterval(120);
Wire.begin();
//  lcd.begin(20,4);           // initialize the lcd for 20 chars 4 lines and turn on backlight
Timer1.initialize(6666);     // 150Hz PWM
pinMode(kChan0Pin, OUTPUT);    
Timer1.pwm(kChan0Pin, 0);
pinMode(kChan1Pin, OUTPUT);    
Timer1.pwm(kChan1Pin, 0);
//  pinMode(ledEnable,OUTPUT);   // Led control

//END PWM

lcd.begin(20, 4);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.createChar(0, temp);
lcd.createChar(1, wilg);
lcd.createChar(3, stopnie);
lcd.createChar(4, procent);

if (!bme.begin()) {while (1);}

}

void loop() {

unsigned long sek = millis()/1000 ;
if ( (millis()-czas) >= 5000 ){czas = millis();
if (strona == 2){strona = 1;}
else if(strona == 1){strona = 2;}}

//StartPWM
ctr = seconds_since_midnight(); // Original code

determine_state();              // Original code
Serial.print("ctr: ");
Serial.print(ctr);              // display counter
Serial.println();
// digitalClockDisplay();          //display time
// Serial.println();
// lcd.setCursor(0,0);            
// lcd.println();
// lcdClockDisplay();
//End PWM

if ( (millis()-odczyt) >= 2000 ){

temperatura = bme.readTemperature() ;
wilgotnosc = bme.readHumidity() ;
cisnienie = bme.readPressure()/100.0F ;

odczyt = millis();}

if ( !ds.search(addr)){ds.reset_search();return;}
if (OneWire::crc8(addr, 7) != addr[7]){return;}

switch (addr[0]) {
    case 0x10:
        type_s = 1;break;
    case 0x28:
        type_s = 0;break;
    case 0x22:
       type_s = 0;break;
    default:
 return;
}

ds.reset();
ds.select(addr);
ds.write(0x44, 1);      

present = ds.reset();
ds.select(addr);    
ds.write(0xBE);        

for ( i = 0; i < 9; i++) {data[i] = ds.read();}

int16_t raw = (data[1] << 8) | data[0];

if (type_s) {raw = raw << 3;
if (data[7] == 0x10) {raw = (raw & 0xFFF0) + 12 - data[6];}}

else {byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;}

celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;

switch (strona) {

case 1:

if (lcdx != 1){lcd.clear();lcdx = 1;} //czyszczenie ekranu 1

lcd.setCursor (0, 2);
 lcd.write(byte(0));
 lcd.print("=");
 lcd.print(temperatura, 1);
 lcd.write(byte(3));
 lcd.print("C");

 lcd.setCursor (9, 2);
 lcd.print("P=");
 lcd.print(cisnienie, 1);
 lcd.print("hPa");

 lcd.setCursor (0, 3);
 lcd.write(byte(0));
 lcd.print("=");
 lcd.print(celsius, 1);
 lcd.write(byte(3));
 lcd.print("C");

 lcd.setCursor (9, 3);
 lcd.write(byte(1));
 lcd.write("=");
 lcd.print(wilgotnosc, 1);
 lcd.print("%");

break;

case 2:

if (lcdx != 2){lcd.clear();lcdx = 2;} //czyszczenie ekranu 2

//tmElements_t tm;
//if (RTC.read(tm)) {

//  lcd.setCursor (6, 0);
//  LCDprint2digits(tm.Hour);
//  lcd.print(':');
//  LCDprint2digits(tm.Minute);
//  lcd.print(':');
//  LCDprint2digits(tm.Second);
//  lcd.setCursor (5, 1);
//  lcd.print(tm.Day);
//  lcd.print('/');
//  lcd.print(monthName[tm.Month-1]);
//  lcd.print('/');
//  lcd.print(tmYearToCalendar(tm.Year));
     
//  }

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE ");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(3,2);
   lcd.print("SUNRISE/MODE");              
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");  

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);            
   lcd.print("DAY/MODE");              
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("SUNSET/MODE");              
   lcd.setCursor(11,2);
   lcd.print("  ");
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");

//    else {if (RTC.chipPresent()) {lcd.println("DS1307 stoi. Uruchom Zegar");}
//   else {lcd.println("DS1307 blad oczczytu!");
//          lcd.println("sprawdz polaczenie");}}

break;

}}

void LCDprint2digits(int number) {
if (number >= 0 && number < 10) {lcd.write('0');}
lcd.print(number);
}
 
Odpowiedź
#24
Dzisiaj udało się wszystko połączyć już na docelowych driverach i paskach led, Program działa dobrze ale mam problem z driverem (ELN-60-12P) tzn wymaga on sygnału PWM 10V i żeby dostać taki sygnał zrobiłem prosty układ na tranzystorze, za tranzystorem dostałem zanegowany sygnał więc zmieniłem to w programie ale driver nie reguluje mocą świecenia.
Diody zapalają się po osiągnięciu na złączu PWM około 1,8V i gasną poniżej tego napięcia co może być przyczyną? Dioda podłączona do złącza PWM Arduino reaguje prawidłowo.
 
Odpowiedź
#25
Poszukam w sieci info o tym driverku to coś może wymyślę narazie w pracy siedzę Wink

schemat : zasilanie tranzystora 10-12v

[Obrazek: tranzystorek.png]


program :

Kod:
#include <TimerOne.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <OneWire.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

OneWire  ds(11);  // on pin 10 (a 4.7K resistor is necessary)
Adafruit_BME280 bme; // I2C

const char *monthName[12] = {
"01", "02", "03", "04", "05", "06",
"07", "08", "09", "10", "11", "12"
};
byte temp[8] = //ikona temperatury
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};

byte wilg[8] = //ikona wilgotnosci
{
B00100,
B00100,
B01010,
B10001,
B10001,
B10001,
B01110,
};

byte stopnie[8] = //ikona stopni
{
     B01100,
     B10010,
     B10010,
     B01100,
     B00000,
     B00000,
     B00000,
     B00000
};

byte procent[8] = //ikona stopni
{
     B11001,
     B11001,
     B00010,
     B00100,
     B00100,
     B01000,
     B10011,
     B10011
};

byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

unsigned long odczyt = 0;
unsigned long czas = 0;
unsigned long z = 0 ;
byte lcdx = 1;
byte strona = 1;

float temperatura ;
float wilgotnosc ;
float cisnienie ;

int ledEnable = 6;// assigns cooling fan ON/OFF control to digital pin 6.

const int kChan0Pin = 9; // Channel 0 Pin
const int kChan1Pin = 10; // Channel 1 Pin

// All times are in seconds since midnight (valid 0 - 86399)
const long kTurnOn = 32400; // time dawn begins - 0900hrs
const long kTurnOff = 75600; // time sunset begins - 2100hrs

const int kDayState[] = { 0,0 }; // daytime LED state
const int kNightState[] = { 255, 255 }; // nighttime LED state

const long kFadeDuration = 3600; // 60 minutes

long ctr;

void fader(long start_time, const int start_state[], const int end_state[], int out[2]) {

float per_second_delta_0 = (float) (end_state[0]-start_state[0])/kFadeDuration;
float per_second_delta_1 = (float) (end_state[1]-start_state[1])/kFadeDuration;

long elapsed = ctr-start_time;

out[0] = start_state[0] + per_second_delta_0 * elapsed;
out[1] = start_state[1] + per_second_delta_1 * elapsed;
}

long seconds_since_midnight() {

time_t t = now();
long hr = hour(t);
long min = minute(t);
long sec = second(t);
long total = hr * 3600 + min * 60 + sec;
return total;
}

void set_state(const int state[]) {
if (state[0] >= 0 && state[0] <= 255) Timer1.setPwmDuty(kChan0Pin, state[0]);
if (state[1] >= 0 && state[1] <= 255) Timer1.setPwmDuty(kChan1Pin, state[1]);
}

void determine_state() {
if ( ctr >= 0 && ctr < kTurnOn ) { // night
    set_state(kNightState);
    
} else if ( ctr >= kTurnOn && ctr <= (kTurnOn+kFadeDuration) ) { // sunrise
  int foo[2];
  fader(kTurnOn, kNightState, kDayState, foo);
  set_state(foo);
  
} else if ( ctr > (kTurnOn+kFadeDuration) && ctr < kTurnOff ) { // day
  set_state(kDayState);
  
} else if ( ctr >= kTurnOff && ctr <= (kTurnOff+kFadeDuration) ) { // sunset
  int foo[2];
  fader(kTurnOff, kDayState, kNightState, foo);
  set_state(foo);

} else if ( ctr > (kTurnOff+kFadeDuration) && ctr < 86400 ) {
  set_state(kNightState);}
}

void printDigits(int digits) {
Serial.print(":");
if(digits < 10)
  Serial.print('0');
Serial.print(digits);

}

void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print("  ");
Serial.print(month());
Serial.print("/");
Serial.print(day());
Serial.print("/");
Serial.print(year());
Serial.println();
}

void setup(void) {

Serial.begin(115200);        // Max for Arduino Uno
setSyncProvider(RTC.get);
setSyncInterval(120);
Wire.begin();

Timer1.initialize(6666);     // 150Hz PWM
pinMode(kChan0Pin, OUTPUT);    
Timer1.pwm(kChan0Pin, 255);
pinMode(kChan1Pin, OUTPUT);    
Timer1.pwm(kChan1Pin, 255);

lcd.begin(20, 4);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.createChar(0, temp);
lcd.createChar(1, wilg);
lcd.createChar(3, stopnie);
lcd.createChar(4, procent);

if (!bme.begin()) {while (1);}

}

void loop() {

unsigned long sek = millis()/1000 ;
if ( (millis()-czas) >= 5000 ){czas = millis();
if (strona == 2){strona = 1;}
else if(strona == 1){strona = 2;}}

//StartPWM
ctr = seconds_since_midnight(); // Original code

determine_state();              // Original code
Serial.print("ctr: ");
Serial.print(ctr);              // display counter
Serial.println();

if ( (millis()-odczyt) >= 2000 ){

temperatura = bme.readTemperature() ;
wilgotnosc = bme.readHumidity() ;
cisnienie = bme.readPressure()/100.0F ;

odczyt = millis();}

if ( !ds.search(addr)){ds.reset_search();return;}
if (OneWire::crc8(addr, 7) != addr[7]){return;}

switch (addr[0]) {
    case 0x10:
        type_s = 1;break;
    case 0x28:
        type_s = 0;break;
    case 0x22:
       type_s = 0;break;
    default:
return;
}

ds.reset();
ds.select(addr);
ds.write(0x44, 1);      

present = ds.reset();
ds.select(addr);    
ds.write(0xBE);        

for ( i = 0; i < 9; i++) {data[i] = ds.read();}

int16_t raw = (data[1] << 8) | data[0];

if (type_s) {raw = raw << 3;
if (data[7] == 0x10) {raw = (raw & 0xFFF0) + 12 - data[6];}}

else {byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;}

celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;

switch (strona) {

case 1:

if (lcdx != 1){lcd.clear();lcdx = 1;} //czyszczenie ekranu 1

lcd.setCursor (0, 2);
lcd.write(byte(0));
lcd.print("=");
lcd.print(temperatura, 1);
lcd.write(byte(3));
lcd.print("C");

lcd.setCursor (9, 2);
lcd.print("P=");
lcd.print(cisnienie, 1);
lcd.print("hPa");

lcd.setCursor (0, 3);
lcd.write(byte(0));
lcd.print("=");
lcd.print(celsius, 1);
lcd.write(byte(3));
lcd.print("C");

lcd.setCursor (9, 3);
lcd.write(byte(1));
lcd.write("=");
lcd.print(wilgotnosc, 1);
lcd.print("%");

break;

case 2:

if (lcdx != 2){lcd.clear();lcdx = 2;} //czyszczenie ekranu 2

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE ");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(3,2);
   lcd.print("SUNRISE/MODE");              
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");  

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);            
   lcd.print("DAY/MODE");              
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("SUNSET/MODE");              
   lcd.setCursor(11,2);
   lcd.print("  ");
   digitalWrite(ledEnable, HIGH);
   lcd.setCursor(7,3);
   lcd.print("LED-ON");

   lcd.setCursor(0,2);
   lcd.print("                   ");
   lcd.setCursor(5,2);
   lcd.print("NIGHT/MODE");        
   digitalWrite(ledEnable,LOW);
   lcd.setCursor(6,3);
   lcd.print("LED-OFF");

break;

}}

void LCDprint2digits(int number) {
if (number >= 0 && number < 10) {lcd.write('0');}
lcd.print(number);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości