Хобби-электроникс 4


title


Вся книга, как есть в формате pdf часть1 5MB
часть2 4MB



 

Эскизы глав:



 

Предисловие



 

Глава 1. Поиск печки, от которой танцевать

Два берега

Первое знакомство с Gambas

Компьютер может помочь с программированием

Почему Емеля ездил на печи?

А можно с этого места поподробнее?

Первый блин



 

Глава 2. Бряцая железом

Хорошее начало

Возвращение

Отладка в gpsim



 

Глава 3. У камелька

Начало проекта «Машинистка»

Развиваем успех

Заметки и пометки «на память»



 

Глава 4. Охота на кентавра

Засада в интерфейсе

Железное решение

Лирическое отступление

Грустное завершение рассказа о счетчике



 

Глава 5. Сказка о неудачливом радиолюбителе

Возвращение на круги своея

Расширение кругов (на воде?)

gpsim как зерцало грешника

Вялая попытка оправдаться

И оргвыводы

Глава 6. Сказка о ловком программисте

Предварительное рассмотрение проекта «Генератор»



 

Глава 7. Конспекты



 


В.Н. Гололобов



 

Игра в программирование



 

Предисловие

Не получается у меня задумка. Не работает схема. Все, вроде бы, правильно, но не желает работать это «транзисторно-микросхемное месиво». Раньше было проще – промерил напряжения, посмотрел осциллографом, все понял и исправил. Так то было раньше.

Не то, чтобы я испереживался, не спал по ночам. Сплю, и вам советую. Спите крепко, чтобы проснувшись назавтра порадоваться новому дню и солнцу, если оно светит, или дождю, если на улице пасмурно. Как бы плотно ни укрыли тучи ваш город, солнце-то продолжает светить!

Любая деятельность человека всегда связана с периодами усталости или разочарования, с тем, что предмет его внимания надоедает, становится непостижимым образом похож на дикобраза – кругом колючки, как ни подступись. Даже если то, чем вы занимаетесь, не ваша работа, а ваше увлечение, ведет оно себя временами столь же противно, что и каждодневная рутина. Бесполезно браниться, бесполезно сердится, полезно, но не всегда, к сожалению, помогает, обратиться за советом или помощью. Важнее всего помнить, что как бы плотно ни укрыли тучи...

Программирование, как обязательный курс, по которому приходилось сдавать экзамен, может больше напугать, чем заинтересовать. Между тем, все больше людей, никак с программированием прямо не связанных, или не связанных с ним прежде, подвергаются давлению со стороны этого явления природы. Я слишком поверхностно знаю бухгалтерское дело, чтобы говорить о тех сквозняках из мира программирования, которые заставляют страдать даже опытных специалистов. И мне никогда не приходилось конструировать самолеты, чтобы рассказать о пользе знания языка Lisp в практике конструкторской работы. Но лет десять назад, может больше, занимаясь поиском «чего бы поработать», одним из первых вопросов, которые я слышал был вопрос: «А вы умеете обращаться с компьютером?» Я честно отвечал, что если мне снимут корпус, я смогу пропылесосить любую модель компьютера.

Я не программист. Я не пытаюсь примазаться к этой славной профессии. Но и нет моей вины в том, что время от времени появляется необходимость возвращаться к давно забытым со студенческих времен понятиям процедуры, функции, цикла... Однако сегодня, когда мне не нужно сдавать экзамены, возвращаясь к этим пугающим нормального человека понятиям, я начинаю понимать их простую и ясную сущность. И происходит это, во-первых, потому, что сегодняшнее программрование изобилует еще более загадочными понятиями – класс, наследование и т.д., а, во-второрых, потому что даже эти загадочные слова, если не обращать на них внимания, в современых системах программирования позволяют сделать легко и быстро многое из того, что прежде отнимало много времени и сил. Сегодня я не могу сказать, что проще – написать небольшую программу, которая решит ваши проблемы, или с карандашом и бумагой проделать эту же работу? Обычно первая мысль о бумаге и карандаше кажется более разумной, но лишь до тех пор, пока не примешься претворять эту мысль в жизнь.

Я не умею программировать, и компьютер для меня сродни кофеварке, удобно и включается быстро, но я хочу предложить такую игру: я сделаю вид, что я умею программировать, что знаком с компьютером не по наслышке, - посмотрим, сумею ли я рассказать что-нибудь интересное о программирвании. Это будет не более, чем игра, и я не буду, выскакивая из-за угла, пугать вас громкими криками.

