flprog tvout

Использование буззеров, динамиков, микрофонов, МР3 плееров и прочих модулей для звука и музыки и видео, а так-же пользовательских блоков к ним.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#61

Сообщение pan » 17.12.2017{, 00:32}

мешать и не надо, а помочь бы не мешало.
вы про какие подсказки?

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

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

void TVout::print_str(uint8_t x, uint8_t y, char *str)
в общем она один фиг посимвольно выводит.
поэтому надо будет стринг со входа блока по буковке скармливать через for

по крайней мере на сколько я понял
Последний раз редактировалось pan 17.12.2017{, 00:35}, всего редактировалось 1 раз.

Аватара пользователя
Dev1
Майор
Сообщения: 1015
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 58
Откуда: Гондурас

flprog tvout

#62

Сообщение Dev1 » 17.12.2017{, 00:48}

 

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

TV.print_str ( 10, 10,   "temperature"   );
Должно быть на экране - temperature... Там не просто так "string"...
Win7-64 FLProg v7.2.2 Portable :fie:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#63

Сообщение pan » 17.12.2017{, 00:51}

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

Аватара пользователя
Dev1
Майор
Сообщения: 1015
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 58
Откуда: Гондурас

flprog tvout

#64

Сообщение Dev1 » 17.12.2017{, 03:35}

А вы сразу int не пробовали выводить? Библиотека ведь почти все хавает...

Добавлено (17.12.2017, 03:35)
---------------------------------------------
Skaynet писал(а):TV.print_char(10,10, _text[3] );
По сути что такое string, это массив char. В этой строке вы вывели 4 символ из массива. В библиотеке имеется подсказка, в каком формате все содержится, принимается и выводится.   Осталось только правильно обозначить массив char, ну или воспользоваться напрямую другими формами вывода...
Последний раз редактировалось Dev1 17.12.2017{, 03:37}, всего редактировалось 1 раз.
Win7-64 FLProg v7.2.2 Portable :fie:

Аватара пользователя
Anydy
Администратор
Сообщения: 3272
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 278
Имя: Андрей

flprog tvout

#65

Сообщение Anydy » 17.12.2017{, 10:17}

Попробуйте так:

String test ="Primer";

TV.print_str ( 10, 10,  (char*) test.c_str()   );

Skaynet
Рядовой
Сообщения: 44
Зарегистрирован: 15.12.2017{, 19:36}
Репутация: 0

flprog tvout

#66

Сообщение Skaynet » 17.12.2017{, 11:02}

Anydy, сработало

Добавлено (17.12.2017, 11:02)
---------------------------------------------
#include <fontALL.h>

#include <OneWire.h>
#include <TVout.h>

byte _d18x2x1Addr[8]={0x28, 0xEE, 0xB9, 0x72, 0x1B, 0x16, 0x2, 0x46};

OneWire  _ow10(10);

TVout TV;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
void setup()
{
TV.start_render( _NTSC );
}
void loop()
{

//Плата:1
if(_isTimer(_d18x2x1Tti, 1000)) {
_d18x2x1Tti = millis(); 
_d18x2x1O=  _readDS18_ow10(_d18x2x1Addr, 0);}
String test = ( _floatToStringWitRaz((_d18x2x1O),2));
TV.print_str ( 10, 10,  (char*) test.c_str()   );

}
String  _floatToStringWitRaz(float value, int raz)
{
 
  return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
float _convertDS18x2xData(byte type_s, byte data[12])
{
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) 
  {
  raw = raw << 3; 
  if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
  }
else 
  {
   byte cfg = (data[4] & 0x60);
   if (cfg == 0x00) raw = raw & ~7;   else if (cfg == 0x20) raw = raw & ~3;  else if (cfg == 0x40) raw = raw & ~1;
  }
return  (float)raw / 16.0;
}
float _readDS18_ow10(byte addr[8], byte type_s)
{  byte data[12];
byte i;
_ow10.reset();
_ow10.select(addr);
_ow10.write(0xBE);
for ( i = 0; i < 9; i++) {
 data = _ow10.read();}
_ow10.reset();
_ow10.select(addr);
_ow10.write(0x44, 1);
return _convertDS18x2xData(type_s, data);}

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#67

Сообщение pan » 17.12.2017{, 11:30}

Anydy, можно для особо одаренных поподробнее об
(char*) test.c_str().  вдруг еще где пригодится.
вчера натыкался на такие примеры, но так и не понял как их правильно применить
Последний раз редактировалось pan 17.12.2017{, 11:30}, всего редактировалось 1 раз.

Аватара пользователя
Anydy
Администратор
Сообщения: 3272
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 278
Имя: Андрей

flprog tvout

#68

Сообщение Anydy » 17.12.2017{, 12:27}

pan, Нашли у кого спрашивать....

как я понимаю если библиотеке нужен Char а у вас строка то таким образом подсовываем String

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#69

Сообщение pan » 17.12.2017{, 12:43}

на простом языке что бы понять, что этот код делает со строкой ?. пока вчера рылся и читал, ни фига не понял)

так может и удобнее, а я хотел подсовывать строковый массив посимвольно, потому что функция
print_str один хрен так и делает (если я правильно понял). вот из из библиотеки:



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

void TVout::print_str(uint8_t x, uint8_t y, char *str) {
   if (y >= display.vres)
      return;
   for (char i=0; str[i]!=0; i++) {
      if (x > (display.hres*8+font))
         return;
      print_char(x,y,str[i]);
      x += font;
   }
}
Последний раз редактировалось pan 17.12.2017{, 16:44}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

flprog tvout

#70

Сообщение rw6cm » 17.12.2017{, 14:48}

Skaynet,
Win10-64, FLProg (portable)

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

flprog tvout

#71

Сообщение AVGN » 17.12.2017{, 20:03}

rw6cm, компилируется после добавления библиотеки TVout.h в первый блок, надо добавить.
Иначе не компилируется из FLPROG.
В железе не проверил. Сегодня нет под рукой.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

flprog tvout

#72

Сообщение rw6cm » 18.12.2017{, 05:51}

AVGN писал(а):компилируется после добавления библиотеки TVout.h в первый блок, надо добавить.
Если библиотека лежит в нужном месте, в папке с названием TVout, - не чего не надо добавлять.

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

Библиотека.
Вложения
TVout.rar
(20.5 КБ) 62 скачивания
Последний раз редактировалось rw6cm 18.12.2017{, 06:06}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

flprog tvout

#73

Сообщение AVGN » 18.12.2017{, 07:03}

rw6cm, автолюбителям эта тема нравится.
rw6cm писал(а):Если библиотека лежит в нужном месте, в папке с названием TVout, - не чего не надо добавлять.
А если нет библиотеки, то и не сработает.
Я так понимаю, что если библиотека добавлена в блок, то она автоматом появится в ideV2, когда компилируем проект
-нет?
Последний раз редактировалось AVGN 18.12.2017{, 07:06}, всего редактировалось 1 раз.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
rw6cm
Полковник
Сообщения: 2132
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 278
Имя: Владимир

flprog tvout

#74

Сообщение rw6cm » 18.12.2017{, 07:56}

AVGN писал(а):Я так понимаю, что если библиотека добавлена в блок, то она автоматом появится в ideV2, когда компилируем проект
Да. Вот только куда, в зависимости настроек.
У меня все доп. библиотеки (которых нет в стандартной иде) в отдельной папке.
И приоритет на на эту папку (если две библиотеки, возьмет с моей)
Последнее время не привязываю библиотеки к блокам.
Во первых тяжелые привязанные библиотеки сильно тормозят FLProg.
Во вторых утяжеляют блоки и проект в целом.
В третьих меньше с ними путаницы (для меня).

Посмотрел код предложенный Anydy, по идеи должен быть легче в этих блоках.
Подкорректировал блоки.
С библиотеками надо разобраться. Сильно много их в нэте.
Предложенная по ссылке ТС конфликтит с I2C, и думаю много еще с чем.
Последний раз редактировалось rw6cm 18.12.2017{, 08:37}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

flprog tvout

#75

Сообщение AVGN » 18.12.2017{, 16:49}

rw6cm писал(а):С библиотеками надо разобраться. Сильно много их в нэте.
я так понял наиболее активно обсуждаемая вот эта
Там автор даже audio привинтил в версии бибилиотеки TVout_w_audio.zip. Видимо можно пиликать если подавать на тюльпан вход audio телика.

Есть еще много проектов часов с выводом на телиик -используют библиотеку arduino-tvout-master.zip
К этой прилагаются шрифты TVoutfonts

Добавлено (18.12.2017, 16:49)
---------------------------------------------
rw6cm писал(а):Посмотрел код предложенный Anydy, по идеи должен быть легче в этих блоках.Подкорректировал блоки.
Да действительно полегче
Ваш первый проект 
"Скетч использует 9288 байт (28%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 155 байт (7%) динамической памяти, оставляя 1893 байт для локальных переменных. Максимум: 2048 байт."

Вот с новыми блоками
"Скетч использует 9180 байт (28%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 125 байт (6%) динамической памяти, оставляя 1923 байт для локальных переменных. Максимум: 2048 байт.
"
Последний раз редактировалось AVGN 18.12.2017{, 09:46}, всего редактировалось 1 раз.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Skaynet
Рядовой
Сообщения: 44
Зарегистрирован: 15.12.2017{, 19:36}
Репутация: 0

