помогите разобраться с Arduino Mega2560,

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

А так не пробовали:

Ссылку на необходимый для этого плагин можно отыскать, например, здесь: http://elabz.com/arduino-shrunk-how-to-use-attiny13-with-arduino-ide/

maksim
Offline
Зарегистрирован: 12.02.2012

tsostik пишет:

Что же, я рад, что мои оценки минимального размера скетча в исполнении ардуино IDE оказалась пессимистичными -)

Более того если сделать так

#include <util/delay.h>

#define HIGH_3 PORTB|=1<<3
#define LOW_3 PORTB&=~(1<<3)
#define HIGH_4 PORTB|=1<<4
#define LOW_4 PORTB&=~(1<<4)

int main() 
{    
  DDRB |= (1<<3) | (1<<4);
  while(1) 
  {
    for(byte i = 0; i < 3; i++)  
    {
      for(byte j = 0; j < 3; j++) 
      {
        HIGH_3;  
        _delay_ms(50); 
        LOW_3;    
        _delay_ms(50);
      } 
      _delay_ms(150);
      for(byte j = 0; j < 3; j++)
      {
        HIGH_4;  
        _delay_ms(50); 
        LOW_4;    
        _delay_ms(50);
      }    
      _delay_ms(150);
    }

    for(byte i = 0; i < 4; i++)
    {
      HIGH_3;  
      _delay_ms(50); 
      LOW_3;    
      _delay_ms(50);
      HIGH_4;  
      _delay_ms(50); 
      LOW_4;    
      _delay_ms(50);
    }

    for(byte i = 0; i < 5; i++)
    {
      HIGH_3; 
      HIGH_4;   
      _delay_ms(200);
      LOW_3; 
      LOW_4;   
      _delay_ms(200);
    }

    for(byte i = 0; i < 4; i++)
    {
      HIGH_3; 
      _delay_ms(150);
      HIGH_4;  
      _delay_ms(100);
      LOW_3; 
      _delay_ms(100); 
      LOW_4;  
      _delay_ms(300);
    }
  }
}

При таком виде вообще ничего лишнего не подключается и ничего лишнего не настраивается так же как и в расхвалинном вами AvrGCC. Естественно дуиновская delay() работать не будет, поэтому используем библиотеку delay.h .

Так вот при таком раскладе размер уменьшается аж в полтора раза:

так что можно сделать вывод, что дело не IDE, а в умении пользоваться этим 
IDE, да и вообще ArduinoIDE - это всего лишь оболочка того же самого AvrGCC.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Я тоже обратил на это внимание в такой конфигурации скэтча 

tsostik
Offline
Зарегистрирован: 28.02.2013

maksim пишет:

При таком виде вообще ничего лишнего не подключается и ничего лишнего не настраивается так же как и в расхвалинном вами AvrGCC. Естественно дуиновская delay() работать не будет, поэтому используем библиотеку delay.h .

...

так что можно сделать вывод, что дело не IDE, а в умении пользоваться этим IDE, да и вообще ArduinoIDE - это всего лишь оболочка того же самого AvrGCC.

 

Остатся вопрос, зачем тогда вообще использовать ArduinoIDE? У не ради ли очень удобного текстового редактора? :-)

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

Если хочется не морочиться с регистрами и битами, а писать "digitalWrite" и "Serial.print" - надо смириться с тем, что эффектичный код вряд ли получится.

Очень грудая аналогия - будет ли кто-нибудь писать драйвер устройства на джаве, потому что там есть автосборщик мусора, а он (автор драйвера) "во всех этих малоках и фри ничего не понимает"? И будет ли такой драйвер хорош?

И ArduinoGCC и  AvrGcc и IAR  - это не более чем просто инструмента. А инструмент есть средство достижения цели, так зачем же делать из него фетиш?

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

maksim
Offline
Зарегистрирован: 12.02.2012

У дуины есть очень и очень огромнейший плюс - простота и быстрота прототипирования.
То есть я могу за 5-10 минут написать рабочий прототип устройства, используя ее медленные и прожорливые функции. Так зачем мне сначала в ArduinoIDE писать прототип, а потом переносить его в другую IDE, если как видите никаких ограничений в дальнейшей оптимизации кода нет? Правильно - незачем.
Да и просто я к ней привык, так как иненно с нее и начинал.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Ребята, я опять к вам. В подходящей ветке ответа нет.

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

 



