#2 Re: Програмування Arduino » Помогите с вопросом, хочу совместить таймер с лабораторным блоком пит. » 2015-04-22 14:48:28

Добрый день!
Значит свою распайку контактов на плате оставляю? Они подойдут и к экрану с 20, 4 ?
Только в Скетче нужно будет поменять вот эти строки:
lcd.begin(20, 4); // устанавливаем размер (количество столбцов и строк) экрана.   
lcd.clear(); //
lcd.print("Loading...");

хорошо.
Сегодня вечером на Новую почту приходит экран 20,4 .
Выводы думаю по распайке экрана должны быть идентичны? От 1 ..... 16.
Да ещё Второй вопрос, на какие выводу будет оптимально повесить(подключить) Real Time Clock Модуль с батарейкой (DS1307) и Датчик влажности и температуры DHT11.?
Готовлю печатную плату для ATmega328 чип с загрузчиком Arduino UNO и сразу к нему сделаю выводы под индикатор 20,4.
А сама плата Клон Arduino Uno Rev3 будет у меня как донором для прошивки.

#3 Re: Програмування Arduino » Помогите с вопросом, хочу совместить таймер с лабораторным блоком пит. » 2015-04-21 15:46:12

Или вот :
// LM75 + DS1307
// Код из видео http://youtu.be/ZJ123KbrXmY
// 

#include <Wire.h>
#include <LiquidCrystal.h>

#define DS1307_I2C_ADDRESS 0x68
#define LM75_I2C_ADDRESS 0b1001000 //  1001 A0 A1 A2

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte gradus[8] = {
  0b00110,
  0b01001,
  0b01001,
  0b00110,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));   
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{

  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}
 
///// температура ..
float getTempLM75(){
    float val;

    Wire.beginTransmission(LM75_I2C_ADDRESS);
    Wire.write(0x00);
    Wire.endTransmission();

    Wire.requestFrom(LM75_I2C_ADDRESS, 2);     
    while(Wire.available() < 2);   
    byte msb = Wire.read();   
    byte lsb = Wire.read();

    if (msb < 0x80) val=((msb*10)+(((lsb&0x80)>>7)*5));
    else{
       val=((msb*10)+(((lsb&0x80)>>7)*5));
       val=-(2555.0-val);
    }
    return val/10;
}

void setup()
{
  Wire.begin();
  lcd.createChar(1, gradus);
  lcd.begin(16, 2);
  lcd.clear();

/*  // установка часов
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  second = 30;
  minute = 0;
  hour = 14;
  dayOfWeek = 3; // день недели
  dayOfMonth = 1; // день
  month = 4;
  year = 14;

  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
*/
}

void loop()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  char week[8][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
 
//   lcd.clear();
    lcd.setCursor(1, 0);
     if (hour < 10) lcd.print("0");
    lcd.print(hour);
    lcd.print(":");
     if (minute < 10) lcd.print("0");
    lcd.print(minute);
//  lcd.print(":");
//   if (second < 10) lcd.print("0");
//  lcd.print(second);
    lcd.setCursor(8, 0);
    lcd.print(week[dayOfMonth]);
    lcd.print("    "); 
    lcd.setCursor(0, 1);
     if (dayOfMonth < 10) lcd.print("0");
    lcd.print(dayOfMonth);
    lcd.print("/");
     if (month < 10) lcd.print("0");
    lcd.print(month);
    lcd.print("/");
     if (year < 10) lcd.print("0");
    lcd.print(year);
    lcd.print("  ");
    lcd.print(int(getTempLM75()));
    lcd.write(1);
    lcd.print("C");
}

////// конец

#4 Re: Програмування Arduino » Помогите с вопросом, хочу совместить таймер с лабораторным блоком пит. » 2015-04-21 15:41:00

Привет!
Я не против. Но в электрике без проблем подключу. Но в Скетч внести изменения , даже не знаю куда добавить вверх или в низ своего Скетча?
// Arduino LCD ЖК дисплей 2004 204 20X4 Character Display Blue Blacklight
#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal.
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // контакты на Arduino = lcd: - (2=RS, 3=E, 4=D4, 5=D5, 6=D6, 7=D7)
// PIN lcd-(V0)подсветка дисплея. Подключаем к GND/Земля, через резистор 2.2 килоом.
void setup()
{   
  lcd.begin(20, 4); // устанавливаем размер (количество столбцов и строк) экрана.   
  lcd.print("Hello world! 11111"); // печатаем первую строку.
  // устанавливаем курсор в колонку 0, строку 1.
  lcd.setCursor(0, 1); // на самом деле это строка №2, т.к. нумерация начинается с 0.
  lcd.print("Dmitry OSIPOV 22222"); // печатаем 2 строку.   
  lcd.setCursor(0, 2); // устанавливаем курсор в колонку 0, строку 2.(строка №3 ).
  lcd.print("youtube.com 333333"); // печатаем 3 строку.
}
void loop() {
  lcd.setCursor(0, 3); // устанавливаем курсор в колонку 0, строку 3.(строка №4 ).
  lcd.print("Arduino test "); // печатаем 4 строку.
  lcd.print(millis()/1000); // печатаем 4 строку.
  delay(1000);
}

Это по второму дисплею.

#5 Re: Програмування Arduino » Помогите с вопросом, хочу совместить таймер с лабораторным блоком пит. » 2015-04-21 06:23:50

Автору на Ютубе писал ранее о предложении внести неплохие дополнения. Так как вроде не плохо работает блок питания на Ардуино.
Так как уже заказал LCD 20x4 с подсветкой . В наличии уже есть Барометр (датчик атмосферного давления) BMP180 , Датчик влажности и температуры DHT11, Датчик температуры DS18B20 , Real Time Clock Модуль с батарейкой (DS1307).
Некоторые уже компоненты в наличии. Уже готовлю в Sprint Layout 6.0 печатную плату для своего рабочего блока питания .
Но есть одна проблема у меня я не силён в программировании Ардуино. Но думаю кто поможет реализовать мою идею , за мной не заржавеет.
спс

#7 Програмування Arduino » Помогите с вопросом, хочу совместить таймер с лабораторным блоком пит. » 2015-04-20 10:41:42

topsik432
відповідей: 9

Добрый день !
Дайте совет. Возможно ли внести изменения в Скетч который будет прилагаться в этом письме.
Есть у меня интересная задумка по поводу внесения изменения + доработка в этот Лабораторный БП на Arduino_1.1.
Хочу добавить в него таймер на отсчёт времени зарядки аккумуляторов (примерно 10ч) + установить датчик температуры.
Посоветуйте как это реализовать в прошивке (Скетче) ?
Не охота ещё лепить второй ARDUINO UNO + второй индикатор.
Думаю заместо LCD 16x2 с подсветкой установить LCD 20x4 с подсветкой .
И в третью и четвёртую строки индикации внести : дату , время , температуру. - типа такого.
Возможно ли такое реализовать в жизнь?
Или что Вы сможете посоветовать?
спс

Підвал форуму