первые шаги чайника

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

обьясниет в чем разница строк

1) int brightness = 0; // уставливаем начально значение яркости

2) int ledPin=13; // оброщение к 13 ноге контроллера

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

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Следовало бы сделать счетчик int step;, присвоить ему нулевое значение, затем инкремент, и использовать значение этого счетчика в названии: тогда мы легко и просто будем видеть все "шаги чайника" подряд, а не только первые...

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

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

 все равно я не понял:)  int brightness = 0; - здесь получается что  brightness присваевается значение "0"...

а в int ledPin=13; - даем название 13 ножке контроллера название ledPin...

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

в чем разница кода :

#define SPEED_LEFT 6

или

int SPEED_LEFT = 6

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

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

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

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

 а) int inPin = 7; // кнопки подключены к цифровой pin 7

 б) int val = 0; // переменная для хранения 

step962
Offline
Зарегистрирован: 23.05.2011

В одной банке - мед, а в другой ... ну как бы это помягче ... ну, в общем объект для аналитической лаборатории.

Надо ли вам объяснять, как это так получается - банки одни и те же, а эффект разный?

Вот и с переменными так же.

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

в примере есть такие строчки:

void setup()
{
// Настраивает выводы платы 4,5,6,7 на вывод сигналов
for(int i = 5; i <= 8; i++)
pinMode(i, OUTPUT);
}

может быть правильно на писать? :

for(int i = 4; i <= 7; i++)
 

ich
Offline
Зарегистрирован: 10.06.2012

Evgenii пишет:

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

 а) int inPin = 7; // кнопки подключены к цифровой pin 7

 б) int val = 0; // переменная для хранения 

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

Допустим: inPin это розовая ваза а val синяя, так вот Вы сами решаете что в какой вазе будет храниться и как использоваться.

Так как я, как и многие сдесь, не ясно видящий и немогу знать что у Вас за код идёт далее попробую наглядно объяснить таким оброзом.

// Вариант А
void setup(){
  int inPin = 7;
  int val = 0;
  

  Serial.begin(9600);

  Serial.printn(val); // аналагично Serial.println(0)

  pinMode(inPin, INPUT); // аналагично punMode(7, INPUT)
  val = digitalRead(inPin); // аналагично digitalRead(7)

  Serial.println(val); // аналагично Serial.println(digitalRead(7))
}

// Вариант Б
void setup(){
  int inPin = 7;
  int val = 0;

  Serial.begin(9600);

  Serial.printn(inPin ); // аналагично Serial.println(7)

  pinMode(val, INPUT); // аналагично punMode(0, INPUT)
  inPin = digitalRead(val); // аналагично digitalRead(0)

  Serial.println(inPin ); // аналагично Serial.println(digitalRead(0))
}

Что же происходит, в варианте А я создал какието две переменный "не важно как они называются" и пользуюсь ими следующим оброзом: первую переменную я захотел использовать для указания порта, а вторую я предумал для сахранение в неё состояния порта который указан с помощью первой переменной.

Т.е. в премере А я работаю с 7 портом Arduin(ки) а в примере Б с 0 портом.

Крутити как хотите ведь это обыкновенные переменные как и в любой математической формуле.

x = 5;

y = 2;

z = x + y;

Тоже самое что и

z = 5 + 2;

Тоже самое

i = 1;

z = i+i+i+i+i+y;

Тоже самое что

z = 7;

Вам бы сначало азы програмирования по учить.

ich
Offline
Зарегистрирован: 10.06.2012

Evgenii пишет:

в примере есть такие строчки:

void setup()
{
// Настраивает выводы платы 4,5,6,7 на вывод сигналов
for(int i = 5; i <= 8; i++)
pinMode(i, OUTPUT);
}

может быть правильно на писать? :

for(int i = 4; i <= 7; i++)
 

Да Вы правы.

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

ich,  я читаю, пытаюсь в никать, но я только в самом начале пути... спасибо за обьяснение на пальцах, теперь мне более понятно стало:)

еще пару вопросов:

1) оптимезация кода, одно и тоже задание, разные програмисты решают совершенно по разному, получается нету оптимального решения, кто как может так и пишет скетчи?

2) почему мало проектов на 2-х, 3-х, и т.п. ардуино? счем это связанно?

3) как лучше оргонизовать обмен и работу 2-х ардуин совместно? ( планирую 1ардуина работает с моторами , 2 ардуина работает с датчиками и является мастером)

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>1) оптимезация кода, одно и тоже задание, разные програмисты решают совершенно по разному, получается нету оптимального решения, кто как может так и пишет скетчи?<<

Вариантов решения задачи , почти всегда несколько. Отсюда и разные решения.

>>2) почему мало проектов на 2-х, 3-х, и т.п. ардуино? счем это связанно?<<

Если не хватает ресурсов одного МК то можно сваять два и раскидать функции между ними, а можно взять другой МК ресурсы которого в разы больше.

>>3) как лучше оргонизовать обмен и работу 2-х ардуин совместно? ( планирую 1ардуина работает с моторами , 2 ардуина работает с датчиками и является мастером)<<

Объясните смысл сего действия. С этой задачей вполне справится любой дуино подобный МК (при том ОДИН).

 

 

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

Две ардуино не из за рационализма, а желания выполнить проектик именно на нескольких ардуинках...

 

ich
Offline
Зарегистрирован: 10.06.2012

1. Оптимальный код, это когда хорошо читаемо, не гадит в памяти и не грузит процессор лишними "безсмысленными" операциями, ну и естественно справляется со своей задачей. А на одну и ту же программу может быть множество оптимальных вариантов. Как говориться "всё можно улучшить, знать бы как". Это моё личное мнение, возможно гуру меня поправят.

2. С тем что Arduino это ничего другого как Микроконтроллер, а проектов по общению между ардуиной и другими контролерами имеется порядком. Да и 2-Ардуино тоже не редкость. 1 , 2, 3, и т.д

3. Зависит от ваших желаний и способностей. Я тоже не супер асс в ардуино "только учусь", но так слёту могу предложить SPI, I2C. Настаящие експерты возможно знают ещё парачку трюков. Ах да можно вообще тупо в первой ардуине digitalWrite а в другой digitalRead и придумать свой протокол

Коточе всё возможно, дерзайте!

ich
Offline
Зарегистрирован: 10.06.2012

Кхе не успел , уже ответили

Evgenii
Evgenii аватар
Offline
Зарегистрирован: 30.07.2012

вопрос на засыпку, не кто не юзал платку Wild Thumper Controller ? не могу по ней нарыть инфы, восновном все англ.язычное

 

leshak
Offline
Зарегистрирован: 29.09.2011

Оптимальный код - полностью субъективная вещь. Это же "выражение мысли". И дальше как у писателей. Кто-то красиво пишет, кто-то нет. Есть "талант", но есть и рутинные приемы (скорее "стиль") которые позволяют писать хороший код.

http://commencer.ru/biblioteka/programming-book/385-idealniy-code

Есть инструменты которые позволяют следить выполняются ли некоторые "договоренности" при написании.

Есть и противоположный взгял - что "идеальный код" вообще зло http://habrahabr.ru/post/129171/

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

>но так слёту могу предложить SPII2C

Забыли еще банальный Serial :)