Датчик препятствий и серво(бесполезная коробка)

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

возможен. while назывется. почитали бы Вы уже основы.

Гриша
Offline
Зарегистрирован: 27.04.2014
int k=0;

void KorobkaUbegaet ()

{

пишем код управления ногами коробки;

int k=0;

}

void loop

{

if (тумблер == 1) { relax; }

if (тумблер == 0 &&  серва померла) { оживляем серву;}

if (тумблер == 0 &&  серва жива) 

    {

     сомтрим IR;

    if (ir==1) {серва стоит;}

   else   { серва летит;}

   k=1;

    }

if (k==1) { KorobkaUbegaet ();}
}

 

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Да, но с другим названием:   while

http://arduino.ru/Reference/While

Гриша
Offline
Зарегистрирован: 27.04.2014

JollyBiber пишет:

возможен. while назывется. почитали бы Вы уже основы.

есть 2 пути.... спросить и почитать.... на этом форуме у многих ТС стимул пропадает после слова нуб... karl2233 еще держится :) может и научится... а остальные чаще просто пропадают (канут в Лету)

karl2233
Offline
Зарегистрирован: 05.07.2015

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

а за советы и подсказки - спасибо.

когда читаешь, то многое не понятно - прочёл(кроме этого форума, раздел "программирование") ещё две книжки, третью дочитываю. 

но, пля, как же бестолково написаны эти книжки! конечно это лучше чем ничего, но "Основы педагогики" авторам этих книг не помешалоб хотя бы в руках подержать.

смотрю на примеры, повторяю их. пытаюсь воткнуть в свою коробку смотрю чё не так, потом по новой ))))

полученная инфа из книг и форума расчитана на чела имеющего понятия о программировании несколько выше моего. плюс к этому разница в работе мозга - у меня с логикой всё ОК, образование и опыт электронщика... но программирование это нечто другое чем даже формальная логика (на которой я кстати, первую свою коробку и собрал - это нечто - 12 корпусов микросхем).

какя-то смесь иностранного(машинного) языка и хрен пойми чего ещё =) а у меня этого нет(

поэтому возникают вопросы.

вот типичный пример(нашел тут):

byte tsop = 11;   //tsop 
byte irLed = 10;  //ик-светодиод  
byte Led = 13;   //осветодиод(L) на плате 
byte i;     // счётчик 
byte num=20; //число периодов несущей 38кГц в посылаемом пакете 
byte impulse=10;  // длительность полупериода 
byte val, old_val;   //переменная для хранения сигнала с ИК приемника 

void setup()  
{ 
  pinMode (irLed, OUTPUT); // разъём 10 на вывод 
  pinMode(Led, OUTPUT);   //разъём 13 на вывод 
  pinMode(tsop, INPUT);   // разъём 11 на ввод 
  Serial.begin(115200); 
} 

void loop() 
{ 
  for(i=0; i<num; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(impulse); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(impulse-1); //выравниваем скважность 
  } 
   
 val=digitalRead(tsop);//Прочитать показания датчика 
 if (val==old_val)     //сравнить показания с предидущей посылкой 
 { 
  digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод 
  if (val==LOW)   delay(300); //время свечения светодиода (L) при срабатывании 
 } 
old_val=val; 
}

это подходяще мне, но непонятно:

1. как задали частоту?

2. что считает счётчк (строка 4)?

3. строка 24 - как работает?

4. строка 28 - подробнее бы?

5. почему вместо int применили byte вроде понятно - места меньше занимает, но почумуж тв других случаях так не поступают?

и для получения ответов есть три пути - на том форуме спросить автора (это регистрация на ЕЩЁ(!) одном формуме; спросить тут(вроде тематический форум); разбираться самому и спрашивать(где?).

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

и эти вопросы вызвала только одна бесполезная коробка! )))))))))

уоттак.

но... война - фигня, главное - манёвры!

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

 

Гриша
Offline
Зарегистрирован: 27.04.2014

trembo пишет:

Да, но с другим названием:   while

http://arduino.ru/Reference/While

while как и goto очень плохие для начинающего, ИМХО, лучше вообще их не трогать без необходимости...

ИМХО, пост 52 в нем есть все! (для начинающего)

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Для начинающего в принципе все команды плохи. Лучше веники плести.

goto - отстой,

while - вполне себе приличная команда

Гриша
Offline
Зарегистрирован: 27.04.2014

JollyBiber пишет:

goto - отстой,

while - вполне себе приличная команда

согласен, но учиться нужно с простого blink (на пример). можно выучить вообще весь справочник, НО, "не поняв первого слова говорить сразу предложениями..." лучше if и for изучить сперва, а когда их возможностей будет не хватать постепенно добавлять что-то новое...

Гриша
Offline
Зарегистрирован: 27.04.2014

Гриша пишет:

JollyBiber пишет:

goto - отстой,

while - вполне себе приличная команда

согласен, но учиться нужно с простого blink (на пример). можно выучить вообще весь справочник, НО, "не поняв первого слова говорить сразу предложениями..." лучше if и for изучить сперва, а когда их возможностей будет не хватать постепенно добавлять что-то новое...

вот и пост 55 нарисовался пока я это печатал - именно об этом я и говорю :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
1. как задали частоту?

2. что считает счётчк (строка 4)?

3. строка 24 - как работает?

4. строка 28 - подробнее бы?

5. почему вместо int применили byte вроде понятно - места меньше занимает, но почумуж тв других случаях так не поступают?

1. частоту задали через полупериод

2. именно в строке 4 ничего. просто объявили переменную. эту переменную использовали в цикле. но глупо так делать по моему. лучше так. локальная переменная

for(byte i=0

3. делают задержку но длительностью от исходной отняли 1, исходная не изменяется при этом

4. просто сравнение если текущее значение равно предыдущему то делать то то

5. зависит от задач и того экономит программист память или нет

 

Гриша
Offline
Зарегистрирован: 27.04.2014

jeka_tm, karl2233 не об этом спросил, (мне кажется все гораздо сложнее :))

1. как задали частоту?

byte i;     // счётчик 
byte num=20; //число периодов несущей 38кГц в посылаемом пакете 
byte impulse=10;  // длительность полупериода 

void loop() 
{ 
  for(i=0; i<num; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(impulse); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(impulse-1); //выравниваем скважность 
  } 

уберем немного:


byte i;     // счётчик 
       //число периодов несущей 38кГц в посылаемом пакете 
byte impulse=10;  // длительность полупериода 

void loop() 
{ 
  for(i=0; i<20; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(impulse); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(impulse-1); //выравниваем скважность 
  } 

вот это и есть частота...

стр 9-12 создаст 1 териод, и таких периодов стр 7 20шт

еще уберем:



byte i;     // счётчик 
       //число периодов несущей 38кГц в посылаемом пакете 


void loop() 
{ 
  for(i=0; i<20; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(10); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(9); //выравниваем скважность 
  } 

в строке 12 стоит "9", а не "10" чтобы вернуться в строку "07" и выполнить условие, а это время... вот и получается примерно меандр

еще выкиним :) лишнее




       // счётчик 
       //число периодов несущей 38кГц в посылаемом пакете 


void loop() 
{ 
  for(byte i=0; i<20; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(10); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(9); //выравниваем скважность 
  } 

 

Гриша
Offline
Зарегистрирован: 27.04.2014

jeka_tm, у Вас не найдется ссылки на пояснение глобальных и локальных переменных простым языком?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

а для цикла, значение переменной используется только внутри цикла, объявлять глобальную нет смысла

к тому же это грозит некоторыми глюками, так как например нужно обнулять

да и еще экономит память

impulse=10;

задан полупериод 10 мкс. период значит 20 мкс. частота равна 1/20мкс =50кгц

 

Гриша
Offline
Зарегистрирован: 27.04.2014

jeka_tm пишет:

задан полупериод 10 мкс. период значит 20 мкс. частота равна 1/20мкс =50кгц

только лишь примерно :) есть еще выполнение:

09 digitalWrite(irLed, HIGH); //зажигаем ик-диод
11 digitalWrite(irLed, LOW); //гасим ик-диод
 

которые немного нарушают это правило и зависят от частоты МК :)

karl2233
Offline
Зарегистрирован: 05.07.2015

фигассе вы даёте! :)

вроде дошло )))

спасибо вам обоим!

*пошел разбираться в железе

Гриша
Offline
Зарегистрирован: 27.04.2014

karl2233 пишет:

фигассе вы даёте! :)

вроде дошло )))

спасибо вам обоим!

*пошел разбираться в железе

не разберетесь :) нужно начинать с простого... пишите мигание 4шт диодов по очереди, потом добавим кнопку переключения, это будет урок по  if  и for... :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Гриша пишет:

jeka_tm пишет:

задан полупериод 10 мкс. период значит 20 мкс. частота равна 1/20мкс =50кгц

