Вопросы нучинаюшего программиста ...Duino

Beer100
Offline
Зарегистрирован: 12.04.2011

Только-толко начинаю разбираться с программированием.

Было бы это быстрее, если бы кто-то рядом мог давать ответы на имеющиеся вопросы!

Например:

Как понять структуру языка?

Понимаю, что она похажа на С++, но если яс языками совсем не знаком?

Где найти начальные азы, подходящие для этого проекта, без темных дебрей "взрослых" языков пронраммирования?

Zaliv
Offline
Зарегистрирован: 05.03.2011

Похож он на С скорее, чем на С++, хотя все одного поля ягоды. Почитай для начала http://arduino.ru/Reference там вверху есть базовые сведения, о переменных, функциях, входах. 

Beer100
Offline
Зарегистрирован: 12.04.2011

О переменных, фенкциях и пр.. уже начитался. Но что с ними делать видел только в примерах.

О входах и выходах в цифровой электронике электронике на ТЫ.

Что бы вложить свою идею в код - этого совершенно не достаточно.

Я так понимаю, что надо как-то научиться на нем "разговаривать" по каким-то общим правилам... 

icms
Offline
Зарегистрирован: 22.03.2011

Всем начинающим программистам и не программистам вовсе посвящается :) Штуковина ещё недоделана, но смысл понять можно.

как раз сейчас переделали сайт и не всё у них там работает.

modk.it 

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

Это визуальная(drag and drop) оболочка для языка высокого уровня processing. 

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

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

 

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

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

Beer100
Offline
Зарегистрирован: 12.04.2011

Полная каша в голове!

В  "блокноте программиста" написано:  После вызова функции setup() – управление переходит к функции loop()

В "Справочник языка Ардуино" на этом сайте, в списках функций указаны совершенно другие вещи! А setap и loop - это оказывается операторы...

 

 

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

 Если мне не изменяет память то функции setup(); и loop(); являются также операторами .... и могут вызываться только один раз. Т.е. в отличии от любой другой функции эти не могут быть прописаны несколько раз в то время как например функция delay(); может хоть 100раз быть вызвана..

Вы это воспринимайте как должное тоесть любая структура вашей программы будет выглядеть как

void setup();
{}

void loop();
{}

все что в сетап выполнится один раз а все что в loop будет постоянно выполняться. 

 

Broker
Offline
Зарегистрирован: 15.04.2011

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

Подскажите плз на примере : алгоритм как работает в реальном программа  ? Не улавливаю : запустили loop и дальше все входы опрашиваются , проходят через множественные и или while  проч. и цикл завершается  переполнением какого-то таймера ? Это программа работает , скажем, 2 секунды , потом начинает сначала ? Или как : части программы вступают в работу при наступлении события , а  в это время другие части програмы останавливаются ? Уверен , что вопрос ужасен. Тяжеловато без учителя. Заранее благодарю.

Modular
Offline
Зарегистрирован: 05.03.2011

Если коротко, то в самом начале скетч выполняет один раз все, что внутри setup. Затем попадает в секцию loop, которую бесконечно начинает пробегать сверху вниз в цикле. Поэтому важно понимать
- все, что написано в loop будет пройдено много много много раз. Тут вы проверяете состояние кнопок, датчиков и управляете всем чем можно.
Например, ты ждешь нажатие кнопки, т.е. ты If-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка, далее программа добегает до конца loop, и начинает сверху и ты if-ом проверяешь не нажата ли кнопка ..........................
- следить, чтобы не возникало закливаний внутри, ну то есть ты создаешь цикл с условием выхода, который никогда не наступит внутри этого цикла. Цикл тут я имею ввиду While, а НЕ loop.

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

 Ну вот например. просто:

у нас есть два светодиода. И мы хотим переключать эти светодиоды по принципу :

ни один не горит.

Затем нажали кнопку загорелся первый

затем повторное нажатие - первый потух, второй загорелся

на третьем нажатии опять все потухли.

ВОт тут есть много реализаций кода... НО алгоритм один

в секции setup прописываем выходы арды на светоиоды и один вход арды для кнопки. До setupa нужно прописать все переменные (декларировать), видел даже гдето и в setupe прописывают (есть локальные есть глобальные, но другая тема), возможно кроме этого сделать какието дополнительные установки. ПРоще говоря секция сетуп - это опциональная секция, где мы обозначаем какието настройки ардуины. Если бы небыло setup нам бы пришлось писать довольно много кода а так мы просто там вставляем строчку которая устанавливает тот или иной порт арды в то или иное положение.

 

А вот сама программа - назовем ее так- уже пишется в секции loop - эта секция имеет свойство цикличности, и остановить ее на некоторое время можно только delay. Так вот в этой секции строки кода читаются постоянно но выполняются только если все условия истинны (тут канечно не оч правильно выражаюсь но может так проще будет). Например у нас есть условие +++ если нажата кнопка то к переменной A прибавить 1. вот и предположим что кнопка не нажата - соответственно 1 не плюсуется. Ну и тут мы нажали кнопку и приплюсовали 1 к переменной. Но у нас есть еще одно условие например если А=1 то моргать светодиодом. Если A=2 то моргать другим светодиодом.

так вот суть "лупы" в том что после выполнения одного условия второе выполняется не зависимо от истинности первого (както так чтоли) постоянно. Соответственно чтобы вырубить нужно еще одно условие - например если время от первого нажатия до второго превысило 100сек то вырубить все светодиоды.

Вот так как то вобщем

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

 Всем ПРИВЕТ!!!!! Уже как месяц у меня есть 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. Тогда будет выглядеть так, как это выглядит сейчас, после модерации.

 

Alexander
Offline
Зарегистрирован: 25.04.2010

Мы начали размещать базовые примеры работы с Arduino.

Первый пример - работа со светодиодом.

Завтра постараюсь выложить пример работы с кнопкой.

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

to LEVV2006 - спосибо что подсабил, а то самому лень было писать.))) Сразу пример реализации алгоритма, ты его проверял? 

Broker
Offline
Зарегистрирован: 15.04.2011

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

Просто подспудно в голове сидела ( и не укладывалась) мысль - это же сколько надо памяти , чтобы  обрабатывать офигенное логическое дерево , если  , к примеру , у тебя десяток входов от датчиков и множественные выходы на : два движка, серва, LCD, LED, звук + взаимодействие с другим МК ил ПК или монго чего еще.  

Думаю , что проштудировав примеры, многие вопросы отпадут сами. 

 

 

Alexander
Offline
Зарегистрирован: 25.04.2010

Выложили пример подключения кнопки к Arduino.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

to Nikelbak Да. У меня был немного другой рабочий проект. И оттуда вытащил необходимые строки и кое что модернизировал и переработал по ходу дела.

 

 

 

Koldune
Offline
Зарегистрирован: 07.04.2011

Тут выложена библиотека, обеспечивающая 8-битный SPI в Arduino. А есть библиотека, которая позволит реализовывать 16-битную передачу и приём данных?