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

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

21.03.2018, 20:06. Показов 4961. Ответов 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
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
25.03.2018, 21:19
Студворк — интернет-сервис помощи студентам
Dkay, и убери точки из #ifndef и #define. Компиляторам это не нравится.
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:22  [ТС]
И как тогда писать (простите, я мало в этом понимаю)?
через подчерикивание - #ifndef HandControl_h или вообще без разширения - #ifndef HandControl
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
25.03.2018, 21:24
Цитата Сообщение от Dkay Посмотреть сообщение
через подчеркивание
Можно и так.
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:27  [ТС]
неа, в обоих случаях (и с подчеркиванием и без расширения) ругается:
Миниатюры
Библиотека на Си для Arduino  
0
Модератор
Эксперт С++
 Аватар для zss
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,284
25.03.2018, 21:33
Так там написано, что в конце файла должно быть
C++
1
#endif
Смысл этих препроцессорных команд - защита от повторного подключения файла.
Если Вы уверены, что у Вас всего один раз встречается
C++
1
#include "HandControl.h"
то можете их не писать совсем
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
25.03.2018, 21:34
Цитата Сообщение от Dkay Посмотреть сообщение
в обоих случаях (и с подчеркиванием и без расширения) ругается:
Он и до этого (у тебя) ругался.
Цитата Сообщение от Dkay Посмотреть сообщение
Когда в заголовочном из интереса убрал #include<string> начал ругаться на модификаторы #ifndef и #define
Это он о чём-то другом ругается.
1
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:36  [ТС]
Был бы невероятно признателен вам, если бы вы помогли мне понять, о чем
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
25.03.2018, 21:42  [ТС]
Разобрался с #ifndef, на него больше не ругается
Спасибо за замечание
Цитата Сообщение от zss Посмотреть сообщение
в конце файла должно быть
#endif
Теперь опять ругается на
C++
1
#include<string>
Миниатюры
Библиотека на Си для Arduino  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
26.03.2018, 04:31
Цитата Сообщение от Dkay Посмотреть сообщение
Был бы невероятно признателен вам, если бы вы помогли мне понять, о чем
Я вижу, ты уже перебрался на нужный форум, может там знают.

Добавлено через 3 часа 22 минуты
Цитата Сообщение от Dkay Посмотреть сообщение
Весь язык Ардуино отличается от c++ всего парой классов, заключенных в библиотеки (в этом компиляторе они подключаются автоматически)
Ошибок в коде много.

Добавлено через 29 минут
Вот так скомпилировалось (IDE Arduino 1.8.5):
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
#ifndef HANDCONTROL
#define HANDCONTROL
#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;
    static const int n=32;
    static const int m=6;
    
 
    void SymbolTranslate(unsigned char a);
 
    void SentenceTranslate(char* s); // вместо std::string си-строка
 
    char* 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
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
#include"HandControl.h"
#include<Arduino.h>
#include<Servo.h>
 
 int navigate[Hand::n][Hand::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}};//я
 
 
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; // ?
    int i;
    for(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(char* s){
    unsigned char a;
    for(size_t i=0; i< strlen(s); 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(fingerNum){
        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;
    }
    return 0; // нужно что-то вернуть
            
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include"HandControl.h"
 
void setup() {
  
  // put your setup code here, to run once:
 
}
void loop() {
  // put your main code here, to run repeatedly:
    unsigned char n = 'a';
    Hand hand;
    hand.SymbolTranslate(n);
}
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
26.03.2018, 11:46  [ТС]
Спасибо Вам большое, теперь все работает. Еще я заметил странную вещь: arduino перестанет ругаться на string, если написать String (с большой буквы)

Добавлено через 2 минуты
Еще хотел спросить:
Цитата Сообщение от nd2 Посмотреть сообщение
void SentenceTranslate(char* s); // вместо std::string си-строка
Можно же будет передать, в качестве аргумента, передать целую строчку, а не один символ (если честно, понятия не имею, что значит char*)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
26.03.2018, 16:03
Цитата Сообщение от Dkay Посмотреть сообщение
arduino перестанет ругаться на string, если написать String (с большой буквы)
Там свой класс есть (аналогичен std::string): https://github.com/arduino/Ard... /WString.h
Цитата Сообщение от Dkay Посмотреть сообщение
Можно же будет передать, в качестве аргумента, передать целую строчку, а не один символ
Никто один символ и не передаёт. Написано же:
Цитата Сообщение от nd2 Посмотреть сообщение
// вместо std::string си-строка
Добавлено через 29 секунд
Цитата Сообщение от Dkay Посмотреть сообщение
понятия не имею, что значит char*
Учебники почитай.
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
26.03.2018, 16:47  [ТС]
Спасибо вам большое за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2018, 16:47

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...


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

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru