Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74

Библиотека на Си для Arduino

21.03.2018, 20:06. Показов 4825. Ответов 51
Метки нет (Все метки)

Всем привет. Столкнулся с необходимостью написания библиотеки (вообще не знаю, как это делать). После гугления темы понял, что нужен заголовочный файл и файл срр.
Решил проверить заголовочный файл на синтаксис, а компилятор ругается: "string doesn't name a type"
Объясните, пожалуйста, почему он так решил.

вот код заголовка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef HANDCONTROL_H_INCLUDED
#define HANDCONTROL_H_INCLUDED
 
const int ServoIn1 =3;
const int ServoIn2 =4;
const int ServoIn3 =5;
const int ServoIn4 =6;
const int ServoIn5 =7;
const int n=32;
const int m=5;
 
 
void SymbolTranslate(unsigned char a);
void SentenceTranslate(string s);
string getSymbol();
void SetPosition(int deg1, int deg2, int deg3, int deg4, int deg5);
int CharToInt(unsigned char a);
int getPosition(int fingerNum);
 
#endif
Миниатюры
Библиотека на Си для Arduino  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2018, 20:06
Ответы с готовыми решениями:

Arduino uno + arduino ethernet + delphi для чайников
Доброго времени суток. У меня такая задача нужно реализовать программу на Delphi которая будеуправлять платой, не знаю с какого бока...

Модуль распознавания речи + Arduino Pro mini + Arduino MP3-Sheild
Список компонентов: 1).Модуль распознавания речи.(напряжение питания от 4,5 до 5,5 Вольт DC) 2).Реле - 1 (ID:16-32)(с цифровым...

Arduino UNO. Как работать c RFID-сканнером и Arduino на одном Serial-порту?
Рас уж тут речь зашла об ардуине и многопоточности COM порта, думаю могу обратиться именно сюда за помощью. Имеется у меня arduino...

51
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
24.03.2018, 18:30  [ТС]
Спасибо вам большое
0
Just Do It!
 Аватар для XLAT
4219 / 2679 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
24.03.2018, 18:56
Цитата Сообщение от Dkay Посмотреть сообщение
Спасибо вам большое
ВАЖНО! в конце описания класса я забыл поставить точку с запятой,
...и тебе желаю в меру спешить и макса внимательности)
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 16:58  [ТС]
Здравствуйте. В процессе работы столкнулся с написанием библиотеки для микроконтроллера Arduino. Дело в том, что в библиотеке должны использоваться поля класса ардуино - Servo, а в конструкторе моей библиотеки для этих полей должен происходить метод .attach().
Надо ли мне наследовать мой класс (класс библиотеки) от класса Servo?
(Возможно, я нашел не самое лучшее решение, задача: метод attrach() должен выполняться сразу при подключении библиотеки)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.03.2018, 17:11
Цитата Сообщение от Dkay Посмотреть сообщение
в конструкторе моей библиотеки
У библиотек нет конструкторов. Может быть в конструкторе класса?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 17:12  [ТС]
Я имею ввиду, что в библиотеке я опишу класс, в котором реализую конструктор
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.03.2018, 17:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Some
{
public:
   Some() {
      s1.attach(pin_for_s1);
      s2.attach(pin_for_s2);
   }
   //...
private:
   Servo s1;
   Servo s2;
};
1
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 17:50  [ТС]
А ничего, что attach() это метод другого класса, который подключается библиотекой?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.03.2018, 17:56
Он не приватный, так что всё нормально.
Вы же где-то там сделаете #include <Servo.h>
1
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 18:13  [ТС]
То есть, если я пишу библиотеку, мне нужно в .h файле объявить этот класс, с его полями в т.ч. и с Servo, и в том же файле поключить библиотеку #include <Servo.h>, а в .cpp файле моей библиотеки уже ни о чем не париться и просто использовать Servo-поля везде, где мне нужно?

Добавлено через 14 минут
То есть, заголовочный файл будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef HandControl.h
#define HandControl.h
#include <string>
#include <string.h>
#include<Arduino.h>
#include<Servo.h>
 
 
class Hand{
 
public:
    Hand();
    const int ServoIn1 =3;
    const int ServoIn2 =4;
    const int ServoIn3 =5;
    const int ServoIn4 =6;
    const int ServoIn5 =7;
    const int n=32;
    const int m=5;
 
    void SymbolTranslate(unsigned char a);
 
    void SentenceTranslate(std::string s);
 
    std::string getSymbol();
 
    void SetPosition(int deg1, int deg2, int deg3, int deg4, int deg5);
 
    int CharToInt(unsigned char a);
 
    int getPosition(int fingerNum);
 
private:
    Servo First;
    Servo Second;
    Servo Third;
    Servo Fourth;
    Servo Fifth;
 
 
};
 
#endif
А .cpp файл библиотеки будет выглядеть так, да?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include"HandControl.h"
#include<Arduino.h>
#include<Servo.h>
 
    
int navigate[n][m]=
{160, 0, 0, 0, 0, 0},//а
{161, 0, 0, 0, 0, 0},//б
{162, 0, 0, 0, 0, 0},//в
{163, 0, 0, 0, 0, 0},//г
{164, 0, 0, 0, 0, 0},//д
{165, 0, 0, 0, 0, 0},//е
{166, 0, 0, 0, 0, 0},//ж
{167, 0, 0, 0, 0, 0},//з
{168, 0, 0, 0, 0, 0},//и
{169, 0, 0, 0, 0, 0},//й
{170, 0, 0, 0, 0, 0},//к
{171, 0, 0, 0, 0, 0},//л
{172, 0, 0, 0, 0, 0},//м
{173, 0, 0, 0, 0, 0},//н
{174, 0, 0, 0, 0, 0},//о
{175, 0, 0, 0, 0, 0},//п
{224, 0, 0, 0, 0, 0},//р
{225, 0, 0, 0, 0, 0},//с
{226, 0, 0, 0, 0, 0},//т
{227, 0, 0, 0, 0, 0},//у
{228, 0, 0, 0, 0, 0},//ф
{229, 0, 0, 0, 0, 0},//х
{230, 0, 0, 0, 0, 0},//ц
{231, 0, 0, 0, 0, 0},//ч
{232, 0, 0, 0, 0, 0},//ш
{233, 0, 0, 0, 0, 0},//щ
{234, 0, 0, 0, 0, 0},//ъ
{235, 0, 0, 0, 0, 0},//ы
{236, 0, 0, 0, 0, 0},//ь
{237, 0, 0, 0, 0, 0},//э
{238, 0, 0, 0, 0, 0},//ю
{239, 0, 0, 0, 0, 0},//я
 
 
 
 
 
 
 
void Hand:: Hand(){
    First.attach(ServoIn1);
    Second.attach(ServoIn2);
    Third.attach(ServoIn3);
    Fourth.attach(ServoIn4);
    Fifth.attach(ServoIn5);
}
 
 
 int Hand:: CharToInt(unsigned char a){
    int b=(int)(a);
    return b;
}
 
 
 void Hand:: SymbolTranslate(unsigned char a){
    
    
    int Hand::str=0
    for(int i=0; i<n; i++){
        if(navigate[i][0]==CharToInt(a)){
            str=i;
            break;  
        }
    }
    
    First.write(navigate[i][1]);
    Second.write(navigate[i][2]);
    Third.write(navigate[i][3]);
    Fourth.write(navigate[i][4]);
    Fifth.write(navigate[i][5]);
}
 
void SentenceTranslate(string s,){
    unsigned char a;
    for(int i=0; i<s.size(); i++){
        a=s[i];
        SymbolTranslate(a);
        delay(2000);
    }
}
    
void SetPosition(int deg1, int deg2, int deg3, int deg4, int deg5){
    First.write(deg1);
    Second.write(deg2);
    Third.write(deg3);
    Fourth.write(deg4);
    Fifth.write(deg5);
}
 
int getPosition(int fingerNum,){
 
    switch(finderNum){
        case 1:
            return First.read();
            break;
        case 2:
            return Second.read();
            break;
        case 3:
            return Third.read();
            break;
        case 4:
            return Fourth.read();
            break;
        case 5:
            return Fifth.read();
            break;
    }
            
}
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.03.2018, 18:17
Да. Но еще можно посмотреть в сторону массивов и циклов, вместо кучи разрозненных переменных и констант.
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 18:20  [ТС]
У меня минут 20 назад появилась идея создать массив полей Servo, но потом подумал, что это, впринципе, кроме душевного удовлетворения ничего мне не принесет

