Мои проекты на Ардуино

Контроллеры, драйверы, датчики, управляющие устройства.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

vladimir74 писал(а):подключить библиотеку math.h не вариант?
#include <math.h>
Компиляция прошла без ошибок далее что делать?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
vladimir74
Почётный участник
Почётный участник
Сообщения: 544
Зарегистрирован: 25 май 2011, 14:14
Репутация: 19
Откуда: Магнитогорск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение vladimir74 »

покажи полностью листинг
пока предполагаю что
s=(lrint(s*10))/10;
lcd.print(s);
скорее всего должно ругаться на типы, но проверь.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

vladimir74 писал(а):покажи полностью листинг
(для просмотра содержимого нажмите на ссылку)
// описание языка http://arduino.ru/Reference

#include <LiquidCrystal.h> /* Подключаем библиотеку для работы с LCD */
#include <math.h>

//режимы
float Fr_min=23.33; // переменная ферментация мин.
float Fr_max=23.33; // переменная ферментация макс.
float Ps_min=23.33; // переменная пастеризация мин.
float Ps_max=23.33; // переменная пастеризация макс.
int Fr_min1;
char s[150];
int Pos_min=30; // переменная выдача данных на принтер

//unsigned long time;



LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//static FILE lcdout = {0} ; // LCD FILE structure

void setup()
{
lcd.begin(16, 2); /* Инициализируем дисплей: 2 строки по 16 символов */

lcd.setCursor(5, 1); //позиция курсора (столбец, строка)
lcd.print("DS18B20 "); // выводим приветсвие
delay(5000); // пауза 3 сек
lcd.clear(); // очищаем
}

//--------------------------------------------------------------------------------------------------------------------------------------------------
// ОСНОВНАЯ ПРОГРАММА
//--------------------------------------------------------------------------------------------------------------------------------------------------
void loop(void) // основной цикл
{
lcd.clear(); // очищаем
lcd.setCursor(0, 0);
//sprintf(s,"Fr%d-%d Ps%d-%d\0", Fr_min,Fr_max,Ps_min,Ps_max); // работает
//sprintf(s," %2.2f- %2.2f %2.2f- %2.2f", Fr_min,Fr_max,Ps_min,Ps_max); //
//sprintf(s,"x%10.2fx", Fr_min);

//работает
//Fr_min1 = (int)(Fr_min*10); // умножаем на 10 и преобразуем float в int
//sprintf(s, "%3d.%-01d", Fr_min1/10, Fr_min1%10); // перевод значения в строку, отдельно целую часть и дробную.
//lcd.print(s);


s=(lrint(s*10))/10;
lcd.print(s);


//sprintf(s, "Fr_min %3d.%-01d", Fr_min/10, Fr_min%10); // перевод значения в строку, отдельно целую часть и дробную.
//lcd.print(s);
//lcd.print(millis()/1000);



//lcd.setCursor(0, 1);
//sprintf(s,"Print %d min\0", Pos_min);
//lcd.print(s);


//lcd.print(tab(23.55,1)); //124
delay(1000); // пауза 3 сек
}

//*************************************************************************************************************************************************
float tab(float data,int n)
{
float ret;
long buf;
long k=1;

while(n--) k*=10;

buf=data*=k;

if((data-buf)>0.5) buf++;

ret=buf;

return ret/k;
}
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
vladimir74
Почётный участник
Почётный участник
Сообщения: 544
Зарегистрирован: 25 май 2011, 14:14
Репутация: 19
Откуда: Магнитогорск
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение vladimir74 »

long Fr_min = 23.33;
Fr_min = (long)(Fr_min*10); //умножаем на 10
Fr_min = lrint(Fr_min1); //преобразуем к целому
Fr_min = Fr_min/10;//делим на десять и должны получить 1 число после запятой
string Fr_min = Fr_min.ToString(); //преобразуем в строку
lcd.print(Fr_min); //выводим на экран

Скажи на что компилятор будет ругаться.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Така задача - нужно секунды перевести в формат d h m s
Ардуино насчитало сколько времени прошло с запуска например прошло 277780сек вот их нужно перевести в удобный формат примерно такой 3d 23h 59m 01s
Как можно сделать функцию чтоб ей передали сек, а она вернуло готовую строку :thinking:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Rafiq »

Ну это ручками, последовательным целочисленным делением и взятием остатка.

Код: Выделить всё

void timeint(char[] buffer, unsigned long sec)
{
  int days, hours, mins;
  days = sec / 86400;
  sec %= 86400;
  hours = sec / 3600;
  sec %= 3600;
  mins = sec / 60;
  sec %= 60;
  sprintf(buffer, %iD %iH %iM %iS", days, hours, mins, (int)sec);
  return;
}
Разумеется, буфер должен иметь достаточный размер.
Последний раз редактировалось Rafiq 08 ноя 2012, 22:55, всего редактировалось 2 раза.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Спасибо!

Тоже нашел что нужно:

Код: Выделить всё

//--------------------------------------------------------------------------------------------------------------------------------------------------
//           КОНВЕРТАЦИЯ СЕК в ЧЧ:ММ:СС
//--------------------------------------------------------------------------------------------------------------------------------------------------
char * TimeToHHMMSS(unsigned long t)
  {
      static char str[12];
      long h = t / 3600;
      t = t % 3600;
      int m = t / 60;
      int s = t % 60;
      //sprintf(str, "%04ld:%02d:%02d", h, m, s);
      sprintf(str, "%03ld:%02d:%02d", h, m, s);
      return str;
  }
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Rafiq »

Те же яйца, что и мой код, только в профиль. И без дней.
Но согласен, более правильным будет давать тип unsigned long для аргумента в секундах, поскольку просто int явно не хватит. И int() оказалось лишним, надо убрать. Свой код я подправил.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Nick »

В некоторых языках есть функция date, которая форматирует дату из стандартной юниксовской даты в нужный формат. А дата в юнихах определяется количествомсекун прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг);
http://ru.wikipedia.org/wiki/Date

Хотя, ваши способы лучше, это я так просто для общей информации написал :)
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Rafiq »

Вполне возможно, что в avr-libc реализована функция strftime(), но дело в том, что она, как и date(), работает с датой, а нам нужен интервал.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Nick »

ну так делаем date(a-b, "%e дней %H:%M%S")... до 30 дней сработает :). Я же говорил, ваши способы лучше.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Nick писал(а):В некоторых языках есть функция date,
Ардуино к некоторым не относится :lol:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Impartial »

А чего STM32 забросил?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Impartial писал(а):А чего STM32 забросил?
решил с простого начать. STM32 там много чего не понятного для меня
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Serg »

Походу решил на кошечках потренироваться. :hehehe:

P.S. Для ардуины наверняка сделали модуль на DS1302 или DS1307 - это удобные часики реального времени с возможностью подключения резервной батарейки.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Impartial »

Мозги набекрень будут от их новаций.
Брось ты эту затею. Ты делаешь все то же, что делал бы с СТМ. Только извращенно как то, даже в самых простых вещах.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Impartial писал(а):Мозги набекрень будут от их новаций.
Мне нужно термодатчики приделать. С примерами DS18b20 для СТМ32 не разобрался.

Следующая засада как в ардуино вывести строку в порт? POS принтеру нужно послать команду установить жирный шрифт, а потом напечатать текст и отключить жирность.
Вот кусок мануала.
Принтер.JPG (2748 просмотров) <a class='original' href='./download/file.php?id=9150&sid=6d26f0b236a1fabe113ebc24a468636a&mode=view' target=_blank>Загрузить оригинал (39.78 КБ)</a>
Разные примеры с инета перепробовал нифига не выходит :thinking:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Nick »

Что именно ты пробовал? Скинь свой код.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение Serg »

Наверно вот так:
serial.print("\x1bE1Напечатанный текст\x1bE0\n");
Только на счёт 0 и 1 не уверен, надо в документации смотреть.

Если С почти настоящий, то и вот так должно работать:
serial.print("\eE1Напечатанный текст\eE0\n");
Последний раз редактировалось Serg 09 ноя 2012, 01:42, всего редактировалось 1 раз.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: Мои проекты на Ардуино

Сообщение aftaev »

Разное

Код: Выделить всё

Serial.println("Proba");
  //Serial.print("\ESC\B\1", DEC);
  
  //Serial.print(byte(27)); // символ ESC
  //delay(100);
  //Serial.print(byte(66)) ; // символ B
  //delay(100);
  //Serial.print(byte(49)) ; // цифра 0
  
    Serial.print(65, HEX); // выводит "А"; 
    Serial.print("\t");     
  Serial.println("Proba");
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Ответить

Вернуться в «Электроника»