Помогите со скетчем

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Puhlyaviy пишет:
SU-27-16 пишет:

Puhlyaviy пишет:
Прочитай что он птшет, потом делай выводы. он сделал надпись , потом с трудом ее удалил. Но так и не понял.

....он учится :) , спрашивает....
не всех же мордой в землю ?

Удачи тебе. Если что то труп потом в лесополосе прикопай.

нет ни лесополосы рядом ( Питер - культурный город, говорят ) , ни лопаты ( тока ардуина ).....

Radjah
Offline
Зарегистрирован: 06.08.2014
 lcd.setCursor(1, 0); //Установить 3 символ 0 строки
 lcd.print("ARDUINO-clock"); // выводим надпись завтавки ARDUINO-RTC
 lcd.setCursor(2, 1); //Установить 5 символ 1 строки
 
Или я чего не понимаю, или одно из двух. Комментарии для запутывания врагов?
 
=====
 
lcd.begin(16, 2); //Дисплей 16Х2
 
Зачем два раза, если есть lcd.clear()
 
=====
 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  Serial.begin(9600);
 
Опять с первого раза не понимает?
 
=====
 
int tempPin = 0;                // пин куда подключен датчик
 
Не делай так. Если хочешь "переименовать" пин, то делай через #define
 
=====
 
  lcd.clear();               //очистка экрана
 
Так тоже не делай в loop, лучше в setup сделай шаблон для вывода с пустыми местами под значения и переписывай только значения. Очистка и переписывание всего дисплея приведет к заметному мерцанию.
 
Ну и разберись с кашей в выводе значений

 

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

SU-27-16 пишет:

нет ни лесополосы рядом ( Питер - культурный город, говорят ) , ни лопаты ( тока ардуина ).....

Дык! ... Сделайте на ардуине копающего робота! Потом отпишетесь как прошло :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

SU-27-16 пишет:

нет ни лесополосы рядом ( Питер - культурный город, говорят ) , ни лопаты ( тока ардуина ).....

Дык! ... Сделайте на ардуине копающего робота! Потом отпишетесь как прошло :)

вам на два уровня выше надо прочитать....
....данное сообщение адресовано не вам :)-

Sergik112
Offline
Зарегистрирован: 08.07.2015

спасибо

Sergik112
Offline
Зарегистрирован: 08.07.2015

конечный код выглядит так и он рабочий

#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая контакты данных
// задаем переменные
int Count = 0;                  // счетчик обновлений
int tempPin = 0;                // пин куда подключен датчик
float tempc = 0;                // переменная для температуры
float maxi = 0, mini = 30;// max/min значения температуры
#define Trig 9
#define Echo 8
#define ledPin 13
RTC_DS1307 RTC;
void setup() {
  // красивая "загрузка" программы при старте :)
  lcd.begin(16, 2);
  lcd.print("Hello,Sergei");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(2000);               // ждем 2 секунды
  
  lcd.begin(16, 2); //Дисплей 16Х2 
 lcd.setCursor(1, 0); //Установить 3 символ 0 строки
 lcd.print("ARDUINO-clock"); // выводим надпись завтавки ARDUINO-clock
 lcd.setCursor(2, 1); //Установить 5 символ 1 строки
 lcd.print("temperature"); // выводим надпись завтавки temperature
 delay(3000); // удерживаем заставку 3 секунды
 pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  Serial.begin(9600);
    Wire.begin();
    RTC.begin();
}
  unsigned int impulseTime=0; 
unsigned int distance_sm=0;

