Подключение библиотеки
- Войдите на сайт для отправки комментариев
Сб, 10/11/2018 - 21:13
Пытаюсь подключить библиотеку, выдает такую ошибку:
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 );
}
}
У Вас файл "my_serial.c" на С, а вызываете его из С++
Вам надо
1. либо переименовать my_serial.c в my_serial.cpp и писать на одном языке.
2. либо в файле my_serial.h явно указать, что эти функции на С (там типа extern "C" ... )