Добавлено через 26 секунд
Спасибо Вам большое за помощь
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 20:43  [ТС]
Здравствуйте. Я тут мучаюсь с библиотекой на си++ для ардуино. Вот, вроже бы все написал, но не тут то было, при компиляции в среде ардуино ругается на следующее (на скрине). Я, если честно, не очень понимаю, как он может не найти стандартную библиотеку.
Вот код моей библиотеки
Заголовочный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef HandControl.h
#define HandControl.h
#include <string>
#include<Arduino.h>
#include<Servo.h>
class Hand{
 
public:
    Hand();
    const int ServoIn1 =3;
    const int ServoIn2 =4;
    const int ServoIn3 =5;
    const int ServoIn4 =6;
    const int ServoIn5 =7;
    const int n=32;
    const int m=5;
 
    void SymbolTranslate(unsigned char a);
 
    void SentenceTranslate(std::string s);
 
    std::string getSymbol();
 
    void SetPosition(int deg1, int deg2, int deg3, int deg4, int deg5);
 
    int CharToInt(unsigned char a);
 
    int getPosition(int fingerNum);
 
private:
    Servo First;
    Servo Second;
    Servo Third;
    Servo Fourth;
    Servo Fifth;
 
 
};
 
#endif
Вот .cpp файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include"HandControl.h"
#include<Arduino.h>
#include<Servo.h>
 
    
int navigate[n][m]=
{160, 0, 0, 0, 0, 0},//а
{161, 0, 0, 0, 0, 0},//б
{162, 0, 0, 0, 0, 0},//в
{163, 0, 0, 0, 0, 0},//г
{164, 0, 0, 0, 0, 0},//д
{165, 0, 0, 0, 0, 0},//е
{166, 0, 0, 0, 0, 0},//ж
{167, 0, 0, 0, 0, 0},//з
{168, 0, 0, 0, 0, 0},//и
{169, 0, 0, 0, 0, 0},//й
{170, 0, 0, 0, 0, 0},//к
{171, 0, 0, 0, 0, 0},//л
{172, 0, 0, 0, 0, 0},//м
{173, 0, 0, 0, 0, 0},//н
{174, 0, 0, 0, 0, 0},//о
{175, 0, 0, 0, 0, 0},//п
{224, 0, 0, 0, 0, 0},//р
{225, 0, 0, 0, 0, 0},//с
{226, 0, 0, 0, 0, 0},//т
{227, 0, 0, 0, 0, 0},//у
{228, 0, 0, 0, 0, 0},//ф
{229, 0, 0, 0, 0, 0},//х
{230, 0, 0, 0, 0, 0},//ц
{231, 0, 0, 0, 0, 0},//ч
{232, 0, 0, 0, 0, 0},//ш
{233, 0, 0, 0, 0, 0},//щ
{234, 0, 0, 0, 0, 0},//ъ
{235, 0, 0, 0, 0, 0},//ы
{236, 0, 0, 0, 0, 0},//ь
{237, 0, 0, 0, 0, 0},//э
{238, 0, 0, 0, 0, 0},//ю
{239, 0, 0, 0, 0, 0};//я
 
 
 
 
 
 
 
void Hand :: Hand(){
    First.attach(ServoIn1);
    Second.attach(ServoIn2);
    Third.attach(ServoIn3);
    Fourth.attach(ServoIn4);
    Fifth.attach(ServoIn5);
}
 
 
 int Hand:: CharToInt(unsigned char a){
    int b=(int)(a);
    return b;
}
 
 
 void Hand :: SymbolTranslate(unsigned char a){
    
    int Hand::str=0
    for(int i=0; i<n; i++){
        if(navigate[i][0]==CharToInt(a)){
            str=i;
            break;  
        }
    }
    
    First.write(navigate[i][1]);
    Second.write(navigate[i][2]);
    Third.write(navigate[i][3]);
    Fourth.write(navigate[i][4]);
    Fifth.write(navigate[i][5]);
}
 