int brightness = 0;   
int fadeAmount = 5;
void setup()  {
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(5, INPUT);
  
 }
  
   void loop() { 
    if(digitalRead(5)==HIGH) { 
   digitalWrite(10, LOW); 
   digitalWrite(11, LOW);    
   delay(5000); 
      for(byte i=0;i<153;i++) 
      {
        analogWrite(10, brightness);
        analogWrite(11, brightness);
  brightness = brightness + fadeAmount;
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }    
  delay(30);    
    }  
      label:digitalWrite(10, HIGH);   
            digitalWrite(11, HIGH);
       if(digitalRead(5)==HIGH) {
    goto label;
       }
   }
 }

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вобще просто реагирует на изменения состояния кнопки"1" или"0" хотя вроде как условие только при "1".

Перечитал все операции с кнопками, там всё класно, а тут вобще своей жизнью живёт.

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

hugoboss317 пишет:

Ребята, я опять к вам. В подходящей ветке ответа нет.

А может ветка была не подходящая? Вот скажите, какое отношение имеет ваш вопрос про циклы и плавное разгорание светодиода к ПРИКРЕПЛЕННОЙ ветке про работу с кнопками (как подключать безопастно, как дребезг ловить и т.п.).   Вот скажите, пришел новичек, хочет разобратся как работать с кнопками, ему нужно читать про пару страниц (а судя по всему меньше не выйдет) разбирательств с вашим конкретным скетчем и разбирательствами что такое for и что такое if?

Кстати то же самое относится и к этой ветке. Будет у кого-то проблема с мегой. Найдет поиском эту ветку и .... прийдется человеку продиратся сквозь кучу не относящегося к теме.

Так что тут, было-бы уместно завести новую ветку. Только не с названием "помогите новичку", а сесть и ПОДУМАТЬ, как внятно назвать тему, что-бы из название уже наполовину было понятно о чем пойдет речь. Потому что, боюсь, только ваша жена может понять что означает что такое "нажатая кнопка если она отжата". А непонимание - очень часто выливается именно в игнорирование.

Так что не бойтесь "стать такими как мы". Это не так плохо - уметь четко и формально-однозначно выражать свои мысли. Никто не сможет вам помочь найти ошибку в скетче если нет четкого понимания что же вы от него хотите.

P.S. И забудте про существование goto. Его наличие в языках программирования - историческая отрыжка из 70-тых годов прошлого века. Его испльзование НИКОГДА не является оправданым/нужным  (если только вы не пишите на ассемблере). Любой алгоритм может быть написан без него. for/if/while и т.п. - всегда могут его заменить.

tsostik
Offline
Зарегистрирован: 28.02.2013

Схему покажите. Лучше в виде фотографии.

Скорее всего проблема в схеме (где-то либо КЗ либо обрыв)

Кстати, вместо

label:  digitalWrite(10, HIGH);   
        digitalWrite(11, HIGH);
        if(digitalRead(5)==HIGH) 
		{
            goto label;
        }

Лучше написать

        digitalWrite(10, HIGH);   
        digitalWrite(11, HIGH);
        while(digitalRead(5)==HIGH) {};

 

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

И, если будете заводить новую ветку - постарайтесь осветить в ней как вы подключаете свою кнопку. Конечно по словам "Подтяжка есть." - можно догадатся, но не факт что догадка будет правильной. Потому что код - противоречит этому утверждению.

P.S. Если уж так хотите привлечь "ребят отсюда" - можете тут дать ссылку на новую заведенную тему тут.

P.S.S. А вообще - это не очень хороший стиль поведения - если в одной ветке не отвечают, начинать дублировать вопрос в других не отсносящихся к теме ветках. Чем-то поручика Ржевского, с его "кстати о птичках..." напоминает.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

ок, понял. Ухожу

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Это пиздец какой то. дуина живёт своей жизнью и хуй ложила на команды и условия. Тема называется  помогите разобраться с Arduino Mega2560, так вот и помогли бы, а не умничали и рассуждали о флуде.

tsostik - человек как человек, посмотрел, посоветовал.

while не подходит, замыкает цикл и не реагирует на другие кнопки так же как и  goto label.

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

hugoboss317 пишет:

Это пиздец какой то. дуина живёт своей жизнью и хуй ложила на команды и условия. Тема называется  помогите разобраться с Arduino Mega2560, так вот и помогли бы, а не умничали и рассуждали о флуде.

Легче на поворотах. Тема называется "помогите разобратся с Arduino Mega2560" - ваш вопрос отношения к ArduinoMega2560 - никакого не имеет. Так что вы верно, САМИ определили свои посты как флуд. А на флуд - и реакция соотвествующая.

А гопо-стиль общения "ты че, очень умный?" Оставте при себе. Не нравится - не слушайте что вам советуют Впрочем вы именно этим постоянно и занимаетесь. Отсюда и все ваши проблемы.

Бардак в голове->бардак в формулировании мысли->бардак в коде->бардак в поведении ардуины.

Нам-то вы можете многое доказывать демогогией. Может даже докажете. Только вот компилятору - пофиг эта демагогоия. Ему четко и однозначно "что делать" нужно говорить. И для этого вначале нужно в голове это сложить. А вы не хотите. Считаете что это "придирки". 

И пока в голове порядок не наведете (поэтому и пытаются вас вернуть по этой цепочке назад) - нифига с кодом не выйдет. Помочь вам могут только с "нехваткой специальных знаний". Помочь перевести с русского на C++ ваше желание. Но вы пока - даже по русски не можете сформулировать. 

hugoboss317 пишет:

tsostik - человек как человек, посмотрел, посоветовал.

while не подходит, замыкает цикл и не реагирует на другие кнопки так же как и  goto label.

А толку? Вот потому и не работает. Что он мог работать только с тем "что вы дали". Просто переформулировал ваше goto в while. Не меняя логики. Его while делает то что вы написали на goto.

А goto - было единсвенно доступная информация о том "что вы хотите". 

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

Вы забыли маленький нюанс: вам никто ничего не должен.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вся хрень заключается в том, что я пришол и попросил о помощи у людей, которые, как я увидел, на столько хорошо знают в этом толк, что мой вопрос это детский лепет. На форумах не первый день и знаком с понятием "флуд" и извинился за это, но вместо того чтоб сначала помоч, вы все занялись нравоучением, а мне, как я уже говорил, даже совета спросить не у кого. Ну залез не в ту ветку, ну нафлудил, понимаю неправ, но пинать то сразу зачем? Перечитал многое тут на форуме, дочитываю книгу по Atmel МК, я уже не говорю про ютюб, в котором из 30 минут ролика по прошивке МК 25 минут из них мы изучаем как же блин правельно нам расчитать резистор для светодиода, изучаем детально закон ома для участка цепи и надо же ещё правельно подобрать его мощьность, не забыть обратить на это внимание, причём прошивать мы будем обязательно старым хламом каким-нибудь. Как будто человек, который решил заняться изучением МК не знаект как применить закон ома. При этом не слова про саму прошивку, как она выглядит, с чего начинать и как использовать элементарные команды и в какой программе. Вот и на этом форуме рассматривал примеры, всё понятно и доступно и на эдентичных схемах всё будет, ну или должно, работать. Вот мы вводим переменную regim или flag, о о о, всё заработало. А вот бы кто сказал к чему эта переменная привязывается и при каких условиях меняется её значение. Пока в готовом скетче стоит, работаем, начинаешь оперировать ими под свою схему, а к чему тулить эти флаги знамёна хрен знает. Задаю чёткое условие if(digitalRead(5)==HIGH) { (пин правельный, на скетчах сэмплах работает) подключаю подтяжку на землю, кнопку даже не подключаю, а он сразу начинает гонять цикл по кругу иложит на if(digitalRead(5)==HIGH) {, при том что подключена кнопка что нет. Врейками пытаюсь остановить выполнение цикла в конце а скомпелироватьне могу хотя всё как в сэмпле со всеми точками. Понятно что я что то и кудато неправельно пишу и МК выполняет заданную программу, но вот только попробуй совета у понимающих спросить, да ты что, ты туда не ходи, ты сюда ходи. 

maksim
Offline
Зарегистрирован: 12.02.2012

Обьяснию на твоем языке.

Тебе же уже сказали, что программирование это не сочинение писать, где можно так а можно сяк, а смысл один х..й тот же. А ты пишешь именно сочинение. Какой еще нах..й цикл??? Где ты цикл увидел? Какие нах..й команды? 
Ни кто не требуют от тебя знания терминологии, ты сам называешь какие-то вещи своими именами, которые на самом деле называются по другому и смысл в них другой и поэтому тебя ни кто и не понимает. Так если ты не в теме этой всей терминологии нах..я ты употребляешь эти слова и нам потом лечишь, что в метре 1024 байта... Ты нам это зачем лечишь? Что бы тебя на х..й начали посылать?
Неужели тебе не понятно, что не все так просто устроено и что далеко не все так как ты об этом думаешь. Ты видишь и понимаешь только "верхушку айсберга", зато уперся и доказываешь нам что есть только "верхушка" и больше них..я, и ты все понимаешь, но ни хрена не работает.
 
Хочешь помощи, напиши по нормальному - по человечески что ты хочешь от кода, что ты хочешь от дуины, куда, что и как подключаешь, что ты вообще за устройство делаешь, а не х..етой занимайся.
 
Пробуй так:
int brightness = 0;   
int fadeAmount = 5;

void setup()  
{
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);   
  digitalWrite(11, HIGH);
  pinMode(5, INPUT);
  delay(100);
}

void loop() 
{ 
  if(digitalRead(5) == HIGH) 
  { 
    digitalWrite(10, LOW); 
    digitalWrite(11, LOW);    
    delay(5000); 
    for(byte i=0; i<153; i++) 
    {
      analogWrite(10, brightness);
      analogWrite(11, brightness);
      brightness = brightness + fadeAmount;  
      delay(30);    
    }  
    digitalWrite(10, HIGH);   
    digitalWrite(11, HIGH);
    while(digitalRead(5) == HIGH);
    delay(100);
  }
}

Если с этим кодом условие if(digitalRead(5) == HIGH) все равно будет выполняться значит ты что-то нах..евертил в схеме и почитай про дребезг контактов. Если дальше будешь стоять на своем, что ты все правильно подключил и все понимаешь и что все должно работать, а оно не работает, то флаг тебе в руки и барабан на шею.

Без обид. Все по теме, без нравоучений, без пинков. 
 
Вопросы?
leshak
Offline
Зарегистрирован: 29.09.2011

Обалдеть.

>Как будто человек, который решил заняться изучением МК не знаект как применить закон ома.

Вы так все хорошо знаете о жизни? Почитайте форум. Чуть ли не половина начинающих заниманться микроконтроллером - смутно помнит что "в школе проходили такой закон".  Так что в данном случае вы попали пальцем в ж...., то есть небо.

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

И вы так и не поняли самого главного - у вас проблема не с нехваткой технических знаний. А проблемы с коммуникацией. С людьми. Не с контроллером. По крайней мере online-ново.

Поверте, не вы первый сюда пришли с большими пробелами в знаниях. Собственно "начинающие" тут скорее правило, чем исключение. Я бы даже сказал что весь форум на начинающих ориентирован (как собственно и сама ардуина). Выско-професиональным междусобойчиком тут и не пахнет. Какие-то сверх-сложные програмерско-железные проблемы - редко обсуждаются. 90% времени - именно помощь новичкам и помощь вида "ну почему зараза не работает...".

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

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

Вы похоже явно тяготеете ко второй.

Нельзя налить воды в полный стакан.

А ваш стакан знаний похоже полон до краев. Хоть и утверждаете вы обратное, но действия говорят о том что роль "ведомого" вами прочно забыта. Возможно в жизни в слишком успешный/самостоятельный человек, привыкли диктовать "свои условия" (это я без сарказма).

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

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

Удачи вам. Возможно это просто наша личная "ментальная не совместимость". И с кем-то другим у вас получится лучше понять друг-друга. Людей на форуме - много. Надеюсь все-таки сможете подружится и с ними и со своей ардуиной.

 

 

 

 

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

maksim пишет:

Обьяснию на твоем языке.

Пересел в партер.
Открыл попкорн ;)

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Ну тогда погнали....