Для игры в футбол есть футбольное поле, для игры в гольф – поле для гольфа. Для игры в программирование я предлагаю великолепнейшее поле – язык и среда программирования Gambas. Этот язык имеет в своей основе Basic. Работает в среде операциооной системы Linux. Если по какой-то причине вы не хотите или не можете пользоваться этой операционной системой, то можете пользоваться средой программирования Visual Basic. Они очень похожи, хотя Gambas много лучше.

Для тех, кого смущают родственные отношения между Basic и Gambas, я готов привести множество высказываний опытных профессионалов о том, что программирование не соотносится напрямую с языком кодирования. В этом смысле нет ничего зазорного, что основой языка служит Basic, тем более, что Gambas – это современный, мощный и хорошо построенный объектно-ориентированный язык программирования. А насколько он хорош, можно судить по тому, что вся графическая пользовательская оболочка Gambas написана на самом языке Gambas.

По мне же, чем проще, тем лучше. И лично меня смущает только одно, достаточно ли это просто. С выяснения этого я, пожалуй, и начну.

Спасибо, что дочитали это предисловие до конца, а если нет, то и правильно сделали.

 

 

Глава 1. Поиск печки, от которой танцевать

Первое знакомство с Gambas

Не будучи представлен человеку, набиваясь ему в знакомые, ты никогода не начнешь с жалоб на свои личные проблемы. Самое лучшее, что можно сделать при первом знакомстве – это узнать у человека, как идут его дела, пригласить его выпить кофе, а за кофе погворить о погоде, об общих знакомых.

Набиваясь в знакомые языку программирования я хочу следовать этому же правилу. Вначале поинтересуюсь о его делах (законспектирую руководство), потом поговорю об общих знакомых (например, языках программирования, или программах). И только после этого попробую обратиться к своим проблемам с его помощью.

Вы не поверите, но набиваться в знакомые не такое простое дело. Конечно, если не полагаться на случай, на везенье. Для подготовки к встрече, чтобы было о чем поговорить, я, вопреки обыкновению, отправился в книжный магазин. Обилие общих знакомых, дружными рядами окупировавших полки, повергло меня в уныние вопреки ожидаемому восторгу, я понял, что мне придется перечитать все названия кннг, чтобы попытаться найти ту, что я хотел. Пришлось методично перечитать много названий, но той, что я хотел купить, я, к сожалению, не нашел. Пришлось ограничится пока тем, что удалось отыскать в Интернете, отложив поиски всех остальных книг до следующего раза, когда соберусь поехать в центральные магазины. Но это только по причине моей привередливости, книг действительно по предмету очень много.

Кроме того, сама программа Gambas имеет в папке «help» кроме традиционных подсказок большое количество статей, относящихся как к языку, так и к объектно-ориентированному программированию. И огромное количество примеров, над созданием которых потрудился не только автор, но и многочисленные добровольцы. Думаю, если бы я искал прямой путь к цели, этого хватило бы, чтобы вымостить широченный проспект, а не только подъездную дорогу.

Запуск программы, как во многих сегодняшних, если не всех, операционных системах осуществляется щелчком левой клавиши мышки в соответствующем разделе меню. В Linux меню выбора программ хорошо систематизировано – офисные приложения в разделе «Офис», и их там очень много, потому что я люблю, когда всего много, когда есть возможность выбрать.

 


Рис. 1.1. Раздел офисных приложений в операционной системе Linux

Для работы только с текстом я часто пользуюсь текстовым процессором AbiWord. Он легкий и быстрый. Если приходится рисовать что-то в тексте, иключая необходимость создания чертежей профессионального качества, можно использовать KOffice, но чаще приходится использовать OpenOffice.org.Writer. Из него я могу экспортировать текст с иллюстрациями в формат pdf.

Не менее насыщенным выглядит раздел приложений для программирования. Здесь несколько великолепных сред программирования, позволяющих работать с разными языками, на которые я поглядываю с тоской и завистью, есть системы создания web-сайтов. Свой сайт, в его последней ипостаси, я создавал с помощью этих средств. Особенно заниматься сайтом было некогда, да и сделать его надлежало максимально простым. Он не получился красавцем, весь в меня – страшненький, но работающий. И откуда у меня все это накопилось! Я недавно переустанавливал операционную систему, и все старался установить по минимуму! Не понимаю.


Рис. 1.2. Раздел «Программирование»

