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

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

29.03.2018, 20:12. Показов 2921. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Написал библиотеку на си для микроконтроллера ардуино. Подключаю ее, использую из нее команду, а компилятор выдает, что функция не объявлена. Из-за чего это может происходить?
Вот код программы:
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
#include<HandControl.h>
 
unsigned char incomingbyte;
const unsigned char shift='а';
int c;
 
 
 
void setup() {
 
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.available() > 0) { 
    incomingbyte=Serial.read();
    if(CharToInt(incomingbyte)>=224)
        Serial.println("Word");
      else
        Serial.println("not Word");
        
    Serial.println(CharToInt(incomingbyte));
    Serial.println(incomingbyte);
  }
Вот код реализации библиотеки:
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
117
118
#include"HandControl.h"
#include<Arduino.h>
#include<Servo.h>
 
const int navigate[Hand::n][Hand::m]= {
{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},//?
{240, 0, 0, 0, 0, 0},//?
{241, 0, 0, 0, 0, 0},//?
{242, 0, 0, 0, 0, 0},//?
{243, 0, 0, 0, 0, 0},//?
{244, 0, 0, 0, 0, 0},//?
{245, 0, 0, 0, 0, 0},//?
{246, 0, 0, 0, 0, 0},//?
{247, 0, 0, 0, 0, 0},//?
{248, 0, 0, 0, 0, 0},//?
{249, 0, 0, 0, 0, 0},//?
{250, 0, 0, 0, 0, 0},//?
{251, 0, 0, 0, 0, 0},//?
{252, 0, 0, 0, 0, 0},//?
{253, 0, 0, 0, 0, 0},//?
{254, 0, 0, 0, 0, 0},//?
{255, 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){
  const unsigned char shift='а';
     int b=(int)(a+shift);
    if(b>=192&&b<224){
      b=b+32;
      return b;
    }
    else
      return b;
    
}
 
 
void Hand :: SymbolTranslate(unsigned int a){
    
    int str=0;
    int i;
    for(i=0; i<n; i++){
        if(navigate[i][0]==CharToInt(a)){
            str=i;
            break;  
        }
    }
    
    First.write(navigate[str][1]);
    Second.write(navigate[str][2]);
    Third.write(navigate[str][3]);
    Fourth.write(navigate[str][4]);
    Fifth.write(navigate[str][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; 
            
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2018, 20:12
Ответы с готовыми решениями:

Как проверить реле к ардуино без ардуино
Собственно вопрос в названии. Дело в том что реле пришло по почте раньше чем само ардуино. Так как...

HC-05 был создан для ардуино или для других целей?
Я имею ввиду, hc-05 раньше использовались с разными МК вроде AVR, PIC, TI и т.п., а потом нашлись...

Программа для Ардуино
Изменить порядок фамилий в списке в соответствии с алфавитом (Eng) после буквы R (Eng) по...

Скетч для ардуино
Помогите соединить два скетча в один: 1) #define pirPin 9 // Объявляем переменную для датчика...

6
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
29.03.2018, 21:13 2
Цитата Сообщение от Dkay Посмотреть сообщение
Подключаю ее
Как именно подключаете?
1. Компилируете в отдельном проекте и создаете .lib файл, а потом этот lib Добавляете в список сборки?
2. Просто подключаете к проекту оба файла?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 21:15  [ТС] 3
Подключаю .h файл через препроцессорную директиву include
Цитата Сообщение от Dkay Посмотреть сообщение
#include<HandControl.h>
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
29.03.2018, 21:30 4
Цитата Сообщение от Dkay Посмотреть сообщение
CharToInt(incomingbyte)
А где объект типа Hand?
0
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 21:41  [ТС] 5
Черт, точно. Что-то я совсем туплю сегодня. Сейчас попробую

Добавлено через 6 минут
Поменял код на:
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
#include<HandControl.h>
 
unsigned char incomingbyte;
const unsigned char shift='а';
int c;
 
 
 
 
void setup() {
  Hand hand = new Hand();
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.available() > 0) { 
    incomingbyte=Serial.read();
    if(hand.CharToInt(incomingbyte)>=224)
        Serial.println("Word");
      else
        Serial.println("not Word");
        
    Serial.println(hand.CharToInt(incomingbyte));
    Serial.println(incomingbyte);
  }
  
 
 
}
Теперь выдает следующую ошибку: conversion from 'Hand*' to non-scalar type 'Hand' requested
У меня так себе с Си++, так что я понятия не имею, что это значит
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
29.03.2018, 22:01 6
Лучший ответ Сообщение было отмечено Dkay как решение

Решение

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
#include<HandControl.h>
 
unsigned char incomingbyte;
const unsigned char shift='а';
int c;
Hand hand;
//Hand * hand = nullptr;
 
 
void setup() { 
  //hand = new Hand(); 
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.available() > 0) { 
    incomingbyte=Serial.read();
    if(hand.CharToInt(incomingbyte)>=224)//hand->CharToInt(incomingbyte)>=224
        Serial.println("Word");
      else
        Serial.println("not Word");        
    Serial.println(hand.CharToInt(incomingbyte));
    //Serial.println(hand->CharToInt(incomingbyte));
    Serial.println(incomingbyte);
  }
}
1
-26 / 1 / 0
Регистрация: 21.03.2018
Сообщений: 74
29.03.2018, 22:09  [ТС] 7
Так тоже пробовал
пишет, что ошибка компиляции. И вот это сообщение:

candidate is: void Hand::SymbolTranslate(unsigned char)

void SymbolTranslate(unsigned char a);

Добавлено через 7 минут
Ладно, я уже исправил ошибку. Теперь, вроде работает, спасибо
0
29.03.2018, 22:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2018, 22:09
Помогаю со студенческими работами здесь

Библиотка для ардуино
Всем привет. Столкнулся с необходимостью написания библиотеки, использующей Servo-поля....

для ардуино маленькой машины
Здравствуйте! Помогите найти исходники для любого дрона, нужны просто готовые исходники на C++ с...

Проблема с программой для ардуино
0 Здравствуйте помогите пожалуйста. Имеется вот такой код для моего проекта. Проблема в том...

Восьмибайтные типы для ардуино
В вычислениях должны использоваться 8-ми байтные целочисленные типы и 8-ми байтные дробные типы....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru