Вопросы нучинаюшего программиста ...Duino
- Войдите на сайт для отправки комментариев
Втр, 12/04/2011 - 22:38
Только-толко начинаю разбираться с программированием.
Было бы это быстрее, если бы кто-то рядом мог давать ответы на имеющиеся вопросы!
Например:
Как понять структуру языка?
Понимаю, что она похажа на С++, но если яс языками совсем не знаком?
Где найти начальные азы, подходящие для этого проекта, без темных дебрей "взрослых" языков пронраммирования?
Похож он на С скорее, чем на С++, хотя все одного поля ягоды. Почитай для начала http://arduino.ru/Reference там вверху есть базовые сведения, о переменных, функциях, входах.
О переменных, фенкциях и пр.. уже начитался. Но что с ними делать видел только в примерах.
О входах и выходах в цифровой электронике электронике на ТЫ.
Что бы вложить свою идею в код - этого совершенно не достаточно.
Я так понимаю, что надо как-то научиться на нем "разговаривать" по каким-то общим правилам...
Всем начинающим программистам и не программистам вовсе посвящается :) Штуковина ещё недоделана, но смысл понять можно.
как раз сейчас переделали сайт и не всё у них там работает.
modk.it
Незнаю всплывал это ресурс на форуме или нет, но штука очень полезная для начинающих.
Это визуальная(drag and drop) оболочка для языка высокого уровня processing.
Beer100 я подозреваю что вы человек уже зрелый и тут нужно наверное подходить к изучению языка на примерах , их к стате примного множество.
Вот книженция если ещё не нашёл блокнот программиста arduino на русском написана помоему довольно ясно и за день будем ждать первый код в студию )))) желаю успехов, ничего сложного в данном языке нет.
Кидай код какогонибудь примера и задавай вопросы что не понятно как работает. Лучше разбираться на примерах. Я в программировании ваще ламер, но благодаря примерам и этому форуму за неделю разобрался, конечно со сложными алгаритмами еще не смогу сам но все же понятие уже сложилось.
Полная каша в голове!
В "блокноте программиста" написано: После вызова функции setup() – управление переходит к функции loop()
В "Справочник языка Ардуино" на этом сайте, в списках функций указаны совершенно другие вещи! А setap и loop - это оказывается операторы...
Если мне не изменяет память то функции setup(); и loop(); являются также операторами .... и могут вызываться только один раз. Т.е. в отличии от любой другой функции эти не могут быть прописаны несколько раз в то время как например функция delay(); может хоть 100раз быть вызвана..
Вы это воспринимайте как должное тоесть любая структура вашей программы будет выглядеть как
void setup(); {} void loop(); {} все что в сетап выполнится один раз а все что в loop будет постоянно выполняться.Похоже , что я в той же песочнице , что и Beer100. Все прочитал , понимаю , если вижу пример, а выразить свою идею в скетче не могу.
Подскажите плз на примере : алгоритм как работает в реальном программа ? Не улавливаю : запустили loop и дальше все входы опрашиваются , проходят через множественные и или while проч. и цикл завершается переполнением какого-то таймера ? Это программа работает , скажем, 2 секунды , потом начинает сначала ? Или как : части программы вступают в работу при наступлении события , а в это время другие части програмы останавливаются ? Уверен , что вопрос ужасен. Тяжеловато без учителя. Заранее благодарю.
Если коротко, то в самом начале скетч выполняет один раз все, что внутри setup. Затем попадает в секцию loop, которую бесконечно начинает пробегать сверху вниз в цикле. Поэтому важно понимать
- все, что написано в loop будет пройдено много много много раз. Тут вы проверяете состояние кнопок, датчиков и управляете всем чем можно.
Например, ты ждешь нажатие кнопки, т.е. ты If-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка ..........................
- следить, чтобы не возникало закливаний внутри, ну то есть ты создаешь цикл с условием выхода, который никогда не наступит внутри этого цикла. Цикл тут я имею ввиду While, а НЕ loop.
Ну вот например. просто:
у нас есть два светодиода. И мы хотим переключать эти светодиоды по принципу :
ни один не горит.
Затем нажали кнопку загорелся первый
затем повторное нажатие - первый потух, второй загорелся
на третьем нажатии опять все потухли.
ВОт тут есть много реализаций кода... НО алгоритм один
в секции setup прописываем выходы арды на светоиоды и один вход арды для кнопки. До setupa нужно прописать все переменные (декларировать), видел даже гдето и в setupe прописывают (есть локальные есть глобальные, но другая тема), возможно кроме этого сделать какието дополнительные установки. ПРоще говоря секция сетуп - это опциональная секция, где мы обозначаем какието настройки ардуины. Если бы небыло setup нам бы пришлось писать довольно много кода а так мы просто там вставляем строчку которая устанавливает тот или иной порт арды в то или иное положение.
А вот сама программа - назовем ее так- уже пишется в секции loop - эта секция имеет свойство цикличности, и остановить ее на некоторое время можно только delay. Так вот в этой секции строки кода читаются постоянно но выполняются только если все условия истинны (тут канечно не оч правильно выражаюсь но может так проще будет). Например у нас есть условие +++ если нажата кнопка то к переменной A прибавить 1. вот и предположим что кнопка не нажата - соответственно 1 не плюсуется. Ну и тут мы нажали кнопку и приплюсовали 1 к переменной. Но у нас есть еще одно условие например если А=1 то моргать светодиодом. Если A=2 то моргать другим светодиодом.
так вот суть "лупы" в том что после выполнения одного условия второе выполняется не зависимо от истинности первого (както так чтоли) постоянно. Соответственно чтобы вырубить нужно еще одно условие - например если время от первого нажатия до второго превысило 100сек то вырубить все светодиоды.
Вот так как то вобщем
Всем ПРИВЕТ!!!!! Уже как месяц у меня есть arduino. Путём экспериментов и курения форумов быстро освоил это устройство. Я очень доволен. Программировать для arduino очень легко. Вот быстро набросал код на примере "Nikelbak"
//Всё просто. Перд setup обевляем переменные и библиотеки если надо. int p=0; void setup() { //В setup указываем как работают порты. pinMode(11,OUTPUT); //свето диод2 pinMode(12,INPUT); //кнопка pinMode(13, OUTPUT); //свето диод1 Serial.begin(9600); } void loop() //В loop сам код который должен вополняться. И самое главное надо не забывать что код не останавливается. Он в бесконечном цикле. { if (digitalRead(12)==HIGH&&p==0) { digitalWrite(13,HIGH); p=1; delay(1000); } if(digitalRead(12)==HIGH&&p==1) { digitalWrite(11,HIGH); digitalWrite(13,LOW); p=2; delay(1000); } if(digitalRead(12)==HIGH&&p==2) { digitalWrite(13,LOW); digitalWrite(11,LOW); p=0; delay(1000); } }[Добавлено от модератора] Исходный код удобно вставлять кнопочкой с красными скобочками и подписью code. Тогда будет выглядеть так, как это выглядит сейчас, после модерации.
Мы начали размещать базовые примеры работы с Arduino.
Первый пример - работа со светодиодом.
Завтра постараюсь выложить пример работы с кнопкой.
to LEVV2006 - спосибо что подсабил, а то самому лень было писать.))) Сразу пример реализации алгоритма, ты его проверял?
Спасибо всем кто откликнулся. Вобщем-то так, примерно, себе и представлял. Посокльку по образованию я судовой электромеханик ( с электроникой знаком , но на релейно , транзисторном , герконовом уровне ), то логические цепи выстраивать приходилось.
Просто подспудно в голове сидела ( и не укладывалась) мысль - это же сколько надо памяти , чтобы обрабатывать офигенное логическое дерево , если , к примеру , у тебя десяток входов от датчиков и множественные выходы на : два движка, серва, LCD, LED, звук + взаимодействие с другим МК ил ПК или монго чего еще.
Думаю , что проштудировав примеры, многие вопросы отпадут сами.
Выложили пример подключения кнопки к Arduino.
to Nikelbak Да. У меня был немного другой рабочий проект. И оттуда вытащил необходимые строки и кое что модернизировал и переработал по ходу дела.
Тут выложена библиотека, обеспечивающая 8-битный SPI в Arduino. А есть библиотека, которая позволит реализовывать 16-битную передачу и приём данных?