Официальный сайт компании Arduino по адресу arduino.cc
Создание библиотек.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте.
Не очень давно открыл для себя ардуино, соответственно недавно начал программировать в среде Arduino IDE. Сегодня изучал создание библиотек на примере Morse.h, который описан почти во всех уроках по созданию библиотек. Выглядит она так
Morse.h
#ifndef Morse_h
#define Morse_h
#include "Arduino.h"
class Morse
{
public:
Morse(int pin);
void dot();
void dash();
private:
int _pin;
};
#endif
Morse.cpp
#include "Arduino.h"
#include "Morse.h"
Morse::Morse(int pin){
_pin = pin;
pinMode(_pin, OUTPUT);
}
void Morse::dot(){
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}
Простейшая библиотека, которая добавляет две функции dot() и dash(). Я понял принцип и устройство этой библиотеки, но мне хочется добавить в нее еще команды. Например команду SOS, которая будет состаять из 3-х dot(), 3-x dash(), и еще 3-х dot(). Как это можно реализовать? Я имею в виду, чтобы функция SOS состаяла из ранее описанных в этой библиотеки функций.
void SOS(){
Morse::dot(); Morse::dot(); Morse::dot();
Morse::dash(); Morse::dash(); Morse::dash();
Morse::dot(); Morse::dot(); Morse::dot();
}
Такая запись не прокатила. Судя по всему это не правильно.
Видишь ли есть такое изобретение у человечества , как книга. То что сейчас господсвует Интернет и социальные сети, не отменяет этот факт. А еще есть поисковики Гугл. Да и на форуме дохрена этих тем. Которые я лично выложил. Осталось вам их поискать. И да другие тоже выкладывали и ничего.Я на них не в обиде.
http://variable.saraff.ru/page.php?pg=19
https://vk.com/doc16756779_228187070?hash=88e5b6ccd4f822602c&dl=ccc12f55...
Да не, правильным путём идёт человек, чего б не подсказать
либо
либо в morse.cpp
+ добавить в morse.h
Боже, как давно это у меня было(больше года назад я это считал эталоном). А сейчас уже туфтой из-за delay(250);
Всякое бывает)) Учимся не сразу, что поделать. Лучше подскажи как тут можно сделать без delay()? Для меня это пока что трудновато
negavoid, Спасибо! Все работает.
Вручную вызывать было не вариант, так как я хотел позадротить и весь латинский алфавит вбить в эту библиотеку. В общем-то я начал понимать хоть чуть чуть как это устроено. Хотя конечно там еще много всего...
Suslenkov Andrey
Не нужно тут делать ничего без delay(), не слушайте этого юношу, предпочитающего тратить такты на выполнение if millis() в цикле вместо того же цикла внутри delay, только пустого, усложняя поддержку кода, да и жизнь, и себе, и окружающим неофитам. :)
Suslenkov Andrey
Не нужно тут делать ничего без delay(), не слушайте этого юношу, предпочитающего тратить такты на выполнение if millis() в цикле вместо того же цикла внутри delay, только пустого, усложняя поддержку кода, да и жизнь, и себе, и окружающим неофитам. :)
Возможно. Не думаю, что остановка выполнения кода в данном случае может как-то навредить
Забейте, интернет уже сделал это за вас :) https://gist.github.com/baojie/4460468
*del double*
Забейте, интернет уже сделал это за вас :) https://gist.github.com/baojie/4460468
Я знаю)) просто для практики, чтобы закрепить знания так сказать
А здесь работает такая поговорка: Тяжело в учении - легко в бою. Учится менять delay на millis желательно по раньше. А то что приходится для упрощения программирования изучать глубже Си -> C++ -> ОПП, так это хорошо, хотя и трудно. И да delay крадет ваши процессорные ресурсы, делая кирпичами как и быстрые, так и медленые процессоры.
Это да. Мне тоже знакомый один говорит не использовать delay. Можно конечно услажнить себе жизнь попробовать, может будет хорошей практикой. Как нибудь обязательно перепишу эту библиотеку без delay.
negavoid, Спасибо! Все работает.
Вручную вызывать было не вариант, так как я хотел позадротить и весь латинский алфавит вбить в эту библиотеку. В общем-то я начал понимать хоть чуть чуть как это устроено. Хотя конечно там еще много всего...
1. Честно говоря, этот широко раcтиражированный пример - яркий образец того, как не нужно писать программы:
- во-первых, название библиотеки категорически не отражает ее содержимого,
- во-вторых, автор взялся писать на тему, в которой он совершенно не разбирается.
Поэтому, если уж браться за усовершенстввание библиотеки, то первое, что надо сделать - исправить имеющиеся в ней ошибки.
2. Мне кажется, если Вы хотите сделать что-то хоть минимально полезное, то в библиотеке должна быть не куча функций под разные символы, а одна функция, воспроизводящая строку текста. (+ разумеется, некоторые дополнительные функции: например тот же сигнал SOS передается совсем не так, как строка "SOS")
3. Ну и само-собой длительность точки должна быть настраиваемой.
1. Честно говоря, этот широко раcтиражированный пример - яркий образец того, как не нужно писать программы:
- во-первых, название библиотеки категорически не отражает ее содержимого,
- во-вторых, автор взялся писать на тему, в которой он совершенно не разбирается.
Поэтому, если уж браться за усовершенстввание библиотеки, то первое, что надо сделать - исправить имеющиеся в ней ошибки.
2. Мне кажется, если Вы хотите сделать что-то хоть минимально полезное, то в библиотеке должна быть не куча функций под разные символы, а одна функция, воспроизводящая строку текста. (+ разумеется, некоторые дополнительные функции: например тот же сигнал SOS передается совсем не так, как строка "SOS")
3. Ну и само-собой длительность точки должна быть настраиваемой.
Я начал писать эту библиотеку не ради практической пользы, а ради тренировки, чтобы понять, как это вообще делается. То есть ради обучения. Само сабой, я еще ничего в этом не понимаю, но ведь не все сразу) И тему создал я для того, чтобы более продвинутые пользователи помогли мне в этом.
Я еще буду пробвать сделать строку текста, хотя, чесно говоря, совершенно не представляю, как это сделать.
Насмешил. Я же говорю, что бы был толк в программировании надо копать Си->Cи++-> ООП очень глубоко.
Но ответ на ваш вопрос лежит на глубине 1-2 метра http://arduino.ru/forum/programmirovanie/etyudy-dlya-nachinayushchikh-po... Учите классы и указатели. Без них у вас ничего не получится.