И очень мне хочется похвастаться (не могу оказать себе в этом скромном удовольствии) теми возможностями анимации и трехмерного вида рабочих столов, которые есть в последнией версии Fedora Core 6 (сегодня, завтра уже Fedora 7). Когда я устаю работать, но еще не начинаю дремать у телевизора, я включаю все эти красоты и начинаю просматривать почту, новости в мире Linux, форумы, на которых больше читаю, чем пишу, по той простой причине, что едва успеваю прочитать все то полезное, что накапливается за день.

И хочу добавить, что все эти возможности не относятся непосредственно к моему дистрибутиву. Нет. Второй дистрибутив, который стоит у меня на компьютере – это Ubuntu. Я поставил его, чтобы познакомится с его возможностями, а основа дистрибутива помещается на один CD-диск, который я присмотрел, чтобы порекомендовать своему другу в качестве основной операционной системы. Дополнительной будет Mandrake двух-трех летней давности. Так, вот, в Ubuntu все эти красоты работают столь же успешно.


Рис. 1.3. Закрывание домашней папки с поддержкой Beryl

Я бы сказал, что операционная система просто «горит на работе»! И особенно мне этот фокус нравится, когда я закрываю логический раздел диска, где у меня установлен эмулятор Windows для Linux – Wine, закрывая его думаешь: «Вот и сожены мосты!». В разделе несколько «free» и «demo»-программ EDA для Windows, которые я использовал при работе над предыдущей книгой, по завершении работы хотел было снести раздел, но программы мне понравились, и я решил оставить их вместе с Wine на разделе Windows. Собственно, я не противник этой операционой системы, просто дороваты для меня и система, и программы. И поскольку уж зашла об этом речь, все что будет сказанно о конкретных программах, которые я, если получится, напишу в Gambas, а язык стоит того, чтобы постараться, так вот все это можно повторить в Visual Basic, если для кого-то он кажется более подходящим.


Рис. 1.4. Куб рабочих столов с интернет-браузером на одной из граней

Но я совсем отвлекся от рассказа. Красот еще много, так и не доберешься до дела. Запускаем Gambas, который находится в разделе «Программирование» основного меню «Приложения». К слову, я года два использую графическую оболочку Gnome, хотя изредка захожу в KDE, прежде основную рабочую графическую оболочку. Gnome установился по умолчанию, я решил посмотреть, насколько сильно он изменился, да так и остался в нем. Но я опять отвлекся:


Рис. 1.5. Первый запуск среды программирования Gambas

Даже первый запуск, кроме традиционных и необходимых действий, таких как: создать новый проект, открыть существующий, использовать недавно использовавшийся проект, - имеет раздел примеров (Examples). И примеров очень много. Я обязательно хочу ими воспользоваться, когда начну работу над первым проектом. А вот сам проект, все-таки не могу я не «выпендриться», сам проект я возьму из книги М.Мозгового «Занимательное программирование», да простит меня автор, не только потому, что пример сам по себе интересен, но и еще по тому, что автор приводит его в среде программирования Delphi. Я хочу повторить этот пример в качестве первого своего Gambas проекта, что называется «в лоб». В этом я доверюсь автору книги «Занимательное программирование», который не соотносит приведенные им программы с каким-то конкретным языком, и использует Pascal основу системы Delphi, как знакомую многим по студенческим временам. Мне же крайне любопытно, насколько возможно, не умея программировать, повторить программу, написанную на другом языке программирования. Если ничего не получится, брошу пытаться научиться программировать. Или не брошу.
   Я еще подумаю.
   После выбора New project... (создание нового проекта) открывается диалог, в котором можно ввести название проекта, его заголовок, указать место, где проект будет располагаться. Gambas хранит все, что относится к проекту, в заданной директории, которая будет носить назавание проекта. Для перемещения по диалогу достаточно нажимать клавишу «Next», но в самом начале следует выбрать, какого рода проект вы намерены создать. На выбор три варианта – графический проект, терминальный проект, использование копии существующего (вашего или нет) проекта:


Рис. 1.6. Диалоговое окно выбора типа проекта

Меня интересует графический проект, и я оставляю флажок выбора там, где он есть: «Create a graphical project» – знай наших! Многие расчетные задачи, к чему и должен быть применен компьютер по его замыслу, прекрасно можно выполнить в терминале. При этом вы получите программу, которая будет весьма неприхотлива к возможностям компьютера, будет работать, как я себе представляю, без загрузки графической оболочки, а для удобства использования, если вы, как и я, не очень любите набивать множество команд, можно использовать MC – программу (или графический менеджер), который называется «Midnight Commander», чтобы его не путали с «Norton Commander», которого в Linux нет. Вообще я давно «подсел» на графические возможности современных операционных систем, и сегодня, каждодневно обновляя систему, не столько озабочен ее стабильностью, давно уже не замечал каких-либо проблем с этим, не столько радуюсь обновлениям, связанным с вопросами защиты системы, вирусы в Linux не очень свирепствуют, сколько жду перемен в ее внешнем облике. Хотя понимаю, что самое разумное, это использовать всю мощь операционной системы без «графических» тормозов. Но...

Итак. Выбрав графический проект, дав ему имя и место жительства, мы попадаем в среду программирования, которая позволит сделать первый шаг – создать форму. Для этого в правом окне менеджера проекта, где отображается «дерево» проекта, я щелкаю правой клавишей мышки по разделу Forms, а в выпадающем меню выбираю раздел New, что приводит меня к меню выбора, в котором есть пункт Form. Этот процесс я понимаю так – создать новую форму. Форма же, насколько мне известно, а я уже немного «законспектировал» пояснения к языку Gamabs, особенно для моего графического выбора, является основным окном программы, которое появится, когда я заполню форму некоторым содержанием и построю проект. В окне диалога создания формы можно задать имя формы, что важно для средних и больших проектов, содержащих много окон, можно установить ряд опций, назначения которых я пока не понимаю, поэтому не хочу их устанавливать:


Рис. 1.7. Диалоговое окно создания формы в Gambas

Я не готов создавать средние и большие проекты, поэтому оставлю название формы без изменения и поскорее щелкну по клавише OK. В результате появляется форма и редактор программы. На форме, видимо, можно будет разместить разные кнопочки, окошки и другие средства управления программой. А в редакторе поместится все то, что и есть код программы. Следуя совету, прочитанному в книге «Занимательное программирование», я добавлю на форму область рисования (DrawingArea) и клавишу управления (Button). И то, и другое я выбираю на инструментальной панели справа, щелкнув по ним левой клавишей мышки, а затем с помощью мышки «нарисовав» контур окна и клавиши. На рисунке ниже кнопка управления на инструментальной панели изображена с надписью OK, а область рисования имеет внутри пиктограмму, изображающую цветные геометрические фигуры: квадрат, круг, треугольник.


Рис. 1.8. Основная форма проекта и редактор кода

Форма, как и многие элементы управления, имеет свойство Text. Я полагаю, что это текст, который появится вместо надписи Form1.Form при выполнении программы. Этот текст я заменю своим, и, если программа заработает, то увижу его.

После нескольких входов в Gamabas и выходов из него, я сталкиваюсь с маленькой, но для меня очень неприятной особенностью – я не знаю, как вызвать редактор кода. Мне же понадобится что-то вписывать. Я знаю, уже знаю, что двойной щелчок по кнопке управления открывает редактор кода и создает первую и последнюю строку текста события, связанного с щелчком по клавише при работе программы. Двойной щелчок по форме тоже вызывает аналогичное действие. Но это действие мне не нужно, я удаляю ненужный код, а сам прием использую для вызова редактора кода. Но не делать же это всякий раз, когда тебе нужно что-то исправить в программе. Меня это немного раздражает. До тех пор, пока я не догадываюсь щелкнуть по форме правой клавишей мышки. В выпадающем меню есть пункт Code, который вызывает редактор кода и умиротворение в моей душе.

Программа, мой первый «блин комом», выглядит (я скопирую ее, чтобы не наделать ошибок, что я очень люблю делать при переписывании) следующим образом:


Рис. 1.9. Листинг программы из книги М.Мозгового «Занимательное программирование»

Очень советую купить книгу, а я своими словами опишу программу. Представьте себе двумерный закрытый сосуд прямоугольной формы, в котором мечется, не находя себе места, шальная молекула газа. И молекула, и сосуд – все идеально. С точки зрения программы это означает, что молекула при своем движении сохраняет величину скорости, а ее направление меняется только при столкновении со стенками сосуда. Не думаю, что без посторонней помощи я смог бы написать такую программу. Я и не уверен, что без посторонней помощи смогу воспроизвести ее. Но попробую. Первым делом я нарисую, как и собирался, область рисования и кнопку запуска программы на основной (в моем случае единственной) форме. Чтобы изменить название клавиши, после того как она появилась на форме под именем Button1, я выделяю эту клавишу щелчком левой клавиши по ней. Клавиша отрисовывется контуром из нескольких квадратиков, с помощью «таскания» за которые можно менять размеры клавиши. А окно свойств Properties открывается на свойствах клавиши, что можно сразу увидеть по первой строке (Class) – Button. В этом окне свойств есть пункт под названием Text в левой колонке. Если в правой колонке напротив ввести «Старт», то клавиша изменит свое название, видимое на форме. Аналогично я поступлю с областью рисования, которую назову Screen, как в оригинале, но это будет уже не надпись, как на клавише, а, собственно, имя. И меняю я его напротив (Name) в окне свойств после выделения области рисования щелчком левой клавиши мышки по ней.

Теперь можно начать писать код программы (я прочитал в отличие от вас все, что автор говорит о программе). Поскольку программа должна запускаться после нажатия на клавишу «Старт», а в руководстве к Gamabs я нашел, что двойной щелчок по элементам управления вписывает код, который создает заголовок для процедуры, отвечающей на событие – щелчок мышки по клавише управления, я дважды щелкаю по клавише и получаю в редакторе кода первую запись (увы, пока не мою) кода программы. В листинге на рисунке 1.9 аналогичная запись начинается словом procedure, а ниже начинается описание переменных и констант. Не буду фантазировать, открою с разделе помощи пункт означенный «Объявление локальных переменных» и объявлю их, а заодно и константы:

PUBLIC CONST R AS Integer = 10

PUBLIC CONST V AS Integer = 7

PUBLIC SUB Button1_Click()

    DIM X AS Integer

    DIM Y AS Integer

    DIM Vx AS Integer

    DIM Vy AS Integer

    DIM angle AS Float

END

А вот и не заодно. Пришлось константы вынести из подпрограммы, обслуживающей щелчок клавиши «Старт», иначе возникает ошибка при компиляции программы. Осерчав на себя, из-за того, что не понимаю, почему так, я обозначил их PUBLIC, то есть, доступные всем другим классам (так написано в help). Возможно со временем я и пойму, почему и отчего, но пока мне приходит в голову только одно соображение – константа вещь постоянная и ее следует вынести из подпрограммы или процедуры, но это мои фантазии. Лучше продолжим. В листинге первая операция в программе Randomize. Попробуем отыскать аналогичную в описании языка Gamabas:


Рис. 1.10. Подсказка по языку Gambas

Следующий оператор в листинге, если я не ошибаюсь, обновляет область рисования. Для получения этого я воспользуюсь свойством редактора кода – после точки, которую можно поставить после имени объекта, открывается окно свойств и методов объекта. Так построены многие среды разработки программ, так посроена и среда программирования Gambas. Конечно не слишком трудно вписать операторы, методы или свойства, это так, но мне не хочется начинать с опечаток и ошибок в написании текста кода. Поэтому я воспользуюсь возможностями, предоставляемыми хорошо сделанной системой:


Рис. 1.11. Меню методов и свойств объекта

В открывающемся окне я постараюсь найти что-то похожее. И нахожу. Затем, используя оператор Rnd, я повторю записи, сделанные в листинге. Теперь программа выглядит так:

' Gambas class file

PUBLIC CONST R AS Integer = 10

PUBLIC CONST V AS Integer = 7

PUBLIC SUB Button1_Click()

    DIM X AS Integer

    DIM Y AS Integer

    DIM Vx AS Integer

    DIM Vy AS Integer

    DIM angle AS Float

    Randomize ()

    Screen.Refresh

    X = Rnd (R, Screen.Width - R)

    Y = Rnd (R, Screen.Height - R)

    angle = Rnd (0, 360)*Pi/180

    Vx = Round (V*Sin(angle))

    Vy = Round (V*Cos(angle))

END

Теперь осталось вставить цикл. В коде цикла есть несколько записей, которые я не знаю, как выполнить, и пока оставлю программу без них, попробовав ее запустить:

 


Рис. 1.12. Первый запуск незавершенной программы

 

Это не то, конечно, что должно получиться. Первое, что я пока не знаю как сделать, это – стереть молекулу. Или, если быть точным, не знаю как ее нарисовать цветом фона, как это сделано в оригинальном листинге, а позже перерисовать в новой позиции синим цветом. И я не знаю, как сделать паузу, поскольку не нахожу подходящего оператора. Кроме того, я ожидал, что молекула будет меньше, и у меня она, похоже, не круглая. Но с этим, я надеюсь, разобраться будет проще. Поищем ответы на основные вопросы.