void loop() {
  lcd.clear();               //очистка экрана
  // считываем и вычисляем температуру
  tempc = ( 4.1 * analogRead(tempPin) * 100.0) / 1024.0;
  if(tempc > maxi) {
    maxi = tempc;
  } // max температура?

  if(tempc < mini) {
    mini = tempc;
  } // min температура?
  lcd.setCursor(0, 0);
  lcd.print("Time-");
  
 lcd.setCursor(4, 1);     // устанавливаем курсор в 0-ом
  // столбце, 1 строке (начинается с 4)
  lcd.print("t=");
  lcd.print(tempc);        // выводим текущую температуру
  delay(5*500);   // задержка перед повторением измерений
  Count++;         // инкремент счетчика измерений
 digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<45) // Если расстояние менее 45 сантиметром 
  {     
     
    // Определяем время
    DateTime now = RTC.now();
    
    // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    delay(1000);
    
else 
  {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
Sergik112
Offline
Зарегистрирован: 08.07.2015
JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Это типа Вы свой диск Ц расшарили?

Sergik112
Offline
Зарегистрирован: 08.07.2015

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

Radjah
Offline
Зарегистрирован: 06.08.2014

У меня 404 почему-то :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Radjah пишет:

У меня 404 почему-то :(

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

вопросы ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Sergik112 пишет:

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

http://arduino.ru/forum/obshchii/sokhranenie-kartinok-na-forume

Sergik112
Offline
Зарегистрирован: 08.07.2015

нужно скопировать ссылку и вставить в поиск и откроется

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

крайний код нужен - чёбы не листать на много назад и чёбы понять вашу логику !

Radjah
Offline
Зарегистрирован: 06.08.2014

SU-27-16 пишет:

Radjah пишет:

У меня 404 почему-то :(

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

вопросы ?

Да, нахрена ты это написал?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

код из #56
зачем два раза инициадизировать экран ?
строки 016 и 026....
...по крохам разбираем :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Radjah пишет:

SU-27-16 пишет:

Radjah пишет:

У меня 404 почему-то :(

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

вопросы ?

Да, нахрена ты это написал?

для - "нахрена столько нахреначили ? расхреначивайте нахер !"

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Radjah пишет:

У меня 404 почему-то :(

Дохтура позови , он бысссссстр !

Radjah
Offline
Зарегистрирован: 06.08.2014

Тоньше, еще тоньше.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Radjah пишет:

Тоньше, еще тоньше.

для ТС - не смешно :(

Sergik112
Offline
Зарегистрирован: 08.07.2015

экран выглядит так 

Time-   (первая строчка)

        t=26,43    (вторая строчка)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

без кода выглядет или смешно , или непонятно....

Sergik112
Offline
Зарегистрирован: 08.07.2015

код я писал вот еще раз

#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая контакты данных
// задаем переменные
int Count = 0;                  // счетчик обновлений
int tempPin = 0;                // пин куда подключен датчик
float tempc = 0;                // переменная для температуры
float maxi = 0, mini = 30;// max/min значения температуры
#define Trig 9
#define Echo 8
#define ledPin 13
RTC_DS1307 RTC;
void setup() {
  // красивая "загрузка" программы при старте :)
  lcd.begin(16, 2);
  lcd.print("Hello,Sergei");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);               // ждем 1 секунды
 lcd.begin(16, 2); //Дисплей 16Х2 
 lcd.setCursor(1, 0); //Установить 3 символ 0 строки
 lcd.print("ARDUINO-clock"); // выводим надпись завтавки ARDUINO-clock
 lcd.setCursor(2, 1); //Установить 5 символ 1 строки
 lcd.print("temperature"); // выводим надпись завтавки temperature
 delay(2000); // удерживаем заставку 2 секунды
 pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  Serial.begin(9600);
    Wire.begin();
    RTC.begin();
}
  unsigned int impulseTime=0; 
unsigned int distance_sm=0;
 
void loop() {
  lcd.clear();               //очистка экрана
  // считываем и вычисляем температуру
  tempc = ( 4.1 * analogRead(tempPin) * 100.0) / 1024.0;
  if(tempc > maxi) {
    maxi = tempc;
  } // max температура?
 
  if(tempc < mini) {
    mini = tempc;
  } // min температура?
  lcd.setCursor(0, 0);
  lcd.print("Time-");
  
 lcd.setCursor(4, 1);     // устанавливаем курсор в 0-ом
  // столбце, 1 строке (начинается с 4)
  lcd.print("t=");
  lcd.print(tempc);        // выводим текущую температуру
  delay(5*500);   // задержка перед повторением измерений
  Count++;         // инкремент счетчика измерений
 digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<45) // Если расстояние менее 45 сантиметром 
  {     
     digitalWrite(ledPin, HIGH); // Светодиод горит
    // Определяем время
    DateTime now = RTC.now();
    
    // Выводим время в монитор порта
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    delay(1000);
    }
    else {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

без кода выглядет или смешно , или непонятно....


Уже нести лопату? :)

Radjah
Offline
Зарегистрирован: 06.08.2014

Я так понимаю, что #52 я зря писал.

Puhlyaviy

Тут бульдозер нужен :3

Sergik112
Offline
Зарегистрирован: 08.07.2015

нет не зря я подкорректировал как вы писали,удалил очистку экрана и так чуть причесал,но ума ни как не могу приложить к тому как написать строки команду которая выводит часы на экран.можете хоть со строчкой помочь.(команду как правильно прописать)

Radjah
Offline
Зарегистрирован: 06.08.2014
char dt[21] = "";
sprintf(dt, "%04d/%02d/%02d  %02d:%02d:%02d", MSK.year(),
              MSK.month(),
              MSK.day(),
              MSK.hour(),
              MSK.minute(),
              MSK.second());

Я вот так примерно делал для экрана 20x4

Получается "2015/07/10  11:23:30"

Sergik112
Offline
Зарегистрирован: 08.07.2015

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

Sergik112
Offline
Зарегистрирован: 08.07.2015

написал уже по другому все равно не выводит изображение на экран из порта

#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая контакты данных
// задаем переменные
int Count = 0;                  // счетчик обновлений
int tempPin = 0;                // пин куда подключен датчик
float tempc = 0;                // переменная для температуры
float maxi = 0, mini = 30;// max/min значения температуры
#define Trig 9
#define Echo 8
#define ledPin 13
RTC_DS1307 RTC;
void setup() {
 
  // красивая "загрузка" программы при старте :)
  lcd.begin(16, 2);
  lcd.print("Hello,Sergei");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);               // ждем 1 секунды
 lcd.begin(16, 2); //Дисплей 16Х2 
 lcd.setCursor(1, 0); //Установить 3 символ 0 строки
 lcd.print("ARDUINO-clock"); // выводим надпись завтавки ARDUINO-clock
  
 lcd.setCursor(2, 1); //Установить 5 символ 1 строки
 lcd.print("temperature"); // выводим надпись завтавки temperature
 delay(2000); // удерживаем заставку 2 секунды
 pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  Serial.begin(9600);
    Wire.begin();
    RTC.begin();
}
  unsigned int impulseTime=0; 
unsigned int distance_sm=0;
 
void loop() {
 
  lcd.clear();               //очистка экрана
  // считываем и вычисляем температуру
  tempc = ( 4.1 * analogRead(tempPin) * 100.0) / 1024.0;
  if(tempc > maxi) {
    maxi = tempc;
  } // max температура?
 
  if(tempc < mini) {
    mini = tempc;
  } // min температура?
  lcd.setCursor(0, 0);
 lcd.print("");
  DateTime now = rtc.now();
    
   // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() );
    
    
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
   
 lcd.setCursor(4, 1);     // устанавливаем курсор в 0-ом
  // столбце, 1 строке (начинается с 4)
  lcd.print("t=");
  lcd.print(tempc);        // выводим текущую температуру
  delay(5*500);   // задержка перед повторением измерений
  Count++;         // инкремент счетчика измерений
 digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<45) // Если расстояние менее 45 сантиметром 
  {     
     digitalWrite(ledPin, HIGH); // Светодиод горит
   
    
    delay(1000);
    }
    else {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Ну вот опять ты в лупе очищаешь весь дисплей и перерисовываешь его с нуля.

У тебя уже есть время в "now", зачем еще одна переменная "future"? И где у тебя используется "Count"?

Sergik112
Offline
Зарегистрирован: 08.07.2015

что такое Count?это мой первый скетч,подскажите с чего должна начинатся команда на вывод часов с lcd.print? и нужна ли команда if?и что она обозначает?у меня получилось вывести еще градусы в верхнюю строку,теже показания что на нижней,а вот с часами уже дня 4 колдую и ни как не могу их вывести в верхнюю строку

Sergik112
Offline
Зарегистрирован: 08.07.2015

т.е. мне еще нужно добавить строчки int Count = 0; #define 4 и #define5 так? часы падключены к А4 и А5 arduino и нужно еще назначать  pinMode?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Sergik112 пишет:

что такое Count?

Посмотрте внимательно свой скетч и найдите там Count... Это переменная, которая объявлена и нигде не используется. Точнее она дальше инкрементируется, но всё равно нигде не используется. Зачем она? Вы невнимательно накопипастили куски кода откуда-то.

Sergik112 пишет:

нужна ли команда if? и что она обозначает?

Оператор if нужен там, где он нужен... Вы предлагаете обучить Вас основам программирования? Нет уж, извольте сами почитать - http://arduino.ru/Reference/If

Ну и вообще изучайте всю справку по языку - http://arduino.ru/Reference

 

Sergik112
Offline
Зарегистрирован: 08.07.2015
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая контакты данных
// задаем переменные
int Count = 0;  // счетчик обновлений
int tempPin = 0;                // пин куда подключен датчик
float tempc = 0;                // переменная для температуры
float clockc = 0;
float maxi = 0, mini = 30;// max/min значения температуры
#define Trig 9
#define Echo 8
#define ledPin 13
#define Scl 5
#define Sdl 4
RTC_DS1307 RTC;
void setup() {
 
  // красивая "загрузка" программы при старте :)
  lcd.begin(16, 2);
  lcd.print("Hello,Sergei");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);               // ждем 1 секунды
 lcd.begin(16, 2); //Дисплей 16Х2 
 lcd.setCursor(1, 0); //Установить 3 символ 0 строки
 lcd.print("ARDUINO-clock"); // выводим надпись завтавки ARDUINO-clock
  
 lcd.setCursor(2, 1); //Установить 5 символ 1 строки
 lcd.print("temperature"); // выводим надпись завтавки temperature
 delay(2000); // удерживаем заставку 2 секунды
 pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  pinMode(Scl, OUTPUT); //инициируем как выход 
  pinMode(Sdl, INPUT); //инициируем как вход
  Serial.begin(9600); 
  /* задаем скорость общения. В нашем случае с компьютером */
  Serial.begin(9600);
    Wire.begin();
    RTC.begin();
}
  unsigned int impulseTime=0; 
unsigned int distance_sm=0;
 
void loop() {
 
  lcd.clear();               //очистка экрана
  // считываем и вычисляем температуру
  tempc = ( 4.1 * analogRead(tempPin) * 100.0) / 1024.0;
  if(tempc > maxi) {
    maxi = tempc;
  } // max температура?
 
  if(tempc < mini) {
    mini = tempc;
  } // min температура?
  lcd.setCursor(0, 0);
  lcd.print("Time-");
   lcd.print(clockc); 
  DateTime now = rtc.now();
    
   // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() );
    

 
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
   
 lcd.setCursor(1, 1);     // устанавливаем курсор в 0-ом
  // столбце, 1 строке (начинается с 4)
  lcd.print("Gradus-");
  lcd.print(tempc);        // выводим текущую температуру
  delay(5*500);   // задержка перед повторением измерений
  Count++;         // инкремент счетчика измерений
 digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<45) // Если расстояние менее 45 сантиметром 
  {     
     digitalWrite(ledPin, HIGH); // Светодиод горит
   
    
    delay(1000);
    }
    else {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}

Вообщем переделал теперь у меня с таким скетчем в верхней строке Time-0.00 на другой строчке Gradus-27.13

Radjah
Offline
Зарегистрирован: 06.08.2014

Так, насколько я понял, ты не понимаешь смысла #define.

Sergik112
Offline
Зарегистрирован: 08.07.2015

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

Sergik112
Offline
Зарегистрирован: 08.07.2015

Проверьте пожалуйста на ошибки мой скетч я все сделал все полностью работает у меня arduino nano,экран 16*2 температурный датчик lm35 и ультразвуковой датчик прилагаю скетч 

#include <Wire.h>
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal.h>
RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая контакты данных
// задаем переменные
int Count = 0;                  // счетчик обновлений
int tempPin = 0;                // пин куда подключен датчик
float tempc = 0;                // переменная для температуры
float maxi = 0, mini = 30;      // max/min значения температуры
#define Trig 9
#define Echo 8
#define ledPin 13

void setup() {
 
  // красивая "загрузка" программы при старте :)
  lcd.begin(16, 2);
  lcd.print("Hello,Sergei");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(1000);                // ждем 1 секунды
  lcd.print(".");
  delay(4000);               // ждем 4 секунду
  lcd.clear();               //очистка экрана
  pinMode(Trig, OUTPUT); //инициируем как выход 
  pinMode(Echo, INPUT); //инициируем как вход 
  pinMode(ledPin, OUTPUT); 
  Serial.begin(57600); 
  /* задаем скорость общения. В нашем случае с компьютером */
 Wire.begin();
  rtc.begin();
  lcd.begin(16, 2); //Дисплей 16Х2 
 lcd.setCursor(0, 0); //Установить 3 символ 0 строки

 if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");}
}
  unsigned int impulseTime=0; 
  unsigned int distance_sm=0;
  void loop() {
  lcd.clear();               //очистка экрана
  // считываем и вычисляем температуру
  tempc = ( 4.1 * analogRead(tempPin) * 100.0) / 1024.0;
  if(tempc > maxi) {
    maxi = tempc;
  } // max температура?
  if(tempc < mini) {
    mini = tempc;
  } // min температура?
  lcd.setCursor(0, 0);
  lcd.print("Time-");
  digitalClockDisplay();  
  DateTime now = rtc.now();
  lcd.setCursor(0, 1);
  lcd.print("Gradus-");
  lcd.print(tempc);  // выводим текущую температуру
  delay(5*500);   // задержка перед повторением измерений
  Count++;         // инкремент счетчика измерений
  lcd.setCursor(13, 1);
  lcd.print("C");
  digitalWrite(Trig, HIGH); 
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам 
  digitalWrite(Trig, LOW); // Отключаем 
  impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance_sm=impulseTime/58; // Пересчитываем в сантиметры 
  Serial.println(distance_sm); // Выводим на порт 
  if (distance_sm<45) // Если расстояние менее 45 сантиметром 
  {     
    digitalWrite(ledPin, HIGH); // Светодиод горит 
}
else 
  {   
    digitalWrite(ledPin, LOW); // иначе не горит 
  }   
  delay(100); 
  /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. 
   Это время называется периодом цикла (cycle period). 
   Рекомендованный период между импульсами должен быть не менее 50 мс.  */
}
void digitalClockDisplay(){
  // digital clock display of the time
  DateTime now = rtc.now();
lcd.setCursor(5, 0);
  printDigits(now.hour()); // печатает часы
//нарисовали часы и шкалу часов
  //рисуем бегающие двоеточие, привязано к секундам, вывод слева или справа двоеточие зависит от четности секунд
lcd.setCursor(7, 0);
  if (now.second()%10%2==0){
    lcd.print(": ");
  }
  else
  {
    lcd.print(" :");
  }
  //нарисовали двоеточие
 //рисуем минуты
 lcd.setCursor(9, 0); 
  printDigits(now.minute());
  //стираем бар минут если минуты=0
  if(now.minute()<1  ){
    lcd.setCursor(11,0);
    lcd.print("     ");  
  }
 //нарисовали минуты
 //рисуем бегающие двоеточие, привязано к секундам, вывод слева или справа двоеточие зависит от четности секунд
lcd.setCursor(11, 0);
  if (now.second()%10%2==0){
    lcd.print(": ");
  }
  else
  {
    lcd.print(" :");
  }
lcd.setCursor(12, 0);
  printDigits(now.second());

}
void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
if(digits < 10){
 lcd.print('0');
  }
  lcd.print(digits);
  

}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

если всё работает - зачем искать ошибки ?
1- что должен делать код ?
2 - реализация
3 - поиск ошибок и оптимизация кода
нет ?

Sergik112
Offline
Зарегистрирован: 08.07.2015

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

Radjah
Offline
Зарегистрирован: 06.08.2014

Про мерцание я уже писал.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а вы можете проанализировать свой код из #88 ? пошагово ?
что он делает ....
начну , пока чё да как ....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

1...7 - понятно
8 - для чего ? счётчик обновлений ( каких ? ) на 65535 значений ?
9 - вам уже сказали как нужнее , хотя и так правильно , НО 9 - "#define tempPin 0" экономит память
10 - 
11 - уже тревожит , что макс меньше мин ( ваше дело , зеркальный мир тоже существует )
12...18 - 
19 - 
20 - лучше явно указать куда выводить , а не по сбросу экрана !
20А - lcd.setCursor(0,0); или lcd.clear();
20...27 - красота !
...тогда уж и "П р и в е т , С е р г е й !" выводите по буквам , с задержкой на букву по 1-ой секунде , ещё красившеееееее будет :)
...оно вам нано ?
27 - красота ?
28 - зачем ?!!!!!!!!!!!!!!!!!
29...36
37 - зачем ? ( и коммент кривой ! )
38...41 - отладочное сообщение в Сериал
42 - для чего ? 
43 - для чего ?
.....добрались до ЛУПА :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ВАМ ЭТО НАДО ? 
моё дармовоё время - ограничено.....
дальше будем разбирать ?
...ой , множественное число - а я пока один :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

45 - очистили экран ( зачем это здесЯ ? )
46....47 - 
48...53 - обновили "рамки" мин и макс в зависимости от текущей температуры ( зачем ? )
54 - теперь нано !
55 - отображение статического текста
56 - уходим в подпрограмму ( в функцию ничё не возвращаемую )

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

кстати - МК делает тоже самое сказанное ПОСЛЕДОВАТЕЛЬНО , но только гораздо быстрее чем моя пишет-говорит :)

Sergik112
Offline
Зарегистрирован: 08.07.2015

спасибочки сейчас пересмотрю и подправлю как вы написали.это мой первый проэкт и я тут новичек.простите за ошибки.А подскажите еще если не затруднит,установил часы шли нормально начал все упаковывать в коробочку подключил а на экране нули и в порту нули вообщем они стоят теперь.а как я их запустил не помню.модуль tiny rtc i2c

Sergik112
Offline
Зарегистрирован: 08.07.2015

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

как вы код написали - так он и работает , и не ГЛАВНОЕ что как вам нано !

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

SU-27-16 пишет:

как код написали - так он и работает

Это такая народная примета :)