только лишь примерно :) есть еще выполнение:

09 digitalWrite(irLed, HIGH); //зажигаем ик-диод
11 digitalWrite(irLed, LOW); //гасим ик-диод
 

которые немного нарушают это правило и зависят от частоты МК :)

ага. но упрощенно так. пока этого не поймет дальше дальше будет трудно рассчитать без понимания

karl2233
Offline
Зарегистрирован: 05.07.2015

таки сделал =)))  точнее, конечно, скомилировал разные куски кодов разных авторов, разместив из в разных местах(иначе не работало), добавив от себя несколько слов, знаков и скобок =) 

усё работает, щас датчик красиво с транзистором сделаю и вуаля.

пользуясь случаем  хочу [s]передать привет[/s] сказать спасибо всем помогавшим, особенно Грише и jeka_tm

з.ы. ощущаю себя Биллом Гейтсом или даж круче - Великим Кукурузо ))))

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

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

надеюсь теперь понял что изначально ты неправильно начал

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша пишет:

не разберетесь :) нужно начинать с простого... пишите мигание 4шт диодов по очереди, потом добавим кнопку переключения, это будет урок по  if  и for... :)

у меня от мигания уже круги перед глазами идут )))) 

вопрос, для меня, в другом - что означают те или иные команды; в чём особенности применения; последовательность в записи - имеет значение? и т.д.

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

karl2233
Offline
Зарегистрирован: 05.07.2015

jeka_tm пишет:

надеюсь теперь понял что изначально ты неправильно начал

в смысле? не понял смысла сказанного - почему не правильно?

я даж сейчас два разных датчика менял  - разные принципы(следовательно и код нужен разный) у них и все работают

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я про тему

karl2233
Offline
Зарегистрирован: 05.07.2015

хе-хе.

а я теперь на Вильяма нашего, Шекспира, замахнулся.

буду творить такое движение:

1. Быстрый выход до тумблера(без выключения);

2. Медленный возврат под приоткрытую крышку;

3. Слежка из-под приоткрытой крышки, при наличии движения п.1 (и так пару раз)

4. на третий раз выключает.

Гриша
Offline
Зарегистрирован: 27.04.2014

karl2233 пишет:

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

если не трудно, код (этот) покажите :) полностью

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша пишет:

karl2233 пишет:

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

если не трудно, код (этот) покажите :) полностью

чё, попкорн где-то бесплатно раздавали? ))))

выложу, мне не жалко

karl2233
Offline
Зарегистрирован: 05.07.2015

вопрос.

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

суть.

шаг 0 - вклчили тумблер.

шаг 1 - рычаг вышел к тумблеру но не выключил его и через 1 сек вернулся под крышку.

шаг 2 - из-под крышки ИК датчик пасёт обстановку и как только руки загребущие тянутся к тумблеру, повторяется шаг 1, и опять система на шаге 2. И так пару раз.

шаг 3 - ручки шаловливые опять тянутся к тумлеру, рычаг в этот раз выключает его и возвращяется в ИП.

как понимаю, нужен оператор "while", в котором будут крутится шаги 1 и 2. но как задать условие при котором на третий раз система перейдёт к шагу 3?

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

while (правильно ли задано условие цикла с переходом к шагу 3?)
{
    Variable ++;
    if (Variable > 2) breack;
      {
      if (MoveStep == 1)  // серва идёт к тумблеру, но не выключает его
        {
         вжикание сервы; // вжик-вжик
         MoveStep = 2; // переход к шагу 2
        }
     if (MoveStep == 2) // рычаг спрятался под крышку и зырит датчикаме за хомо сапиенсо      {
        серва приняла засадное положение;
        датчики опрашиваются;
        {
         засекли тянущиеся рученки;
         MoveStep = 1;
        }
      }
if (MoveStep == 3) // надоело всё и серва выключает рычаг
      {
       вжикание сервы; // вжик-вжик
       MoveStep = 2; // переход к шагу 0 (т.е. возврат в ИП).
       }
      

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

покурите for

Гриша
Offline
Зарегистрирован: 27.04.2014

karl2233 пишет:

вопрос.

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

 

 for(byte i=0; i<20; i++) // 20 раз 
  { 
   
//что-то делаем, на пример:

 digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(10); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(9); //выравниваем скважность 
  } 

программа пошла дальше, если не указан переход, но об ентом позжееееее

Гриша
Offline
Зарегистрирован: 27.04.2014

karl2233 пишет:

вопрос.

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

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

пишите скетч с миганием 4 диодов (и сюда выкладывайте)!!!! 1) по очереди, потом 2) по кнопке потом, может быть, сможете и сами понять что здесь исправить...