void Hand :: SentenceTranslate(string s,){
    unsigned char a;
    for(int i=0; i<s.size(); i++){
        a=s[i];
        SymbolTranslate(a);
        delay(2000);
    }
}
    
void  Hand :: SetPosition(int deg1, int deg2, int deg3, int deg4, int deg5){
    First.write(deg1);
    Second.write(deg2);
    Third.write(deg3);
    Fourth.write(deg4);
    Fifth.write(deg5);
}
 
int  Hand :: getPosition(int fingerNum,){
 
    switch(finderNum){
        case 1:
            return First.read();
            break;
        case 2:
            return Second.read();
            break;
        case 3:
            return Third.read();
            break;
        case 4:
            return Fourth.read();
            break;
        case 5:
            return Fifth.read();
            break;
    }
            
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
25.03.2018, 20:53
Цитата Сообщение от Dkay Посмотреть сообщение
ругается на следующее
На что?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 20:55  [ТС]
Прошу прощения, забыл скрин прикрепить
Миниатюры
Библиотека на Си для Arduino  
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:02  [ТС]
Когда в заголовочном из интереса убрал #include<string> начал ругаться на модификаторы #ifndef и #define
закомментировал и их - начал ругаться на то, что не знает, откуда взялись string
(все ошибки на скринах) Я его вообще не понимаю
Изменения в заголовке библиотеки:
1)
C++
1
2
3
4
5
6
7
8
9
#ifndef HandControl.h
#define HandControl.h
#include <string.h>
//#include <string>
#include<Arduino.h>
#include<Servo.h>
using namespace std;
class Hand{
...
2)
C++
1
2
3
4
5
6
7
8
9
10
//#ifndef HandControl.h
//#define HandControl.h
#include <string.h>
//#include <string>
#include<Arduino.h>
#include<Servo.h>
using namespace std;
 
class Hand{
...
Миниатюры
Библиотека на Си для Arduino   Библиотека на Си для Arduino  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
25.03.2018, 21:04
Компилятор там С++?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:08  [ТС]
Да
Весь язык Ардуино отличается от c++ всего парой классов, заключенных в библиотеки (в этом компиляторе они подключаются автоматически)
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
25.03.2018, 21:11
Цитата Сообщение от Dkay Посмотреть сообщение
Весь язык Ардуино отличается от c++ всего парой классов,
Та ты шо-о-о-о?
Code
1
2
int i = 1;
cout << i << "\n";
Ну-ка?
Code
1
2
double f = 1.1;
printf( "%f\n", f );
Ну-ка?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:13  [ТС]
Ладно, я думал Ардуно на плюсах основан, а не обычном си
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
25.03.2018, 21:18
Цитата Сообщение от Dkay Посмотреть сообщение
я думал Ардуно на плюсах основан, а не обычном си
Нужно не "думать", а знать.
Arduino, основные модели, построен на процессорах AVR. А там очень "специфический" C++ (компилятор avr-g++).
А документация Arduino и его сужает в 3 раза.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2018, 21:18

AVRISP + ARDUINO mega + Arduino mini 32Khz
Помогите пожалуйста. Собирал самостоятельно Arduino mini. По не опытности ошибся при прошивке фьюзов, и выставил на кварц 32 Кгц... ...

Arduino обмен данные между Arduino
Доброго времени суток, писал код обмен данных между двумя ардуинкой, отправляю из одной ардуинку &quot;9&quot; а из другого получаю фигню ...

Какой Arduino выбрать для таймера для электромотора
Я совсем новичок в этом деле. Хочу сделать таймер, который будет отключать электромотор (220В). К этому добавить самый простой экран и 2...

Что нужно для написания приложения для Facebook (библиотека для Visual Studio)
Здравствуйте! Нашел интересную статейку на офсайте посвящённому asp.net , где представлен пример создания приложения для Facebook....

ATmega для Arduino
Здравствуйте! Сделал себе на днях Arduino. Когда дело дошло до контроллера я обзвонил все радиодетали и нашел только 1 ATmega168 за 190...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru