Перенос кода

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Уважемые форумчане. Помогите пожалуйста перевести код в понятный для ардуино

void SendString(char * SendStr, uint8_t Line)
{
   int StrLen;
   unsigned char Packet[32];
   int i;

  lcd_gotoxy(0,0);
  msDelay(1);

  if (Line == 2)
  {
    lcd_gotoxy(0,1);
  }
  msDelay(1);

   StrLen = strlen(SendStr);
   memset(Packet, 0, sizeof(Packet));
   strncpy(Packet, SendStr, 16);
   for (i = StrLen; i <= 18; i++)
   {
      Packet[i] = 0x20;
   }

   lcd_puts(Packet);
   lcd_gotoxy(0,0);
}

//LCD Function
void ClearLCD()
{
  cd_clrscr();
}

 

Подключал библиотеку lcd, все равно ошибки.

toc
Offline
Зарегистрирован: 09.02.2013

код не содержит импорт lcd

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

kimmel.dima пишет:

Помогите пожалуйста перевести код в понятный для ардуино

Для начала попросите кого-нибудь помочь перевести Ваше сообщение в понятное для человека.

В чём Ваша проблема? Что не так? Буква l в 31 строке явно пропущена, а в остальном, объясните толком. что Вас не устраивает в этом коде?

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

toc пишет:
код не содержит импорт lcd

Весь код я и не выкладывал. Он 1500 строк, без этой функции он работает.

ide 1.6.11, пишет ошибку 

cc6cvSLb.ltrans1.o:(.text+0xc90): undefined reference to `lcd_gotoxy(unsigned char, unsigned char)'

Такая же на lcd_puts(Packet);

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

kimmel.dima пишет:

ide 1.6.11, пишет ошибку 

cc6cvSLb.ltrans1.o:(.text+0xc90): undefined reference to `lcd_gotoxy(unsigned char, unsigned char)'

Такая же на lcd_puts(Packet);

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

Ну, что, нету в Вашем проекте функции lcd_gotoxy. Она объявлена (иначе компилятор бы ругнулся), но физически её нету.

Ищите где она определена (в каком С-шном файле) и попробуйте положить этот файл в папку скетча.

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Теперь такая:

 \Temp\builde1c0249d87f548949c1d7632950e72df.tmp\libraries\LCD\lcd.c.o (symbol from plugin): In function `lcd_command':

(.text+0x0): multiple definition of `lcd_gotoxy'

По всем командам.

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Убрал дефайн лсд, вроде ошибки ушли. Попробую протестировать.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Драгоценнейший Топик Стартер (ТС)!

  В мире ардуино множество экранов и библиотек к ним. Если Вы хотите найти ошибку в своем коде, то нужно, по крайней мере, указать тип экрана и используемую библиотеку. Таких наименований, как Вы привели в типовых библиотеках нет. Но и посоветовать никто ничего не сможет, пока нет понимания, что Вы испотльзуете. Возможно, что эта функция - т.н. "прокладка" между функциями библиотеки и программой. Ведь код не Вы писали, как я понимаю? Тогда обращайтесь к автору или уж нанимайте исполнителя в другом разделе.

Евгений - правильно написал, посмотрите где именно описана функция, которую не может найти  линковшик.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Вобще нетрудно догадаться что lcd_gotoxy(0,0)  меняется на lcd.setCursor(0,0); в стандартной библе, а  lcd_puts(Packet); на lcd.print(Packet); и так далее :)

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Дисплей на HD44780 16х2. Библиотека lcd. По совету Евгения положил лсд.с в папку со скетчем и убрал из кода её дефайн, код скомпилировался. Но дисплей вообще не реагирует. Автора кода найти нет возможности. 

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

dimax пишет:
<p>Вобще нетрудно догадаться что lcd_gotoxy(0,0)&nbsp; меняется на lcd.setCursor(0,0); в стандартной библе, а&nbsp; lcd_puts(Packet); на lcd.print(Packet); и так далее :)</p>

Абсолютно солидарен. Именно так я и сделал сначала. Но дисплей выдал нечитаемый язык)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kimmel.dima,  Логично, это же массив. Выводите по-байту, организовав цикл.

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

dimax пишет:

kimmel.dima,  Логично, это же массив. Выводите по-байту, организовав цикл.

Это сложнее( Никогда так не делал. Как это должно выглядеть?

kimmel.dima
Offline
Зарегистрирован: 20.02.2014

Всем спасибо за участие. Вот этот код отображает всё корректно:

void SendString(char * SendStr, uint8_t Line)
{

  int StrLen;
  char Packet[32];
  int i;

  lcd.setCursor(0, 0);
  msDelay(1);
  if (Line == 2)

  {
    lcd.setCursor(0, 1);
  }
  msDelay(1);
  StrLen = strlen(SendStr);
  memset(Packet, 0, sizeof(Packet));
  strncpy(Packet, SendStr, 16);

  for (i = StrLen; i <= 18; i++)
  {
    Packet[i] = 32;

  }

  lcd.print(Packet);
  lcd.setCursor(0, 0);

}

//LCD Function
void ClearLCD()
{
  lcd.clear();
}