который раз игнорите этот совет... так Вы ничего не поймете - слишком много переменных нужно держать в голове, а в этот скеч диодов воткнем if, for, while...

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша, я могу мигать светодиодами (вернее не я, но Ардуина).

чесслово! =)

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

я лучше выложу скетч управления ИК сервой (я по нему дальность настраиваал):

#include <Servo.h> 

//выбор выводов
int Sensor = 5; // OUT сенсора на  5-ый вывод
int ServoPin = 3; // серво на  3-ый вывод

Servo servo1; // Имя серво
int pos1; //  Начальная позиция серво
int ServoSpeed = 1; // скорость движения серво
int SensorStatus = 1; // первоначальный статус сенсора
int ServoMinPos = 25; // Минимальный угол
int ServoMaxPos = 175; // Положение, в котором рычаг отключает тумблер

void setup ()
{
  Serial.begin(9600);
  servo1.write(ServoMinPos); // Установка серво в И.П.
  servo1.attach(ServoPin); // Подключение серво к пину
  pinMode (Sensor , INPUT); // вывод для подключения сенсора  настраиваем как "вход"
}

void loop()
{
  SensorStatus = digitalRead(Sensor);  //считываем уровень на входе 5 и обновляем статус сенсора
  if (SensorStatus  == LOW) // если препятствие есть
  
    {                                  
    servo1.write(ServoMaxPos );              // выключить тумблер 
    delay(15);                       // подождать маленько 
    } 
  
   else // если сигнала нет
    {                                  
    servo1.write(ServoMinPos );              // принять ИП
    delay(15);                       // подождать 
    } 
  
}

за ДЗ сойдёт? =)  могу и светодиодики добавить к этому и начало цикла по включению тумблера.

сенсор на двух 555 таймерах (один генерит 38кГц, второй как защелка) и TSOP1738. 

з.ы. свой путь в радиоэлеткронике я начал собрав кассетный магнитофон(УВ был на 8 транзисторах) + стереусилитель на 24 транзисторах + 2-ух полосные колонки.  Корпуса были из жуткой фанеры, простоявшей на балконе долгое время, которую я выравнивал смочив водой и поставив любимую гирю 16 кг =) мне тода 13 лет было

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

 

з.з.ы. а чего это вдруг инета не будет (вроде его не запретили ишшо)? я категорически против! =)

karl2233
Offline
Зарегистрирован: 05.07.2015

Гриша пишет:

 for(byte i=0; i<20; i++) // 20 раз 

  { 
   
//что-то делаем, на пример:

 digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(10); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(9); //выравниваем скважность 
  } 

программа пошла дальше, если не указан переход, но об ентом позжееееее

Гриша, спасибо за подсказку.

возник вопрос по применению оператора "for" и счётчика "i".