Один ответ нашелся быстро: пауза в 10 миллисекунд получается с оператором WAIT 0.01, где число – необходимая длительность паузы. Теперь рисунок образуется не сразу, как прежде, а постепенно. Устранив ошибку, которой я обязан своей невнимательности, и из-за которой не происходило отражения от правой и нижней границ области рисования (в одном месте вместо Y я написал X), и заменив оба параметра размера эллипса радиусом, отчего «молекула» перестала менять размер при движении, я получаю результат близкий к ожидаемому. Но я все еще не умею стирать молекулу. Без этого результат работы программы выглядит примерно так:

 


Рис. 1.13. Запуск программы после устранения ошибок

И, наконец, с помощью операции присваивания объекту рисования цвета формы

Draw.ForeColor = Form.Background

мне удается «стереть» молекулу в начале цикла, а с присвоением синего цвета ближе к концу цикла

Draw.ForeColor = 255

получить то, что я представляю, как программу из книги «Занимательное программирование». Выглядит она в Gambas так:

 

' Gambas class file

PUBLIC CONST R AS Integer = 10

PUBLIC CONST V AS Integer = 7

PUBLIC SUB Button1_Click()

    DIM X AS Integer

    DIM Y AS Integer

    DIM Vx AS Integer

    DIM Vy AS Integer

    DIM angle AS Float

    Randomize ()

    Screen.Refresh

    X = Rnd (R, Screen.Width - R)

    Y = Rnd (R, Screen.Height - R)

    angle = Rnd (0, 360)*Pi/180

    Vx = Round (V*Sin(angle))

    Vy = Round (V*Cos(angle))

    WHILE TRUE

        Draw.Begin (Screen)

        Draw.ForeColor = Form.Background

        Draw.Ellipse (X-R, Y-R, R, R)

        X = X + Vx

        Y = Y + Vy

        IF X > Screen.Width - R THEN

            X = Screen.Width - R

            Vx = -Vx

        ENDIF

        IF X < R THEN

            X = R

            Vx = -Vx

        ENDIF

        IF Y > Screen.Height - R THEN

            Y = Screen.Height - R

            Vy = -Vy

        ENDIF

        IF Y<R THEN

            Y = R

            Vy = -Vy

        ENDIF

    Draw.ForeColor = 255

    Draw.Ellipse (X-R, Y-R, R, R)

    Draw.End

    WAIT 0.01

    WEND

END

 

И выглядит это:

 


Рис. 1.14. Окончательный результат работы программы

Если отбросить некоторые языковые различия, такие, например, как нечто в роде операторных скобок рисования:

    Draw.Begin (Screen)

    Draw.End

и различия в написании, что и должно было иметь место, то в остальном код программы действительно переписан «в лоб». Следовательно, предположение, что можно на протяжении книги использовать другую среду программирования, достаточно хорошо подтверждается. А сама среда программирования, по крайней мере для небольших проектов, работает не хуже, чем Delphi. Так что, надеюсь, к концу книги, хотя программистом я и не стану, но немного программировать научусь.

А сейчас, я вспомнил, что хотел посмотреть раздел примеров в Gambas. Вот и посмотрю. Но прежде хочу добавить в программу, то что предлагает ее автор в самомом начале разговора о кодировании прогрммы – добавить возможность останавливать программу не принудительно с помощью средств разработки, нажимая на красную клавишу «Стоп» основного меню, а использовать ту же кнопку управления, что уже есть на форме. В этом случае начало программы в Gambas выглядит так:

 

' Gambas class file

PUBLIC CONST R AS Integer = 10

PUBLIC CONST V AS Integer = 7

PUBLIC Running AS Boolean

PUBLIC SUB Button1_Click()

    DIM X AS Integer

    DIM Y AS Integer

    DIM Vx AS Integer

    DIM Vy AS Integer

    DIM angle AS Float

    IF Running THEN

        Running = FALSE

        QUIT

    ENDIF

    Button1.Text = "СТОП"

    Running = TRUE

Далее программа остается без изменения. Так, действительно, удобнее. А примеры, которые есть в Gambas заставляют меня тихо завидовать тем, кто умеет так программировать.

 

 

Рис. 1.15. Пример работы программы из раздела Examples системы Gambas

 

Часы не только ходят после запуска программы, но и показывают правильное время. Что ж, будем учиться.

Компьютер может помочь с программированием

Во всяком случае, так говорят знающие люди. И они же говорят, что программирование – это не написание самой программы, то есть, кода программы на каком-либо языке программирования. Программа – это в первую очередь описание того, что должно происходить с того момента, как программа запущена. Для этого предварительного описания можно использовать, как мне кажется, обычный язык. В одной из книг, которые я сейчас просматриваю, пытаясь научиться программировать, говорится о псевдо-языке программирования, с помощью которого можно описать программу. А на моем компьютере есть программа Umbrello, назначение которой мне давно хотелось понять. У меня эта программа в разделе «Программирование» основного меню «Приложения». Запустить программу не составляет труда – это я уже освоил. И руководство в разделе «Справка» основного меню, то, что сейчас надо.

 


Рис. 1.16. Программа Umbrello

 

На рисунке можно разглядеть, что Umbrello помогает в процессе разработки программного обеспечения. Это-то мне и нужно. Ничто так ни важно для начинающего, как помощь на первом этапе освоения нового.

Руководство к программе русифицировано, как и сама программа, и против своего обыкновения, надеюсь вы лишены этого недостатка, прежде, чем начать пользоваться программой, я попробую прочитать руководство. Отдельные моменты, чтобы вам не искать, процитирую. Например, вот это:

 

Umbrello UML Modeller — это средство для работы с диаграммами UML, которое может быть полезным в процессе разработки программного обеспечения, особенно на стадиях анализа и проектирования...

Хорошая модель очень важна для средних и больших проектов, но также будет полезна и для небольших проектов. Даже если вы один работаете над маленьким проектом, хорошая модель предоставит вам общую картину разработки, что поможет вам сразу написать качественный код.

UML является языком диаграмм, используемым для описания таких моделей. Вы можете выражать свои идеи в UML с помощью различных типов диаграмм...

Унифицированный язык моделирования (UML) является языком диаграмм или обозначений для спецификации, визуализации и документации модели объектно-ориентированных программных систем. UML не является методом разработки, то есть он не определяет последовательность действий при разработке программного обеспечения. Он помогает описать свою идею и взаимодействовать с другими разработчиками системы.

 

У меня проект маленький. И других разработчиков не предвидится, но это и не обязательно. Первое, что мне хочется сделать, иначе трудно будет разбираться с программой позже, это привести руководство в соответствие с имеющейся у меня версией. Руководство, видимо, написано для предыдущей версии, и, хотя принципиальных различий может не быть, детали, пока не освоился, тоже могут помешать пониманию. Для себя я запишу соответствие названий диаграмм в руководстве и моей версии:

 

Диаграмма класса - Диаграмма класса

Диаграмма последовательности - Диаграмма последовательности

Диаграмма взаимодействий - Диаграмма отношений сущностей

Диаграмма вариантов использования - Диаграмма прецедентов

Диаграмма состояний - Диаграмма состояний

Диаграмма действий - Диаграмма деятельности

Диаграмма компонентов - Диаграмма компонентов

Диаграмма выпуска - Диаграмма развертки

 

Есть еще в моей версии «Диаграмма кооперации», но куда ее приткнуть? Почитаем.

В руководстве часто упоминается слово «класс». Запишу-ка я, что это значит:

 

Класс определяет атрибуты и методы набора объектов. Все объекты класса (называемые экземплярами) имеют одинаковое поведение и одинаковый набор атрибутов (у каждого объекта - собственный набор атрибутов). Иногда вместо класса используется термин «Тип», но важно понимать, что эти термины неодинаковы. Термин «Тип» имеет более общий смысл.

 

Примеры использования диаграмм в руководстве есть. Пора и нарисовать что-нибудь. Но я на свет, конечно, не вчера родился. Знаю, что первый шаг в любом деле, определение цели. Это потом можно подумать, как достичь намеченного. А моя цель сейчас – разобраться со схемой, которая не желает работать. Сразу разобраться со всей схемой я не осилю, поэтому постараюсь сделать из проблемы маленькую, но чем-то похожую, задачку.

Пусть будет такая маленькая задачка: есть цифровой счетчик с предустановкой и сменой направления счета, как его проверить? Я пытался посмотреть сигналы осциллографом, но ничего не получилось. Не пойму, работает счетчик, нет; может микросхема плохая попалась, или я ее успел «сжечь». Изобразим счетчик.

 


Рис. 1.17. Двоичный реверсивный счетчик с предустановкой

 

