Помогите зажечь светодиод в определенное время

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Всем доброго дня, делаю какое то подобие контроллера для аквариума, сейчас оно включает в себя дисплей 1602, датчик DS18B20, часы 1307, это все работает и время показывает и температуру, теперь хочу сделать чтобы допустим с 18.00 часов до 23.00 часов загорался светодиод (в будущаем после отладки планируется подключение вместо него твердотельного реле и лампы) модскажите пожалуйста как этом можно сделать ?

Вот код: 


#include <DS1307new.h>

#include <Wire.h> // for i2c protocol

#include <OneWire.h>
// http://www.pjrc.com/teensy/td_libs_OneWire.html
// http://milesburton.com/Dallas_Temperature_Control_Library
OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)  

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // 0x20 is adresss for LCC 16x2

byte grad[8] = {
  B01110,
  B10001,
  B10001,
  B01110,
  B00000,
  B00000,
  B00000,
};

int ics =0; //count number of sensor

void setup(){
   Serial.begin(9600);  
  
  lcd.init(); 
    lcd.backlight(); //backlight is now ON
  // set up the LCD's number of columns and rows: 
  lcd.createChar(0, grad);
  lcd.begin(16, 2);
  // Print a logo message to the LCD.
  lcd.print("AQUACONTROLLER");  
  lcd.setCursor(0, 1);
  lcd.print("--------------");
  delay (2500);
  lcd.clear();
   
  // Print a message to the LCD.
//  lcd.setCursor(1, 0);
//  lcd.print("temperatura in");
//  lcd.setCursor(1, 1);
//  lcd.print("mai multe zone");
//  delay (2500);
//  lcd.clear();
}



void loop(){
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  
  
 if ( !ds.search(addr)) {
   // lcd.clear();   
   lcd.setCursor(0, 1);
//   lcd.print("doar ");
//   lcd.print(ics);
 //  lcd.print(" senzor(i)");    
   ds.reset_search();
   ics=0;
   
  /// начало кода часов///
   
 
  RTC.getTime();
  if (RTC.hour < 10)                   
  {
    Serial.println();
    Serial.print("0");
    Serial.print(RTC.hour, DEC);
  }
  else
  {
    Serial.print(RTC.hour, DEC);
  }
  Serial.print(":");
  if (RTC.minute < 10)                 
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }
  Serial.print(":");
  if (RTC.second < 10)                 
  {
    Serial.print("0");
    Serial.print(RTC.second, DEC);
  }
  else
  {
    Serial.print(RTC.second, DEC);
  }
  Serial.print(" ");
  if (RTC.day < 10)                   
  {

    Serial.print("0");

    Serial.print(RTC.day, DEC);

  }

  else

  {

    Serial.print(RTC.day, DEC);

  }

  Serial.print("-");

  if (RTC.month < 10)                  

  {

    Serial.print("0");

    Serial.print(RTC.month, DEC);

  }

  else

  {

    Serial.print(RTC.month, DEC);

  }

  Serial.print("-");

  Serial.print(RTC.year, DEC);         

  Serial.print(" ");

  switch (RTC.dow)                     

  {

    case 1:

      Serial.print("MON");
      break;
    case 2:
      Serial.print("TUE");
      break;
    case 3:
      Serial.print("WED");
      break;
    case 4:
      Serial.print("THU");
      break;
    case 5:
      Serial.print("FRI");
      break;
    case 6:
      Serial.print("SAT");
      break;
    case 7:
      Serial.print("SUN");
      break;

   
   return;
  }
  
ics++; 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }

//lcd.clear();
//lcd.setCursor(0, 1);
 // lcd.print("ROM=");
 // for( i = 0; i < 8; i++) {
  //  lcd.print(' ');
   // lcd.print(addr[i], HEX);
 // }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      lcd.print("CRC is not valid!");
      return;
  }

  celsius = (float)raw / 16.0;

  lcd.setCursor(0,0);
  lcd.print("Temp");
  lcd.print(ics);
  lcd.print(" = ");
  lcd.print(celsius);
  lcd.write(byte(0));
  lcd.print("C   ");