1. если в программе уже используется конструкция типа (строка 25-31)

 void loop()
{
  unsigned long currentMillis = millis();
  ButtonState = digitalRead(ButtonPin); // Считывает статус тумблера 1 = вкл., 0 = выкл.
  if (ButtonState == 1 && !ON)
  {
    if (BoX == 0 && BoXmode == 1) // Случайный выбор движения
    {
      BoX = random(1, MoveNum + 1);
    }
    if (BoX == 0 && BoXmode == 2) // Выбор движения по порядку
    {
        BoX = BoXtemp + 1;
        if (BoX == MoveNum)
       {
          BoXtemp = 0;
       }
        else 
       {
          BoXtemp = BoX;
       }
    
    }
  }
 for(i=0; i<num; i++) //цикл несущей 
  { 
    digitalWrite(irLed, HIGH); //зажигаем ик-диод 
    delayMicroseconds(impulse); //положительный полупериод 
    digitalWrite(irLed, LOW); //гасим ик-диод 
    delayMicroseconds(impulse-1); //выравниваем скважность 
  }        
   // Далее идут все движения рычага для выключения тумблера
 
  
  //--------------------- Движение 5 ------------------------
  // Быстрый выход рычага до тумблера, задержка у тумблера (без выключения)
  // Медленный уход под крышку, быстрый выход, отключение тумблера и быстрый возврат
  if (BoX == 1)
  {
    // Тумблер Включен
    if (ButtonState == 1 && !ON)
    {
      delaybeforeoff = currentMillis;
      ON = true;
      godown = false;
      ServoSpeed = 1;
      offdelay = 100;
      MoveStep = 0;
    }

    // Задержка до начала движения
    if (ON && currentMillis - delaybeforeoff > offdelay)
    {
      goup = true;
    }
      // Шаг 0 - Выход рычага до тумблера
     if(currentMillis - previousMillis > ServoSpeed && pos1 < ServoMaxPos - 22 && goup && MoveStep == 0)
        {
        previousMillis = currentMillis;
        pos1 ++;
        servo1.write(pos1);
        // Изменение номера шага и скорости
        if (pos1 == ServoMaxPos - 22)
        {
          MoveStep ++;
          ServoSpeed = 20;
        }
      }
  
      // Шаг 1 - Задержка у рычага у тумблера
      if(currentMillis - previousMillis > 2000 && goup && MoveStep == 1)
      {
        previousMillis = currentMillis;
        MoveStep ++;
        ServoSpeed = 20;
      }
    // Шаг 2 - Медленный уход рычага под крышку
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 2)
    {
      previousMillis = currentMillis;
      pos1 --;
      servo1.write(pos1);
      // Изменение номера шага и скорости
      if (pos1 == ServoMaxPos - 85)
      {
        MoveStep ++;
        ServoSpeed = 1;
      }
    }
    // Шаг 3 - Слежение
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && goup && MoveStep == 3)
     {        
        val=digitalRead(Sensor);//Прочитать показания датчика 
        if (val==old_val)     //сравнить показания с предидущей посылкой 
          { 
            digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод 
            if (val==LOW)   
               {                
                delay(100); //время свечения светодиода (L) при срабатывании 
                MoveStep ++;
                ServoSpeed = 1;
                }   
          }
        old_val=val;
        delay(30); //пауза между пакетами. 
      }
     for(byte i=0; i<2; i++ && goup && MoveStep == 4) // Цикл с шага 0 по 3 (2 раза), потом шаг 5
     {  
      MoveStep == 0;
      ServoSpeed = 1;
     }
         
     // Шаг 5 - Быстрое выключение тумблера
    if(currentMillis - previousMillis > ServoSpeed && pos1 < ServoMaxPos && goup && MoveStep == 5)
    {
      previousMillis = currentMillis;
      pos1 ++;
      servo1.write(pos1);
    }

    // Тумблер Выключен
    if (ButtonState == 0 && goup)
    {
      goup = false;
      godown = true;
      ServoSpeed = 1;
      ON = false;
    }

    // Возвращение рычага в И.П.
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && godown)
    {
      previousMillis = currentMillis;
      pos1 --;
      servo1.write(pos1);
      // Завершение движения
      if (godown && servo1.read() == ServoMinPos)
      {
        BoX = 0;
      }
    }
  } 
  //--------------------- Конец Движения 5 ------------------------
 
}  // Конец Loop

введение второго "for" не повредит поциенту? ))

2. можно ли так использовать этот оператор? или я втупил нипадецки?

3. можно ли этим оператором создавать цикл, внутри цикла?

з.ы. мог бы посоветовать толковую книжку по Ардуино? Петин, Гололобов и Соммер уже прочитаны

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

второй не повредит. объявляй локальные переменные for(byte i, можно цикл в цикле и не раз. ограничение не знаю. по идее пока оперативка наверно не закончится. хотя в памяти что то есть что не более 8. я делал максимум 3-4

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

ЕС: Вам надо не по Ардуино книжку, а по основам программирования.

karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

ЕС: Вам надо не по Ардуино книжку, а по основам программирования.

+1.

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

можешь посоветовать что именно читать? как раз собираюсь за очередной книжкой ехать )))

karl2233
Offline
Зарегистрирован: 05.07.2015

jeka_tm пишет:

второй не повредит. объявляй локальные переменные for(byte i, можно цикл в цикле и не раз. ограничение не знаю. по идее пока оперативка наверно не закончится. хотя в памяти что то есть что не более 8. я делал максимум 3-4

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

получается что цикл у меня не работает по причине того, что не туда воткнул оператор "for"/

будем искать(c)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я бы на твоем месте переменные покороче назвал бы. тяжело читать

пины объявлял черзе define

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

К сожалению посоветовать ничего не могу. Сам читаю постоянно новые книги, но у меня разброс большой :) Погуглите на хабре. И определитесь куда именно Вы хотите развиваться. С++ если именно ардуино.

karl2233
Offline
Зарегистрирован: 05.07.2015

jeka_tm пишет:

я бы на твоем месте переменные покороче назвал бы. тяжело читать

пины объявлял черзе define

спасибо. названия исправлю.

щас покурю define )))

покурил. да, в моём случае это лучше - можно уменьшить программу и впихнуть её в 168 Мегу

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

JollyBiber пишет:

К сожалению посоветовать ничего не могу. Сам читаю постоянно новые книги, но у меня разброс большой :) Погуглите на хабре. И определитесь куда именно Вы хотите развиваться. С++ если именно ардуино.

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

karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

К сожалению посоветовать ничего не могу. Сам читаю постоянно новые книги, но у меня разброс большой :) Погуглите на хабре. И определитесь куда именно Вы хотите развиваться. С++ если именно ардуино.

да, Ардуино. пока о другом и думать боюсь )))) а книжку бы мне с основами, что б читая код мог понимать не только смысл программы(это у меня худо-бедно получается) а именно смысл применённых переменных/функций/команд.

а то читая, например это:

  // Возвращение рычага в И.П.
    if(currentMillis - previousMillis > ServoSpeed && pos1 > ServoMinPos && godown) // заданы условия выполнения нижеследующего
    {
      previousMillis = currentMillis; // что к чему приравняли? хз...
      pos1 --; // уменьшение понятно, но ведь "pos1" равно "ServoMinPos", куда ещё уменьшать?
      servo1.write(pos1); // команда серве на принятие минимального положения
      // Завершение движения
      if (godown && servo1.read() == ServoMinPos) // если на серву поступила команда занять Min положение 
      {
        BoX = 0; // возврат к шагу 0 в движении
      }
    }

 понимаю что происходит на физическом уровне , но не понимаю рпочему =)

karl2233
Offline
Зарегистрирован: 05.07.2015

Puhlyaviy пишет:

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

да сам смысл мне понятен - программирование это пошаговая подача команд МК для выполнения тех или иных операций. 

т.е. я понимаю ЧТО нужно сказать МК, но не понимаю КАК =)))

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

karl2233 пишет:

т.е. я понимаю ЧТО нужно сказать МК, но не понимаю КАК =)))

так не бывает... если вы можете составить алгоритм для МК. то вот этого вам должно хватить выше крыши

http://arduino.ru/Reference

karl2233
Offline
Зарегистрирован: 05.07.2015

Puhlyaviy пишет:

karl2233 пишет:

т.е. я понимаю ЧТО нужно сказать МК, но не понимаю КАК =)))

так не бывает... если вы можете составить алгоритм для МК. то вот этого вам должно хватить выше крыши

http://arduino.ru/Reference

не хватает (( эту страницу уже изучил вдоль и поперёк - скоро сниться будет.

вот типичный пример моего непонимания:

do // дали команду МК для выполнения нижеследующего без условий
{
  delay(50);          // подождать, пока датчики стабилизируются
  x = readSensors(); // проверить датчики
} while (x < 100); // х - это что? понятно что переменная, понятно что она меньше 100 и целое число. но что происходит дальше? что проверилось? "х" от 0 до 99 выполняется то, что идёт сверху wihle, а когда х= 100 что будет?

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

а почему из приведенного куска Вы сделали вывод что "х" это целое?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Кстати как у Вас с английским?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013
karl2233
Offline
Зарегистрирован: 05.07.2015

JollyBiber пишет:

а почему из приведенного куска Вы сделали вывод что "х" это целое?

ээээ... не знаю. видимо обрывок чего-то прочитанного в моей ОЗУ остался ))))

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

Гриша
Offline
Зарегистрирован: 27.04.2014

Puhlyaviy пишет:

karl2233 пишет:

т.е. я понимаю ЧТО нужно сказать МК, но не понимаю КАК =)))

так не бывает... если вы можете составить алгоритм для МК. то вот этого вам должно хватить выше крыши

http://arduino.ru/Reference

Вы не правы ИМХО! Там почти энциклопедическое представление со скудными примерами...

объясню:  if (тумблер == 0 &&  серва померла) ... про 2 условия там не слова, а это важно ИМХО

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

While будет вычислять в цикле непрерывно и бесконечно до тех пор, пока выражение в круглых скобках, () не станет равно логическому ЛОЖНО. Что-то должно изменять значение проверяемой переменной, иначе выход из цикла whileникогда не будет достигнут. Это изменение может происходить как в программном коде, например, при увеличении переменной, так и во внешних условиях, например, при тестировании датчика.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

http://www.lib.ru/CTOTOR/starterkit.txt