Специалисту ясно, что данные для записи следует подать на входы D0-D3, а перепись данных осуществится при низком уровне на входе V, для прямого отсчета служит вход +1, фронт от низкого состояния к высокому, и т.д. Вход, который не используется при подключении к тактовому генератору, это я прочитал в книге В.Л. Шило «Популярные цифровые микросхемы», много раз она меня выручала, неиспользуемый вход направления счета следует установить в высокое состояние.

Собственно, я пытался проверить это на макетной плате, но с одним генератором и осциллографом... Вот и хочу я, чтобы компьютер заменил мне и все нужные генераторы, и числа для предустановки задавал, и... и потом еще придумаю, чтобы он такое делал.

Безусловно, я понимаю, что сам компьютер не догадается помочь мне, пока не попросишь его с помощью программы. Придется попросить. Для начала нарисую, как я буду работать с программой. Это только первые соображения.

 


Рис. 1.18. Первые соображения о том, что следует делать

 

Меня можно спросить, почему «меня» так много на рисунке? Отвечу, так сложилось исторически. Меня можно спросить, а как компьютер будет «общаться» с макетной платой? Отвечу – это провокация, на каверзные вопросы не отвечаю!

Очень часто устройства, добавляемые к компьютеру, подключают к его шине внешних устройств, но я не намерен разбирать компьютер. Очень часто внешние устройства подключают к порту принтера. Такое подключение обеспечивает достаточно быстрый обмен информацией между компьютером и подключенным устройством, дает возможность, переделав программу, привести характер работы порта в соответствие с текущей необходимостью, однако я предпочитаю поступить иначе. Мне нет необходимости в быстром обмене информацией, скорее, наоборот. Использование порта принтера потребует его защиты от случайного повреждения, то есть, необходимости что-то спаять. Не то, чтобы паять я не умел, но если паять, то нечто нужное неоднократно.

В предыдущей серии экспериментов я использовал последовательный порт компьютера, и у меня остался интерфейс RS485 и макетная плата с панелькой для микроконтроллера. Пусть микроконтроллер обслуживает проверяемую схему, а с компьютера будут отправляться команды микроконтроллеру.

Есть несколько соображений в пользу такого решения. Первое из них – мне хочется рассказать о программе Piklab больше, чем я это сделал в прошлый раз. Программа работает с PIC-микроконтроллерами в Linux, как MPLAB в среде Windows. И если о работе MPLAB я уже рассказывал, то о Piklab, скорее, упоминал.

Кроме того, задумав сделать из компьютера нечто в роде испытательного стенда, я подумал о том, что не всегда у меня будет желание переносить его к рабочему столоу, на котором у меня разложены макетная плата, лабораторный блок питания и прочие аксессуары «железячного» бытия. Бросить же на время экспериментов от компьютера к макету тонкий и легкий четырех-жильный телефонный провод можно просто по полу через все помещение.

Но самым существенным аргументом для меня в подобном решении будет один – если мне понадобится посмотреть осциллографом сигналы, то мне понадобятся короткие и «жесткие» относительно периодичесности последовательности импульсов. Микроконтроллер справится с этой задачей лучше компьютера. И в этом смысле, если я не ошибаюсь, а если ошибаюсь пусть опытные программисты меня поправят, я буду использовать программу, работающую на компьютере, в основном в качестве удобного графического интерфейса пользователя. А вся аппаратная часть задачи будет реализована на макетной плате, возглавляемой микроконтроллером. Но это пока мечты.

Если запускаешь программу, то обычно открывается окно, где сверху есть меню, а в окне можно писать, или рисовать, или что-то строить. Мне строить еще рано, а на первых порах нужно только одно маленькое окошко и одну-две кнопки. В окошко я собираюсь вписывать число для предустановки, одна кнопка мне нужна для установки этого числа на выводы микросхемы, вторая кнопка для переписи числа и начала счета.

После этого программа должна заставить компьютер осчастливить меня в качестве генератора всех необходимых мне сигналов. Сильно подозреваю, что если я положу макетную плату на компьютер, то она не найдет общего языка с ним. Придется что-то еще добавить. Скорее всего выглядеть моя задумка будет как-нибудь так:

 


Рис. 1.19. Окончательные соображения перед началом программирования

 

Я люблю рисовать квадратики, кружочки, рожицы, когда пытаюсь сообразить, что же делать дальше. Я понимаю, что программа Umbrello не для того предназначена, но я еще вернусь к ней. А сейчас у меня план такой – познакомиться с таинственными сущностями, что окружают программиста.
                                                                                                                                                       To start

next

 

 

http://www.narod.ru/counter.xhtml




Hosted by
              uCoz