//вывод часов на дисплей//  
   lcd.setCursor(0, 1); 
lcd.print(RTC.hour);
lcd.print(":");
lcd.print(RTC.minute);
lcd.print(":");
lcd.print(RTC.second);
lcd.print(" ");
//lcd.print(RTC.dow);
//lcd.print(RTC.month);
//lcd.print("-");
//lcd.print(RTC.year);
  lcd.setCursor(10, 1); 
 switch (RTC.dow)                      // Friendly printout the weekday
  {
    case 1:
      lcd.print("MON");
      break;
    case 2:
      lcd.print("TUE");
      break;
    case 3:
      lcd.print("WED");
      break;
    case 4:
      lcd.print("THU");
      break;
    case 5:
      lcd.print("FRI");
      break;
    case 6:
      lcd.print("SAT");
      break;
    case 7:
      lcd.print("SUN");
      break;
  }
lcd.print("-"); 
 lcd.print(RTC.day);
 
 
  
  delay(500);
}
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
if (RTC.hour >= 10 && RTC.hour <= 23) digitalWrite(ledPin, HIGH)
else digitalWrite(ledPin, LOW);

И конструкцию

 if (RTC.minute < 10)                
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }

можно заменить равноценной:

if (RTC.minute < 10) Serial.print("0");
Serial.print(RTC.minute, DEC);
iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Tomasina пишет:

if (RTC.hour >= 10 && RTC.hour <= 23) digitalWrite(ledPin, HIGH)
else digitalWrite(ledPin, LOW);

И конструкцию

 if (RTC.minute < 10)                
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }

можно заменить равноценной:

if (RTC.minute < 10) Serial.print("0");
Serial.print(RTC.minute, DEC);

Благодарю за совет, сегодня вечером попробую и отпишусь :)

maksim
Offline
Зарегистрирован: 12.02.2012
iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Tomasina пишет:

if (RTC.hour >= 10 && RTC.hour <= 23) digitalWrite(ledPin, HIGH)
else digitalWrite(ledPin, LOW);

И конструкцию

 if (RTC.minute < 10)                
  {
    Serial.print("0");
    Serial.print(RTC.minute, DEC);
  }
  else
  {
    Serial.print(RTC.minute, DEC);
  }

можно заменить равноценной:

if (RTC.minute < 10) Serial.print("0");
Serial.print(RTC.minute, DEC);

 

Спасибо, все заработало как надо :) и скетч маленько оптимизировал по вашему совету

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Еще может быть кто подскажет почему не выводится день недели , ну тоесть MON,TUE,WED... вместо него кажет 0 и все, что на дисплее что в serial

---------------------

Все, исправил вот так все заработало

#include <DS1307new.h> // for clock
#include <Wire.h> // for i2c protocol
#include <OneWire.h> // for DS18B20
#include <LiquidCrystal_I2C.h> // for 1602
// <a href="http://www.pjrc.com/teensy/td_libs_OneWire.html" title="http://www.pjrc.com/teensy/td_libs_OneWire.html" rel="nofollow">http://www.pjrc.com/teensy/td_libs_OneWire.html</a>
// <a href="http://milesburton.com/Dallas_Temperature_Control_Library" title="http://milesburton.com/Dallas_Temperature_Control_Library" rel="nofollow">http://milesburton.com/Dallas_Temperature_Control_Library</a>
OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)  
int ledPin = 8; // pin for LED
LiquidCrystal_I2C lcd(0x20,16,2); // 0x20 is adresss for LCC 16x2

byte grad[8] = { // рисует значек градуса
  B01110,
  B10001,
  B10001,
  B01110,
  B00000,
  B00000,
  B00000,
};

int ics =0; //count number of sensor

