Библиотека RTC

flat
Offline
Зарегистрирован: 05.02.2015
// чтение даты и времени в виде цифр
// time.gettime()   без параметра
//   результат читается из переменных:
// time.seconds  секунды     0-59
// time.minutes  минуты      0-59
// time.hours    часы        1-12
// time.Hours    часы        0-23
// time.midday   полдень     0-1 (0-am, 1-pm)
// time.day      день месяца 1-31
// time.weekday  день недели 0-6 (1-понедельник, 6-суббота, 0-воскресенье)
// time.month    месяц       1-12
// time.year     год         0-99
 
из примера.... именно то что мне надо но не получается занать в переменную... 
Time t;
t=time.gettime()  
 
ругается на 1 строку... типа тайм не тип
flat
Offline
Зарегистрирован: 05.02.2015

или как привести из String в Int... стандартное int() тоже не срабатывает .. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А теперь, делаем следующее:

1. Выкладываем скетч как положено. Причём не что-то там закомментиированное, а нормальный, полный скетч на который собственно и ругается компилятор.

2. Приводим точную копипасту сообщения компилятора, а не "типа не тип".

3. только после этого ждём помощи, потому что заставлять желающего тебе помочь самому догадываться что там и как контрпродуктивно.

flat
Offline
Зарегистрирован: 05.02.2015

хорошо но скетч огромный... 

//wr-d6=269om

int pinIRQRX = 13;// Порт информации о приеме
int pinIRQTX = 12;// Порт к приему готов
int tem = 0; // переменная временных значений
int tem1 = 0; // переменная временных значений
String temptek;// текущая температура
int svet, vent, tens, sushka;
int maxtemp = 100;
int maxtemptek = 100;
int maxvlag = 10;
int maxvlagtek = 60;
String tempvar; // переменная для связи с другой ардуино
int tmptime = 0; //Время для связи
//int flag = 0;

//SD CARD
//SD_SS=CS=10 SD_DI=MOSI=11 SD_DO=MISO=12 SD_SCK=CLK=13
#include <SD.h>
#include <SPI.h>
#define SD_CS  53 //пин картридера
File myFile;
uint8_t G = 0x0000; // данные чтения с карты
uint8_t B = 0x0000; // данные чтения с карты

//clock
#include <RTC.h>
RTC rtc;
String temptime;
int sek, mins, hours;

// ЛСД Экран
#include <Adafruit_GFX.h>// работа с экраном
#include <gfxfont.h>// фонт для вывода
#include <MCUFRIEND_kbv.h> // драйвер экрана
#include <TouchScreen.h>
#define LCD_RD   A0 //для LCD
#define LCD_WR   A1 //и для LCD и для сенсора    
#define LCD_RS   A2 //и для LCD и для сенсора         
#define LCD_CS   A3 //для LCD
#define YM 7   // для сенсора
#define XP 6   // для сенсора
MCUFRIEND_kbv tft;
TouchScreen ts = TouchScreen(XP, LCD_RS, LCD_WR, YM, 269);// TouchScreen ts = TouchScreen(XP, YP, XM, YM, 269);
short TS_MINX = 20;
short TS_MINY = 20;
short TS_MAXX = 920;
short TS_MAXY = 940;
int Y, X, X1, Y1;
uint16_t temvar = 0x0000; // убрать со временем

#define BLACK           0x0000
#define BLUE            0x001A
#define RED             0xFBEF
#define GREEN           0x07E0
#define CYAN            0x33FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

void setup(void) {
  rtc.begin(RTC_DS1302, 49, 47, 48); // на базе чипа DS1302, вывод RST, вывод CLK, вывод DAT
  rtc.settime(0, 17, 15, 1, 10, 15, 4);	// 0  сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(1);
  tft.fillScreen(CYAN);
  SD.begin(SD_CS); // включаем картриер
  X = 260;
  Y = 180;
  myFile = SD.open("nastr.bmp", FILE_READ); //рисуем кнопку настройки
  knopki();
  Y = 120;
  myFile = SD.open("ventoff.bmp", FILE_READ); //рисуем кнопку вентиляция
  knopki();
  Y = 60;
  myFile = SD.open("svetoff.bmp", FILE_READ); //рисуем кнопку свет
  knopki();
  Y = 0;
  myFile = SD.open("clockoff.bmp", FILE_READ); //рисуем кнопку часы
  knopki();
  X = 0;
  Y = 180;
  myFile = SD.open("rezerv.bmp", FILE_READ); //рисуем кнопку rezerv
  knopki();
  Y = 120;
  myFile = SD.open("sushoff.bmp", FILE_READ); //рисуем кнопку сушка
  knopki();
  Y = 60;
  myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку нагрев
  knopki();
  Y = 0;
  myFile = SD.open("temp.bmp", FILE_READ); //рисуем кнопку часы
  knopki();
  tem = 3;
  risuem(); // Текст главной
  pinMode(pinIRQTX, OUTPUT); //порт сигнала передачи
  pinMode(pinIRQRX, INPUT); // Сигнал о передаче
  Serial.begin(9600);
}

void loop(void) {

  timeobr();


  sensor();
  if ((X < 60) && (Y < 60) && (X != 0) && (Y != 0)) { // Нажатие кнопки температура
    tempsetup();
  }
  if ((X < 320) && (Y < 119) && (X > 260) && (Y > 60)) { // Нажатие кнопки СВЕТ
    if (!svet) {
      SD.begin(SD_CS); // включаем картриер
      X = 260;
      Y = 60;
      myFile = SD.open("sveton.bmp", FILE_READ); //рисуем кнопку свет
      knopki();
    }
    else {
      SD.begin(SD_CS); // включаем картриер
      X = 260;
      Y = 60;
      myFile = SD.open("svetoff.bmp", FILE_READ); //рисуем кнопку свет
      knopki();
    }
    svet = (svet != 1);
  }

  if ((X < 320) && (Y < 179) && (X > 260) && (Y > 120)) { // Нажатие кнопки вентиляция
    if (!vent) {
      SD.begin(SD_CS);
      X = 260;
      Y = 120;
      myFile = SD.open("venton.bmp", FILE_READ); //рисуем кнопку вентиляция
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 260;
      Y = 120;
      myFile = SD.open("ventoff.bmp", FILE_READ); //рисуем кнопку вентиляция
      knopki();
    }
    vent = (vent != 1);
  }

  if ((X < 60) && (Y < 120) && (X > 0) && (Y > 60)) { // Нажатие кнопки тены
    if (!tens) {
      SD.begin(SD_CS);
      X = 0;
      Y = 60;
      myFile = SD.open("nagron.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 0;
      Y = 60;
      myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    tens = (tens != 1);
  }

  if ((X < 60) && (Y < 180) && (X > 0) && (Y > 120)) { // Нажатие кнопки тены
    if (!sushka) {
      SD.begin(SD_CS);
      X = 0;
      Y = 120;
      myFile = SD.open("sushon.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 0;
      Y = 120;
      myFile = SD.open("sushoff.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    sushka = (sushka != 1);
  }
}

void sensor(void) // опрос сенсора экрана
{
  TSPoint tem = ts.getPoint();
  X = 0;
  Y = 0;
  pinMode(LCD_WR, OUTPUT);
  pinMode(LCD_RS, OUTPUT);
  if (tem.z > 0)
  {
    Y = (map(tem.x, TS_MINX, TS_MAXX, tft.height(), 0));
    X = (map(tem.y, TS_MINY, TS_MAXY, tft.width(), 0));
    X = X - 14;
    Y = Y - 14;
    if (X < 0) {
      X = 0;
    }
    if (Y < 0) {
      Y = 0;
    }
    X = X * 1.172;
    Y = Y * 1.23;
    if (X > 320) {
      X = 320;
    }
    if (Y > 240) {
      Y = 240;
    }
    //tft.drawFastHLine(X,Y,2,RED);
  }
}

void svaz() { //связь с UNO
  tem = 0;
  X = 0;
  Y = 0;
  tem = digitalRead(pinIRQRX); // проверка порта сигналзации о связи с мастером
  delay(1000);
  if (tem == 1) {
    Serial.begin(9600);
    tempvar = " ";
    tmptime = millis();
    digitalWrite(pinIRQTX, HIGH);
    while (!Serial.available() and (millis() - tmptime < 2000)) //пока нет данных для приема стоим на месте 2 секунды и выходим
      delay(20);
    delay(200);//ожидаем получения всего сообщения
    while (Serial.available()) //пока не конец сообщения, читаем данные и формируем строку
      tempvar = tempvar + (char)(Serial.read());
    Serial.end();//закрываем сериал соединение
    digitalWrite(pinIRQTX, LOW);
    tft.setCursor(200, 50);
    tft.setTextColor(CYAN);
    tft.print(temptek);
    if (tempvar != " ")
    {
      temptek = tempvar;
    }
    tft.setTextColor(BLACK);
    tft.setCursor(200, 50);
    tft.print(temptek);
    tem = 0;
  }
}

void tempsetup() { // установка температуры
  tft.fillRect(60, 0, 200, 240, CYAN); //стираем экран
  tft.fillRoundRect(70, 30, 50, 50, 6, RED); //рисуем экран
  tft.fillRoundRect(200, 30, 50, 50, 6, RED);
  tft.fillRoundRect(70, 120, 50, 50, 6, YELLOW);
  tft.fillRoundRect(200, 120, 50, 50, 6, YELLOW);
  tft.fillRoundRect(70, 180, 180, 60, 6, MAGENTA);
  tft.setTextSize(3);
  tft.setCursor(63, 0);
  tft.setTextColor(BLACK);
  tft.print(utf8rus("Температура"));
  tft.setCursor(80, 90);
  tft.print(utf8rus("Влажность"));
  tft.setCursor(80, 200);
  tft.print(utf8rus("Сохранить"));
  tft.setTextSize(4);
  tft.setCursor(125, 40);
  tft.print(maxtemp);
  tft.setCursor(138, 130);
  tft.print(maxvlag);
  tft.setTextSize(5);
  tft.setCursor(82, 37);
  tft.print(utf8rus("-"));
  tft.setCursor(82, 127);
  tft.print(utf8rus("-"));
  tft.setCursor(212, 37);
  tft.print(utf8rus("+"));
  tft.setCursor(212, 127);
  tft.print(utf8rus("+"));
  maxtemptek = maxtemp;
  maxvlagtek = maxvlag;
  tft.setTextSize(4);
  for (tem1 = 0; tem1 <= 3; tem1++)
  {
    sensor();
    if ((X > 70) && (Y > 30) && (X < 130) && (Y < 80)) { // Нажатие кнопки температура -
      tft.setTextColor(CYAN);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
      maxtemptek = maxtemptek - 5 * (maxtemptek != 40);
      tft.setTextColor(BLACK);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
    }
    if ((X > 200) && (Y > 30) && (X < 250) && (Y < 80)) { // Нажатие кнопки температура +
      tft.setTextColor(CYAN);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
      maxtemptek = maxtemptek + 5 * (maxtemptek != 110);
      tft.setTextColor(BLACK);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
    }
    if ((X > 70) && (Y > 120) && (X < 120) && (Y < 170)) { // Нажатие кнопки влажность -
      tft.setTextColor(CYAN);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
      maxvlagtek = maxvlagtek - 5 * (maxvlagtek != 0);
      tft.setTextColor(BLACK);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
    }
    if ((X > 200) && (Y > 120) && (X < 250) && (Y < 170)) { // Нажатие кнопки влажность +
      tft.setTextColor(CYAN);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
      maxvlagtek = maxvlagtek + 5 * (maxvlagtek != 60);
      tft.setTextColor(BLACK);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
    }

    if ((X > 70) && (Y > 180) && (X < 250) && (Y < 240)) { // Нажатие кнопки Сохранить
      tft.fillRect(60, 0, 200, 240, CYAN); //стираем экран
      maxtemp = maxtemptek; //сохраняем температуру
      maxvlag = maxvlagtek; //сохраняем влажность
      tem = 3; //рисуем главный экран
      temvar = BLACK;
      risuem();
      tem1 = 4; // заканчиваем цикл
    }

    tem1 = tem1 - 1;
    delay(50);
  }
}

void risuem() { // Процедура вывода главного меню
  tft.setTextSize(3);
  tft.setCursor(63, 0);
  tft.setTextColor(BLACK);
  tft.print(utf8rus("Температура"));
  tft.setTextSize(2);
  tft.setCursor(60, 70);
  tft.print(utf8rus("Текущая Максимум"));
  tft.setCursor(180, 30);
  tft.setTextSize(4);
  tft.print(maxtemp);
}

void timeobr()
{
  if (millis() % 1000 == 0) { // если прошла 1 секунда
    temptime = rtc.gettime("s");
    sek = int(temptime);
    delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
    
    tft.setTextColor(BLACK);
    tft.setCursor(63, 200);


  }
}

void knopki() { //функция чтения с карты и вывода на экран
  for (tem1 = 0; tem1 <= 53; tem1++)
  {
    B = myFile.read();
  }
  for (tem1 = 0; tem1 <= 11; tem1++)
  {
    B = myFile.read();
  }
  for (Y1 = 60; Y1 > 0; Y1--)
  {
    for (X1 = 60; X1 > 0; X1--)
    {
      B = myFile.read();
      G = myFile.read();
      tft.drawPixel(60 - X1 + X, Y1 + Y - 1, G * 256 + B);
    }
  }
  myFile.close();
}

String utf8rus(String source) //печать русских шрифтов
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;

    if (n >= 0xBF) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

вариант с приведением string to int

ответ 

slave.ino: In function 'void timeobr()':
slave.ino:352:23: error: invalid cast from type 'String' to type 'int'
Ошибка компиляции.
 
flat
Offline
Зарегистрирован: 05.02.2015

вариант с чтением параметров в переменную... 



//wr-d6=269om

int pinIRQRX = 13;// Порт информации о приеме
int pinIRQTX = 12;// Порт к приему готов
int tem = 0; // переменная временных значений
int tem1 = 0; // переменная временных значений
String temptek;// текущая температура
int svet, vent, tens, sushka;
int maxtemp = 100;
int maxtemptek = 100;
int maxvlag = 10;
int maxvlagtek = 60;
String tempvar; // переменная для связи с другой ардуино
int tmptime = 0; //Время для связи
//int flag = 0;

//SD CARD
//SD_SS=CS=10 SD_DI=MOSI=11 SD_DO=MISO=12 SD_SCK=CLK=13
#include <SD.h>
#include <SPI.h>
#define SD_CS  53 //пин картридера
File myFile;
uint8_t G = 0x0000; // данные чтения с карты
uint8_t B = 0x0000; // данные чтения с карты

//clock
#include <RTC.h>
RTC rtc;
Time t;
String temptime;
int sek, mins, hours;

// ЛСД Экран
#include <Adafruit_GFX.h>// работа с экраном
#include <gfxfont.h>// фонт для вывода
#include <MCUFRIEND_kbv.h> // драйвер экрана
#include <TouchScreen.h>
#define LCD_RD   A0 //для LCD
#define LCD_WR   A1 //и для LCD и для сенсора    
#define LCD_RS   A2 //и для LCD и для сенсора         
#define LCD_CS   A3 //для LCD
#define YM 7   // для сенсора
#define XP 6   // для сенсора
MCUFRIEND_kbv tft;
TouchScreen ts = TouchScreen(XP, LCD_RS, LCD_WR, YM, 269);// TouchScreen ts = TouchScreen(XP, YP, XM, YM, 269);
short TS_MINX = 20;
short TS_MINY = 20;
short TS_MAXX = 920;
short TS_MAXY = 940;
int Y, X, X1, Y1;
uint16_t temvar = 0x0000; // убрать со временем

#define BLACK           0x0000
#define BLUE            0x001A
#define RED             0xFBEF
#define GREEN           0x07E0
#define CYAN            0x33FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

void setup(void) {
  rtc.begin(RTC_DS1302, 49, 47, 48); // на базе чипа DS1302, вывод RST, вывод CLK, вывод DAT
  rtc.settime(0, 17, 15, 1, 10, 15, 4);	// 0  сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(1);
  tft.fillScreen(CYAN);
  SD.begin(SD_CS); // включаем картриер
  X = 260;
  Y = 180;
  myFile = SD.open("nastr.bmp", FILE_READ); //рисуем кнопку настройки
  knopki();
  Y = 120;
  myFile = SD.open("ventoff.bmp", FILE_READ); //рисуем кнопку вентиляция
  knopki();
  Y = 60;
  myFile = SD.open("svetoff.bmp", FILE_READ); //рисуем кнопку свет
  knopki();
  Y = 0;
  myFile = SD.open("clockoff.bmp", FILE_READ); //рисуем кнопку часы
  knopki();
  X = 0;
  Y = 180;
  myFile = SD.open("rezerv.bmp", FILE_READ); //рисуем кнопку rezerv
  knopki();
  Y = 120;
  myFile = SD.open("sushoff.bmp", FILE_READ); //рисуем кнопку сушка
  knopki();
  Y = 60;
  myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку нагрев
  knopki();
  Y = 0;
  myFile = SD.open("temp.bmp", FILE_READ); //рисуем кнопку часы
  knopki();
  tem = 3;
  risuem(); // Текст главной
  pinMode(pinIRQTX, OUTPUT); //порт сигнала передачи
  pinMode(pinIRQRX, INPUT); // Сигнал о передаче
  Serial.begin(9600);
}

void loop(void) {

  timeobr();


  sensor();
  if ((X < 60) && (Y < 60) && (X != 0) && (Y != 0)) { // Нажатие кнопки температура
    tempsetup();
  }
  if ((X < 320) && (Y < 119) && (X > 260) && (Y > 60)) { // Нажатие кнопки СВЕТ
    if (!svet) {
      SD.begin(SD_CS); // включаем картриер
      X = 260;
      Y = 60;
      myFile = SD.open("sveton.bmp", FILE_READ); //рисуем кнопку свет
      knopki();
    }
    else {
      SD.begin(SD_CS); // включаем картриер
      X = 260;
      Y = 60;
      myFile = SD.open("svetoff.bmp", FILE_READ); //рисуем кнопку свет
      knopki();
    }
    svet = (svet != 1);
  }

  if ((X < 320) && (Y < 179) && (X > 260) && (Y > 120)) { // Нажатие кнопки вентиляция
    if (!vent) {
      SD.begin(SD_CS);
      X = 260;
      Y = 120;
      myFile = SD.open("venton.bmp", FILE_READ); //рисуем кнопку вентиляция
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 260;
      Y = 120;
      myFile = SD.open("ventoff.bmp", FILE_READ); //рисуем кнопку вентиляция
      knopki();
    }
    vent = (vent != 1);
  }

  if ((X < 60) && (Y < 120) && (X > 0) && (Y > 60)) { // Нажатие кнопки тены
    if (!tens) {
      SD.begin(SD_CS);
      X = 0;
      Y = 60;
      myFile = SD.open("nagron.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 0;
      Y = 60;
      myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    tens = (tens != 1);
  }

  if ((X < 60) && (Y < 180) && (X > 0) && (Y > 120)) { // Нажатие кнопки тены
    if (!sushka) {
      SD.begin(SD_CS);
      X = 0;
      Y = 120;
      myFile = SD.open("sushon.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    else {
      SD.begin(SD_CS);
      X = 0;
      Y = 120;
      myFile = SD.open("sushoff.bmp", FILE_READ); //рисуем кнопку тены
      knopki();
    }
    sushka = (sushka != 1);
  }
}

void sensor(void) // опрос сенсора экрана
{
  TSPoint tem = ts.getPoint();
  X = 0;
  Y = 0;
  pinMode(LCD_WR, OUTPUT);
  pinMode(LCD_RS, OUTPUT);
  if (tem.z > 0)
  {
    Y = (map(tem.x, TS_MINX, TS_MAXX, tft.height(), 0));
    X = (map(tem.y, TS_MINY, TS_MAXY, tft.width(), 0));
    X = X - 14;
    Y = Y - 14;
    if (X < 0) {
      X = 0;
    }
    if (Y < 0) {
      Y = 0;
    }
    X = X * 1.172;
    Y = Y * 1.23;
    if (X > 320) {
      X = 320;
    }
    if (Y > 240) {
      Y = 240;
    }
    //tft.drawFastHLine(X,Y,2,RED);
  }
}

void svaz() { //связь с UNO
  tem = 0;
  X = 0;
  Y = 0;
  tem = digitalRead(pinIRQRX); // проверка порта сигналзации о связи с мастером
  delay(1000);
  if (tem == 1) {
    Serial.begin(9600);
    tempvar = " ";
    tmptime = millis();
    digitalWrite(pinIRQTX, HIGH);
    while (!Serial.available() and (millis() - tmptime < 2000)) //пока нет данных для приема стоим на месте 2 секунды и выходим
      delay(20);
    delay(200);//ожидаем получения всего сообщения
    while (Serial.available()) //пока не конец сообщения, читаем данные и формируем строку
      tempvar = tempvar + (char)(Serial.read());
    Serial.end();//закрываем сериал соединение
    digitalWrite(pinIRQTX, LOW);
    tft.setCursor(200, 50);
    tft.setTextColor(CYAN);
    tft.print(temptek);
    if (tempvar != " ")
    {
      temptek = tempvar;
    }
    tft.setTextColor(BLACK);
    tft.setCursor(200, 50);
    tft.print(temptek);
    tem = 0;
  }
}

void tempsetup() { // установка температуры
  tft.fillRect(60, 0, 200, 240, CYAN); //стираем экран
  tft.fillRoundRect(70, 30, 50, 50, 6, RED); //рисуем экран
  tft.fillRoundRect(200, 30, 50, 50, 6, RED);
  tft.fillRoundRect(70, 120, 50, 50, 6, YELLOW);
  tft.fillRoundRect(200, 120, 50, 50, 6, YELLOW);
  tft.fillRoundRect(70, 180, 180, 60, 6, MAGENTA);
  tft.setTextSize(3);
  tft.setCursor(63, 0);
  tft.setTextColor(BLACK);
  tft.print(utf8rus("Температура"));
  tft.setCursor(80, 90);
  tft.print(utf8rus("Влажность"));
  tft.setCursor(80, 200);
  tft.print(utf8rus("Сохранить"));
  tft.setTextSize(4);
  tft.setCursor(125, 40);
  tft.print(maxtemp);
  tft.setCursor(138, 130);
  tft.print(maxvlag);
  tft.setTextSize(5);
  tft.setCursor(82, 37);
  tft.print(utf8rus("-"));
  tft.setCursor(82, 127);
  tft.print(utf8rus("-"));
  tft.setCursor(212, 37);
  tft.print(utf8rus("+"));
  tft.setCursor(212, 127);
  tft.print(utf8rus("+"));
  maxtemptek = maxtemp;
  maxvlagtek = maxvlag;
  tft.setTextSize(4);
  for (tem1 = 0; tem1 <= 3; tem1++)
  {
    sensor();
    if ((X > 70) && (Y > 30) && (X < 130) && (Y < 80)) { // Нажатие кнопки температура -
      tft.setTextColor(CYAN);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
      maxtemptek = maxtemptek - 5 * (maxtemptek != 40);
      tft.setTextColor(BLACK);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
    }
    if ((X > 200) && (Y > 30) && (X < 250) && (Y < 80)) { // Нажатие кнопки температура +
      tft.setTextColor(CYAN);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
      maxtemptek = maxtemptek + 5 * (maxtemptek != 110);
      tft.setTextColor(BLACK);
      tft.setCursor(125, 40);
      tft.print(maxtemptek);
    }
    if ((X > 70) && (Y > 120) && (X < 120) && (Y < 170)) { // Нажатие кнопки влажность -
      tft.setTextColor(CYAN);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
      maxvlagtek = maxvlagtek - 5 * (maxvlagtek != 0);
      tft.setTextColor(BLACK);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
    }
    if ((X > 200) && (Y > 120) && (X < 250) && (Y < 170)) { // Нажатие кнопки влажность +
      tft.setTextColor(CYAN);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
      maxvlagtek = maxvlagtek + 5 * (maxvlagtek != 60);
      tft.setTextColor(BLACK);
      tft.setCursor(138, 130);
      tft.print(maxvlagtek);
    }

    if ((X > 70) && (Y > 180) && (X < 250) && (Y < 240)) { // Нажатие кнопки Сохранить
      tft.fillRect(60, 0, 200, 240, CYAN); //стираем экран
      maxtemp = maxtemptek; //сохраняем температуру
      maxvlag = maxvlagtek; //сохраняем влажность
      tem = 3; //рисуем главный экран
      temvar = BLACK;
      risuem();
      tem1 = 4; // заканчиваем цикл
    }

    tem1 = tem1 - 1;
    delay(50);
  }
}

void risuem() { // Процедура вывода главного меню
  tft.setTextSize(3);
  tft.setCursor(63, 0);
  tft.setTextColor(BLACK);
  tft.print(utf8rus("Температура"));
  tft.setTextSize(2);
  tft.setCursor(60, 70);
  tft.print(utf8rus("Текущая Максимум"));
  tft.setCursor(180, 30);
  tft.setTextSize(4);
  tft.print(maxtemp);
}

void timeobr()
{
  if (millis() % 1000 == 0) { // если прошла 1 секунда
    t = rtc.gettime("s");
    //sek = int(temptime);
    delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
    
    tft.setTextColor(BLACK);
    tft.setCursor(63, 200);


  }
}

void knopki() { //функция чтения с карты и вывода на экран
  for (tem1 = 0; tem1 <= 53; tem1++)
  {
    B = myFile.read();
  }
  for (tem1 = 0; tem1 <= 11; tem1++)
  {
    B = myFile.read();
  }
  for (Y1 = 60; Y1 > 0; Y1--)
  {
    for (X1 = 60; X1 > 0; X1--)
    {
      B = myFile.read();
      G = myFile.read();
      tft.drawPixel(60 - X1 + X, Y1 + Y - 1, G * 256 + B);
    }
  }
  myFile.close();
}

String utf8rus(String source) //печать русских шрифтов
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;

    if (n >= 0xBF) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

ответ 

 
slave.ino:29:1: error: 'Time' does not name a type
slave.ino: In function 'void timeobr()':
slave.ino:352:5: error: 't' was not declared in this scope
Ошибка компиляции.
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

flat пишет:

slave.ino: In function 'void timeobr()':

slave.ino:352:23: error: invalid cast from type 'String' to type 'int'
Ошибка компиляции.
 

Другой разговор. Вы пытаетесь получить целое число из содержимого String, но прямое преобразование там не определено (с чего Вы взяли, что так должно работать). Для преобразования в классе String есть специальный метод, который это отлично делает. Т.е. в строке 352, вместо нынешнего

sek = int(temptime);

надо написать

sek = temptime.toInt();

и всего делов.

Другое дело, что Вы эту переменную sek потом нигде и никак не используете, так зачем ей что-то присваивать? Но, это меня не касается, впрочем :)

flat пишет:

slave.ino:29:1: error: 'Time' does not name a type
slave.ino: In function 'void timeobr()':
slave.ino:352:5: error: 't' was not declared in this scope
 
Здесь тоже нет ничего необычного. Тип Time у Вас не определён. Не подключена нужная библиотека или ещё что, но такого типа у Вас нет.  Ну, а второе сообщени о том, что переменная t не определена и это понятно - Вы же её пытались объявить с несуществующем типом.

 

flat
Offline
Зарегистрирован: 05.02.2015

спасибо щас проверю... обработчики вермени еще не написаны... нужны числовые данные о секундах минутах и тп ... буду делать так.. хотя второй вариант удобнее конечно .. 

flat
Offline
Зарегистрирован: 05.02.2015

ЕвгенийП пишет:

Здесь тоже нет ничего необычного. Тип Time у Вас не определён. Не подключена нужная библиотека или ещё что, но такого типа у Вас нет.  Ну, а второе сообщени о том, что переменная t не определена и это понятно - Вы же её пытались объявить с несуществующем типом.

эт я так и понял ... но создавая переменную типа int  к примеру .... впихать все туда не получается... вот и какой тип выбрать чтобы считать все данные сразу

// time.seconds  секунды     0-59
// time.minutes  минуты      0-59
// time.hours    часы        1-12
// time.Hours    часы        0-23
// time.midday   полдень     0-1 (0-am, 1-pm)
// time.day      день месяца 1-31
// time.weekday  день недели 0-6 (1-понедельник, 6-суббота, 0-воскресенье)
// time.month    месяц       1-12
// time.year     год         0-99
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

flat пишет:

и какой тип выбрать чтобы считать все данные сразу

Я не знаю, какой Вы библиотекой RTC.h пользуетесь. Если вот этой, то там есть тип RTCTime, посмотрите с 27 строки

struct RTCTime
{
  uint8_t second;
  uint8_t minute;
  uint8_t hour;
  uint8_t day;
  uint8_t month;
  uint8_t year;
  uint8_t dayOfWeek;
};

Вот им и пользуйтесь. Если у Вас другая библиотека, то опять же откройте её .h файл и посмотрите, там по идее должен быть како-нибудь тип для этого.

flat
Offline
Зарегистрирован: 05.02.2015

ЕвгенийП пишет:

Другой разговор. Вы пытаетесь получить целое число из содержимого String, но прямое преобразование там не определено (с чего Вы взяли, что так должно работать). Для преобразования в классе String есть специальный метод, который это отлично делает. Т.е. в строке 352, вместо нынешнего

из книжки проекты с использованием арудино ....

5.4.4.3. int()
int() приводит значение к типу int.
Синтаксис:

 

int(x);

а где то мона глянуть полный список комманд на ру сайте?.... на arduino.cc я нашел вашу предложенную команду... но каждую так выискивать сложновато 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

flat пишет:

из книжки проекты с использованием арудино ....

Вы пытаетесь мне что-то доказать? Не надо - доказывайте компьютеру.

flat пишет:

5.4.4.3. int()

int() приводит значение к типу int.
Синтаксис:

int(x);

А там не написано какие именно значения оно приводит? К классам это никакого отношения не имеет, а String - класс.

flat пишет:

а где то мона глянуть полный список комманд на ру сайте?.... на arduino.cc я нашел вашу предложенную команду... но каждую так выискивать сложновато 

Это (преобразование типов и т.п.) не имеет никакого отношения к ардуино. Идите на любой сайт, посвящённый языку С++ и смотрите. Сайтов чуть больше, чем  100500. Например,  http://ru.cppreference.com/w/

 

flat
Offline
Зарегистрирован: 05.02.2015

ни в коем случае не пытаюсь доказать ... просто ответил на вопрос почему я думал что это должно работать ... 

в книжке и написано преобразование типов... но команда не работает ... как я догадываюсь зависит от версии языка чтоли... 

ваша команда заработала ... вот и хочу найти где все увидеть ... ибо любую команду можно обойти самому... но это длинно и через жопу... 

 

ни в коес случае не хотел обидеть ... ваша помощь неоценима.... ибо щас скетч работает на вашем примере ...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

flat пишет:

в книжке и написано преобразование типов... но команда не работает ... как я догадываюсь зависит от версии языка чтоли... 

Да, нет же ж! Причём тут версия языка? String это класс, а для них нет умолчательных преобразований. Хотите, чтобы класс во что-то преобразовывался - надо писать преобразователь ручками. По умолчанию классы никуда и никак не преобразуются.