Подключение библиотеки

vitaitly
Offline
Зарегистрирован: 10.11.2018


Пытаюсь подключить библиотеку, выдает такую ошибку:
 
Arduino: 1.8.2 (Windows 10), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
 
C:\Users\Andrey\AppData\Local\Temp\ccpTb2VV.ltrans0.ltrans.o: In function `main':
 
ccpTb2VV.ltrans0.o:(.text.startup+0x15e): undefined reference to `get_str(char*)'
 
collect2.exe: error: ld returned 1 exit status
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 

Код программы: 

#define SIZE 64
#include <string.h>
#include "my_serial.h"

char my_str_byte[ SIZE ];

void setup() {
    pinMode( 50, INPUT );
    pinMode( LED_BUILTIN, OUTPUT );
}

void loop(){

  get_str( my_str_byte );
  if ( !strcmp( my_str_byte, "hello" )) 
    digitalWrite( LED_BUILTIN, HIGH );
    
  if ( !strcmp( my_str_byte, "buy" )) 
    digitalWrite( LED_BUILTIN, LOW );	
}

Код my_serial.h

#ifndef MY_SERIAL
#define MY_SERIAL

#include "Arduino.h"

void send_byte( char _byte );
void send_str( char *str_byte );
char get_byte();
void get_str( char *str_byte );

#endif

Код my_serial.c

#include "my_serial.h"

char get_byte()
{
  int i;
  char _byte = 0;

  while  ( digitalRead( 50 ) );
  delayMicroseconds( 150 );
  for ( i = 0; i < 8; i++)
  {
    _byte |= digitalRead(50) << i;
    delayMicroseconds( 100 );
  }
  while (!digitalRead( 50 ));
  return _byte;
}

void get_str( char *str_byte )
{
  int i;
  
  for ( i = 0; ; i++ )
  {
    str_byte[ i ] = get_byte();
      if ( str_byte[ i ] == '\n' )
        break;
  }
  str_byte[ i ] = 0;
}

void send_byte( char _byte )
{
  int i;

  digitalWrite( 51, LOW );
  delayMicroseconds( 100 );
  
  for ( i = 0; i < 8; i++)
  {
    digitalWrite( 51, (_byte >> i) & 1);
    delayMicroseconds( 100 );
  }
  digitalWrite( 51, HIGH );
  delayMicroseconds( 100 );
}

void send_str( char *str_byte )
{
  int i;
  
  for ( i = 0; !(!str_byte[ i ]); i++ )
  {
    send_byte ( str_byte[ i ] );
    delay( 100 );
  }
}

 

 

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

У Вас файл "my_serial.c" на С, а вызываете его из С++

Вам надо 

1.  либо переименовать my_serial.c в my_serial.cpp и писать на одном языке.

2. либо в файле my_serial.h явно указать, что эти функции на С (там типа extern "C" ... )