void setup(){

  pinMode(ledPin, OUTPUT);
    
 Serial.begin(9600);  
  
  lcd.init(); 
    lcd.backlight(); //backlight is now ON
  // set up the LCD's number of columns and rows: 
  lcd.createChar(0, grad);
  lcd.begin(16, 2);
  /* Print a logo message to the LCD.
  lcd.print("AQUACONTROLLER");  
  lcd.setCursor(0, 1);
  lcd.print("by iWizard");
  delay (2500);
  lcd.clear();
   */
  // Print a message to the LCD.
//  lcd.setCursor(1, 0);
//  lcd.print("temperatura in");
//  lcd.setCursor(1, 1);
//  lcd.print("mai multe zone");
//  delay (2500);
//  lcd.clear();
}


void loop(){
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  
  
 if ( !ds.search(addr)) {
   // lcd.clear();   
   lcd.setCursor(0, 1);
//   lcd.print("doar ");
//   lcd.print(ics);
 //  lcd.print(" senzor(i)");    
   ds.reset_search();
   ics=0;
   
if (RTC.hour >= 19 && RTC.hour <= 23) digitalWrite(ledPin, HIGH); //устанавливаем время и зажигаем светодиод
 else digitalWrite(ledPin, LOW); // тушим светодиод

 
  /// начало кода часов///
   

  
  RTC.getTime();
  if (RTC.hour < 10)                   
  {
    Serial.println();
    Serial.print("0");
    Serial.print(RTC.hour, DEC);
  }
  else
  {
    Serial.print(RTC.hour, DEC);
  }
 
 Serial.print(":");

  if (RTC.minute < 10) Serial.print("0");
  Serial.print(RTC.minute, DEC);
 
Serial.print(":");
  if (RTC.second < 10) Serial.print("0");
  Serial.print(RTC.second, DEC);
 
 
Serial.print(" ");
  if (RTC.day < 10) Serial.print("0");
  Serial.print(RTC.day, DEC);
  
  
Serial.print("-");
  if (RTC.month < 10) Serial.print("0");
  Serial.print(RTC.month, DEC);  
  Serial.print("-");
  Serial.print(RTC.year, DEC);         
  Serial.print(" ");
  Serial.print("-");
  //Serial.print(RTC.dow, DEC); 
switch (RTC.dow)                     
  {
    case 0: Serial.print("SUN"); break;
    case 1: Serial.print("MON"); break;
    case 2: Serial.print("TUE"); break;
    case 3: Serial.print("WED"); break;
    case 4: Serial.print("THU"); break;
    case 5: Serial.print("FRI"); break;
    case 6: Serial.print("SAT"); break;
    return;
  }
 
ics++; 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }

//lcd.clear();
//lcd.setCursor(0, 1);
 // lcd.print("ROM=");
 // for( i = 0; i < 8; i++) {
  //  lcd.print(' ');
   // lcd.print(addr[i], HEX);
 // }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      lcd.print("CRC is not valid!");
      return;
  }

  celsius = (float)raw / 16.0;

  lcd.setCursor(0,0);
  lcd.print("Temp");
//  lcd.print(ics); //показывает номер датчика
  lcd.print(" = ");
  lcd.print(celsius);
  lcd.write(byte(0));
  lcd.print("C   ");


//вывод часов на дисплей//  
lcd.setCursor(0, 1);
 if(RTC.hour<10)lcd.print(0);
 lcd.print(RTC.hour);

lcd.print(":");
 //lcd.print( (RTC.second %2 )?" ":":"); //мигать двоеточием
 if(RTC.minute<10)lcd.print(0);
 lcd.print(RTC.minute);

lcd.print(":");
 //lcd.print( (RTC.second %2 )?" ":":"); //мигать двоеточием
 if(RTC.second<10)lcd.print(0);
 lcd.print(RTC.second);

lcd.print(" ");
//lcd.print(RTC.dow);
//lcd.print(RTC.month);
//lcd.print("-");
//lcd.print(RTC.year);
  lcd.setCursor(10, 1); 
 switch (RTC.dow)                      // Friendly printout the weekday
  {
    case 0: lcd.print("SUN"); break;
    case 1: lcd.print("MON"); break;
    case 2: lcd.print("TUE"); break;
    case 3: lcd.print("WED"); break;
    case 4: lcd.print("THU"); break;
    case 5: lcd.print("FRI"); break;
    case 6: lcd.print("SAT"); break;
   return;  
}
lcd.print("-"); 
 lcd.print(RTC.day);
  delay(500);
}
 }
 

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Tomasina пишет:

В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.

OK, подправил :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Tomasina пишет:

В операторе switch команду return применять нежелательно, а в твоем случае она вообще лишняя.

Это где такое сказано? Ссылку, пожалуйста (я про нежелательное применение return внутри switch). Ваша фантазия?

 

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Мужыки еще вопрос, есть идея подключить модуль сетевой w5100 подскажите какие пины он использует ?

maksim
Offline
Зарегистрирован: 12.02.2012

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

kisoft пишет:
Это где такое сказано?

в вышеприведенном коде какой смысл от использования return без аргументов? Только затрудняет понимание кода через пару месяцев ;)

Я ж не утверждаю, что это вообще запрещено, иногда даже уместно:

switch(age){ 
  case '13': return 1; 
  default: return 0; 
}

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В том контексте прозвучало, что не стоит применять вообще, а в твоём случае - нафиг не нужно, потому и удивило

 

 

 

ites
Offline
Зарегистрирован: 26.12.2013

Tomasina пишет:

kisoft пишет:
Это где такое сказано?

в вышеприведенном коде какой смысл от использования return без аргументов? Только затрудняет понимание кода через пару месяцев ;)

Я ж не утверждаю, что это вообще запрещено, иногда даже уместно:

switch(age){ 
  case '13': return 1; 
  default: return 0; 
}

 

return age == 13;

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Не, это будет баг какой то.

ites
Offline
Зарегистрирован: 26.12.2013

Tomasina пишет:
Не, это будет баг какой то.

Не будет.

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Всем доброго дня, пошел следующий этап разработки моего аквариумного "контроллера" :) и очередной затык, не могу вывести на страничку сервера из стандартного примера показания температуры, помогите пожалуйста кто может 

#include <DS1307new.h> // for clock
#include <Wire.h> // for i2c protocol
#include <OneWire.h> // for DS18B20
#include <LiquidCrystal_I2C.h> // for 1602
#include <SPI.h>
#include <Ethernet.h>
// <a href="http://www.pjrc.com/teensy/td_libs_OneWire.html" title="http://www.pjrc.com/teensy/td_libs_OneWire.html" rel="nofollow">http://www.pjrc.com/teensy/td_libs_OneWire.html</a>
// <a href="http://milesburton.com/Dallas_Temperature_Control_Library" title="http://milesburton.com/Dallas_Temperature_Control_Library" rel="nofollow">http://milesburton.com/Dallas_Temperature_Control_Library</a>
OneWire  ds(6);  // on pin 10 (a 4.7K resistor is necessary)  
int ledPin = 8; // pin for LED
LiquidCrystal_I2C lcd(0x20,16,2); // 0x20 is adresss for LCC 16x2
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,3,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
byte grad[8] = { // рисует значек градуса
  B01110,
  B10001,
  B10001,
  B01110,
  B00000,
  B00000,
  B00000,
};

int ics =0; //count number of sensor

void setup(){

  pinMode(ledPin, OUTPUT);
    
 Serial.begin(9600);  
  
  
  
  lcd.init(); 
    lcd.backlight(); //backlight is now ON
  // set up the LCD's number of columns and rows: 
  lcd.createChar(0, grad);
  lcd.begin(16, 2);
  /* Print a logo message to the LCD.
  lcd.print("AQUACONTROLLER");  
  lcd.setCursor(0, 1);
  lcd.print("by iWizard");
  delay (2500);
  lcd.clear();
   */
  // Print a message to the LCD.
//  lcd.setCursor(1, 0);
//  lcd.print("temperatura in");
//  lcd.setCursor(1, 1);
//  lcd.print("mai multe zone");
//  delay (2500);
//  lcd.clear();

   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());




}


void loop(){
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  
  
 if ( !ds.search(addr)) {
   // lcd.clear();   
   lcd.setCursor(0, 1);
//   lcd.print("doar ");
//   lcd.print(ics);
 //  lcd.print(" senzor(i)");    
   ds.reset_search();
   ics=0;
   
if (RTC.hour >= 19 && RTC.hour <= 23) digitalWrite(ledPin, HIGH); //устанавливаем время и зажигаем светодиод
 else digitalWrite(ledPin, LOW); // тушим светодиод

 
  /// начало кода часов///
   

  
  RTC.getTime();
  if (RTC.hour < 10)                   
  {
    Serial.println();
    Serial.print("0");
    Serial.print(RTC.hour, DEC);
  }
  else
  {
    Serial.print(RTC.hour, DEC);
  }
 
 Serial.print(":");

  if (RTC.minute < 10) Serial.print("0");
  Serial.print(RTC.minute, DEC);
 
Serial.print(":");
  if (RTC.second < 10) Serial.print("0");
  Serial.print(RTC.second, DEC);
 
 
Serial.print(" ");
  if (RTC.day < 10) Serial.print("0");
  Serial.print(RTC.day, DEC);
  
  
Serial.print("-");
  if (RTC.month < 10) Serial.print("0");
  Serial.print(RTC.month, DEC);  
  Serial.print("-");
  Serial.print(RTC.year, DEC);         
  Serial.print(" ");
  Serial.print("-");
  //Serial.print(RTC.dow, DEC); 
switch (RTC.dow)                     
  {
    case 0: Serial.print("SUN"); break;
    case 1: Serial.print("MON"); break;
    case 2: Serial.print("TUE"); break;
    case 3: Serial.print("WED"); break;
    case 4: Serial.print("THU"); break;
    case 5: Serial.print("FRI"); break;
    case 6: Serial.print("SAT"); break;
   // return;
  }
 
ics++; 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }

//lcd.clear();
//lcd.setCursor(0, 1);
 // lcd.print("ROM=");
 // for( i = 0; i < 8; i++) {
  //  lcd.print(' ');
   // lcd.print(addr[i], HEX);
 // }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      lcd.print("CRC is not valid!");
      return;
  }

  celsius = (float)raw / 16.0;

  lcd.setCursor(0,0);
  lcd.print("Temp");
//  lcd.print(ics); //показывает номер датчика
  lcd.print(" = ");
  lcd.print(celsius);
  lcd.write(byte(0));
  lcd.print("C   ");


//вывод часов на дисплей//  
lcd.setCursor(0, 1);
 if(RTC.hour<10)lcd.print(0);
 lcd.print(RTC.hour);

lcd.print(":");
 //lcd.print( (RTC.second %2 )?" ":":"); //мигать двоеточием
 if(RTC.minute<10)lcd.print(0);
 lcd.print(RTC.minute);

//lcd.print(":");
 //lcd.print( (RTC.second %2 )?" ":":"); //мигать двоеточием
 //if(RTC.second<10)lcd.print(0);
 //lcd.print(RTC.second);

//lcd.print(" ");
//lcd.print(RTC.dow);
//lcd.print(RTC.month);
//lcd.print("-");
//lcd.print(RTC.year);
  lcd.setCursor(10, 1); 
 switch (RTC.dow)                      // Friendly printout the weekday
  {
    case 0: lcd.print("SUN"); break;
    case 1: lcd.print("MON"); break;
    case 2: lcd.print("TUE"); break;
    case 3: lcd.print("WED"); break;
    case 4: lcd.print("THU"); break;
    case 5: lcd.print("FRI"); break;
    case 6: lcd.print("SAT"); break;
 //  return;  
}
lcd.print("-"); 
 lcd.print(RTC.day);
 
 // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
	  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");   
      
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
 //   delay(1);
    // close t1he connection:
    
delay(1);
  client.stop();
    Serial.println("client disonnected");
}
}
}

 

iwizard7
iwizard7 аватар
Offline
Зарегистрирован: 30.04.2013

Отвечу сам себе - победил я этот сервер, думаю стоит продолжить тему в форуме Проекты, а именно тут http://arduino.ru/forum/proekty/akvariumnyi-kontroller