flprog tvout

#76

Сообщение Skaynet » 22.12.2017{, 22:46}

Помогите переделать под TVOUT

Нужен вывод картинки с SD карты на тв

СпойлерПоказать
/*
Отображение на TFT-экране BMP-логотипа

Этот пример считывает с SD-карты файл-картинку, а затем рисует ее
в случайном месте экрана.

В этом скетче с карты micro-SD считывается логотип Arduino.
Это файл с расширением «.bmp», который идет в комплекте с этим скетчем:
- Откройте папку со скетчами (Ctrl-K или Cmd-K)
- Скопируйте файл «arduino.bmp» на карту micro-SD
- Воткните ее в SD-слот TFT-экрана

Этот код не защищен авторским правом.

Создан 19 апреля 2013 Энрико Гуэли (Enrico Gueli).

http://www.arduino.cc/en/Tutorial/TFTBitmapLogo
*/

// Подключаем необходимые библиотеки:
#include <SPI.h>
#include <SD.h>
#include <TFT.h> // библиотека TFT-экрана Arduino

// Определяем контакты для Arduino Uno:
#define sd_cs 4
#define lcd_cs 10
#define dc 9
#define rst 8

// Определяем контакты для Arduino Leonardo (чтобы использовать, раскомментируйте):
//#define sd_cs 8
//#define lcd_cs 7
//#define dc 0
//#define rst 1

TFT TFTscreen = TFT(lcd_cs, dc, rst);

// Эта переменная будет хранить картинку, которую скетч будет рисовать на экране:
PImage logo;

void setup() {
// Инициализируем TFT-экран и показываем сообщение,
// где просим пользователя открыть Serial Monitor:
TFTscreen.begin();
TFTscreen.background(255, 255, 255);

TFTscreen.stroke(0, 0, 255);
TFTscreen.println();
TFTscreen.println(F("Arduino TFT Bitmap Example")); // "Показ BMP-картинки на TFT-экране Arduino"
TFTscreen.stroke(0, 0, 0);
TFTscreen.println(F("Open serial monitor")); // "Чтобы запустить скетч,"
TFTscreen.println(F("to run the sketch")); // "откройте Serial Monitor"

// Инициализируем последовательный порт.
// Он будет использоваться для показа диагностической информации.
Serial.begin(9600);
while (!Serial) {
// ждем, когда последовательная линия будет готова к работе:
}

// Перед тем, как начать, очищаем TFT-экран:
TFTscreen.background(255, 255, 255);

// Пробуем получить доступ к SD-карте. Если не удалось
// (например, если карта не воткнута в слот), останавливаем процесс:
Serial.print(F("Initializing SD card...")); // "Инициализация SD-карты..."
if (!SD.begin(sd_cs)) {
Serial.println(F("failed!")); // "Ошибка!"
return;
}
Serial.println(F("OK!")); // "ОК!"

// Инициализируем TFT-экран и очищаем его:
TFTscreen.begin();
TFTscreen.background(255, 255, 255);

// Теперь, когда мы имеем доступ к SD-карте, пытаемся загрузить файл с картинкой:
logo = TFTscreen.loadImage("arduino.bmp");
if (!logo.isValid()) {
Serial.println(F("error while loading arduino.bmp")); // "Ошибка в загрузке файла arduino.bmp"
}
}

