Написал библиотеку. При компиляции скетча выдает ошибку.

Levan
Offline
Зарегистрирован: 16.06.2015

Добрый ночи!

Очень хочу научиться писать библиотеки для себя. Мой первый опыт несколько неудачен. Помогите пожалуйста разобраться где я косячу (dot и dash исчитано вдоль и поперёк).

Голова

/**/
#ifndef osh_h
#define osh_h
//#include "WProgram.h"
#include "Arduino.h"


class osh
{
public:
osh(int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4, int a);
private:
int _d;
};
#endif

CPP

#include "Arduino.h"
#include "osh.h"

osh::osh(int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4, int a)
{
  pinMode(motor_pin_1,OUTPUT);
  pinMode(motor_pin_2,OUTPUT);
  pinMode(motor_pin_3,OUTPUT);
  pinMode(motor_pin_4,OUTPUT);
}

void osh::shag()
{_d=0;
  do{
  digitalWrite(motor_pin_1, LOW);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, HIGH);
  delay(a);
  //
  digitalWrite(motor_pin_1, LOW);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, HIGH);
  digitalWrite(motor_pin_4, HIGH);
  delay(a);
  //
  digitalWrite(motor_pin_1, LOW);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, HIGH);
  digitalWrite(motor_pin_4, LOW);
  delay(a);
  //
  digitalWrite(motor_pin_1, LOW);
  digitalWrite(motor_pin_2, HIGH);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, LOW);
  delay(a);
  //
  digitalWrite(motor_pin_1, HIGH);
  digitalWrite(motor_pin_2, HIGH);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, LOW);
  delay(a);
  //
  digitalWrite(motor_pin_1, HIGH);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, LOW);
  delay(a);
  //
  digitalWrite(motor_pin_1, HIGH);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, HIGH);
  delay(a);
  _d=_d+1;
  }
  while (_d<512);
  //
  digitalWrite(motor_pin_1, LOW);
  digitalWrite(motor_pin_2, LOW);
  digitalWrite(motor_pin_3, LOW);
  digitalWrite(motor_pin_4, LOW);
  delay(500);
}

Скетч

#include <osh.h>
osh sh1(2,3,4,5,1);
osh sh2(6,7,8,9,1);
osh sh3(10,11,12,13,1);

void setup() {

}

void loop() {
sh1.shag();
sh2.shag();
sh3.shag();
}

Ошибки

shag_s_bibl.ino: In function 'void loop()':
shag_s_bibl:12: error: 'class osh' has no member named 'shag'
shag_s_bibl:13: error: 'class osh' has no member named 'shag'
'class osh' has no member named 'shag'
 
Голова уже болит...
Без нужды бы не обращался. Где-то в моём понимании библиотек - ошибка.
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Так в хидере ("голове") вы не указали в классе прототип функции...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Потом будет ругаться на строки delay(a); в методе shag.
Имена, просто мечта бухгалтера, чернил жалко?
a, _d и т.п. Через месяц забудешь для чего они.
Обилие комментариев, опять же.
Член класса _d вообще не нужен, его правильней сделать локальной переменной.
Ну и отступы так же для экономии выпилены, очевидно. Ctrl-t, если лень отступы делать.
Есть ещё одна (как минимум) ошибка, но это домашнее задание автору.

Levan
Offline
Зарегистрирован: 16.06.2015

Спасибо!

Levan
Offline
Зарегистрирован: 16.06.2015

Спасибо!

Изменил.

А зачем?

/**/
#ifndef osh_h
#define osh_h
//#include "WProgram.h"
#include "Arduino.h"


class osh
{
public:
osh(int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4, int a);
void shag();
private:
int _d;
int _motor_pin_1;
int _motor_pin_2;
int _motor_pin_3;
int _motor_pin_4;
int _a;
};
#endif
#include "Arduino.h"
#include "osh.h"

osh::osh(int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4, int a)
{
  pinMode(motor_pin_1,OUTPUT);
  pinMode(motor_pin_2,OUTPUT);
  pinMode(motor_pin_3,OUTPUT);
  pinMode(motor_pin_4,OUTPUT);
_motor_pin_1=motor_pin_1;
_motor_pin_2=motor_pin_2;
_motor_pin_3=motor_pin_3;
_motor_pin_4=motor_pin_4;
_a=a;
}

void osh::shag()
{_d=0;
  do{
  digitalWrite(_motor_pin_1, LOW);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, HIGH);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, LOW);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, HIGH);
  digitalWrite(_motor_pin_4, HIGH);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, LOW);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, HIGH);
  digitalWrite(_motor_pin_4, LOW);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, LOW);
  digitalWrite(_motor_pin_2, HIGH);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, LOW);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, HIGH);
  digitalWrite(_motor_pin_2, HIGH);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, LOW);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, HIGH);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, LOW);
  delay(_a);
  //
  digitalWrite(_motor_pin_1, HIGH);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, HIGH);
  delay(_a);
  _d=_d+1;
  }
  while (_d<512);
  //
  digitalWrite(_motor_pin_1, LOW);
  digitalWrite(_motor_pin_2, LOW);
  digitalWrite(_motor_pin_3, LOW);
  digitalWrite(_motor_pin_4, LOW);
  delay(500);
}