void loop() {
// Пока картинка не загрузится нормально, ничего не делаем:
if (logo.isValid() == false) {
return;
}

Serial.println(F("drawing image")); // "Рисуем картинку..."

// Генерируем случайные координаты, где будем рисовать картинку.
// Чтобы картинка не нарисовалась за пределами экрана,
// вычитаем ее размеры из размеров экрана:
int x = random(TFTscreen.width() - logo.width());
int y = random(TFTscreen.height() - logo.height());

// Рисуем картинку на экране:
TFTscreen.image(logo, x, y);

// Перед тем, как рисовать еще раз, немного ждем:
delay(1500);
}
Добавлено (22.12.2017, 12:58)
---------------------------------------------
СпойлерПоказать
КодЧтобы использовать экран, нам надо подключить библиотеки SPI и TFT, а чтобы иметь возможность считывать с SD-карты – библиотеку SD.[*]#include <SD.h>
[*]#include <SPI.h>
[*]#include <TFT.h>
Определяем контакты, которые будем использовать для управления TFT-экраном, а также CS-контакт (контакт Chip Select) для управления SD-картой. Создаем экземпляр класса TFT и называем его TFTscreen.[*]#define sd_cs  4
[*]#define lcd_cs 10
[*]#define dc     9
[*]#define rst    8  
[*] 
[*]TFT TFTscreen = TFT(cs, dc, rst);
Для хранения графической информации есть специальный тип данных – PImage. Создаем на его основе переменную под названием logo.[*]PImage logo;
В секции setup() инициализируем последовательный порт и ждем его активации перед тем, как запустить скетч. Если статусная информация, передаваемая через последовательный порт, вам будет не нужна, просто закомментируйте цикл while().Запустив последовательную коммуникацию, инициализируем библиотеку SD. В случае ошибки сообщаем об этом на Serial Monitor.[*]void setup() {
[*]  Serial.begin(9600);
[*]  while (!Serial) {
[*]  }
[*] 
[*]  Serial.print("Initializing SD card...");
[*]  if (!SD.begin(SD_CS)) {
[*]    Serial.println("failed!");
[*]    return;
[*]  }
[*]  Serial.println("OK!");
Инициализируем экран и очищаем его.[*]TFTscreen.begin();
[*]  TFTscreen.background(255, 255, 255);
При помощи функции loadimage() считываем файл-картинку в переменную logo. В случае ошибки сообщаем об этом на Serial Monitor.[*]logo = TFTscreen.loadImage("logo.bmp");
[*]  if (!logo.isValid()) {
[*]    Serial.println("error while loading arduino.bmp");
[*]  }
[*]}
В случае ошибки при загрузке картинки останавливаем скетч, пока он не начал работать дальше.[*]void loop() {
[*]  if (logo.isValid() == false) {
[*]    return;
[*]  }
Если картинка загрузилась нормально, выбираем на экране случайное место, где мы ее покажем. Чтобы картинка не вылезала за пределы экрана, вычитаем ее размеры из размеров экрана.[*]int x = random(TFTscreen.width() - logo.width());
[*]  int y = random(TFTscreen.height() - logo.height());
Беря за основу эти случайные координаты, рисуем картинку. Перед тем, как перейти к следующему циклу, немного ждем.[*]TFTscreen.image(logo, x, y);
[*] 
[*]  delay(1500);
[*]}
Добавлено (22.12.2017, 22:46)
---------------------------------------------
Anydy, помоги с выводом картинки с SD карты
Последний раз редактировалось Skaynet 22.12.2017{, 12:57}, всего редактировалось 1 раз.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#77

Сообщение pan » 22.12.2017{, 22:52}

я так понимаю его нужно не просто в блок запихать, но и скрестить с блоком TVout?

Skaynet
Рядовой
Сообщения: 44
Зарегистрирован: 15.12.2017{, 19:36}
Репутация: 0

flprog tvout

#78

Сообщение Skaynet » 22.12.2017{, 22:59}

pan, да правильно !!!!
я уже три дня перебираю код и ни на шаг не сдвинулся 
Вроде все просто .... но я не могу постичь
Копаю дальше

здесь собака зарыта
[*] Serial.print("Initializing SD card...");

[*]  if (!SD.begin(SD_CS)) {

[*]    Serial.println("failed!");

[*]    return;

[*]  }

[*]  Serial.println("OK!");
Инициализируем экран и очищаем его.
[*]TFTscreen.begin();

[*]  TFTscreen.background(255, 255, 255);
При помощи функции loadimage() считываем файл-картинку в переменную logo. В случае ошибки сообщаем об этом на Serial Monitor.
[*]logo = TFTscreen.loadImage("logo.bmp");

[*]  if (!logo.isValid()) {

[*]    Serial.println("error while loading arduino.bmp");
[*]

А здесь подсказка
String test ="Primer";

TV.print_str ( 10, 10,  (char*) test.c_str()   );
Последний раз редактировалось Skaynet 22.12.2017{, 23:01}, всего редактировалось 1 раз.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

flprog tvout

#79

Сообщение pan » 22.12.2017{, 23:12}

Skaynet писал(а):А здесь подсказкаString test ="Primer";
 нет. подсказка здесь

TVOut.bitmap(x,y,bmp,w,h);
Параметры:

x,y – координаты левого верхнего угла точки вывода;
bmp – указатель на массив памяти, где хранится картинка;
w,h – ширина, высота выводимого изображения;

Skaynet
Рядовой
Сообщения: 44
Зарегистрирован: 15.12.2017{, 19:36}
Репутация: 0

flprog tvout

#80

Сообщение Skaynet » 22.12.2017{, 23:17}

pan
x,y – координаты левого верхнего угла точки вывода; ЭТО ПОНЯТНО
bmp – указатель на массив памяти, где хранится картинка;                        А ВОТ ТУТ НЕ ОЧЕНЬ ПОНЯТНО ????
w,h – ширина, высота выводимого изображения; ЭТО ТОЖЕ ПОНЯТНО

Ответить

Вернуться в «Звук, музыка и видео»