Arduino uno

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Приветствую, совсем не давно я заказал с Китая Arduino uno. 

И когда я начал осваивать массивы возникла проблема с 3 им цифровым (вход/выход), а именно на этом выходе не загорается светодиод.  Потом попытался зажечь один светодиод только от 3 выхода, и точно также не загорелся. Мог ли я спалить этот выход ? 

toc
Offline
Зарегистрирован: 09.02.2013

как подключали? через резистор? как зажигали?

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

Bulatka92 пишет:

Мог ли я спалить этот выход ? 

Теоретически - могли (особенно если сразу три светика на одну ногу цепляли). Но вероятность того что что-то напутали в коде - выше.

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

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

А... и еще..., ну почему тема называется "Aduino Uno"?  Разве про нее речичь идет? Вопросы про уну или "как правильно зажигать светики", или там "как проверить спалил ли я выход...", или еще что-то "поближе к реальности... что-бы понятней было о чем речь пойдет".

Вообщем ждем подключени, скетча и объяснения как же вы проверяли что он "не зажигается".

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Конечно 220 Ом

 

Bulatka92
Offline
Зарегистрирован: 23.07.2014
int led [] = {2, 3, 4, 5, 6, 7};
int count = 0;
void setup()
{
  pinMode(led[count], OUTPUT);
}
void loop()
{
  for (count = 0; count <= 6; count++) {
    digitalWrite(led[count], HIGH);
    delay(100);
  }
}
  Вот такой код
 
Bulatka92
Offline
Зарегистрирован: 23.07.2014

leshak, Ок ,Приму во внимание ваше замечание

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

Во первых читаем это: Вставка программного кода в тему/комментарий (уже поправил ваш поста, это на будущие).

Во вторых.... к сожалению сам код "выглядит корректным". Так что остались варианты:
1. Сгорел выход (или не пропай, или на плате дорожка...)
2. Ошибки в подключении (перепутали скажем D3 и A3), полярность светка или еще что-то...
3. Сам светик сдох.

Начем с последнего. Если этот же светик, через этот же резистор, ничего не меняя подключить не D3, а к +5v пину. Светиться?

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

for (count = 0; count <= 6; count++)

сколько раз у нас выполнится цикл (начинайте в уме, загибая пальзцы 0, 1, 2, 3....) ?  А сколько у нас светиков?

Вообщем я предлагаю, раз разбираемся именно с третьим упростить ваш скетч до вот такого:

#define LED_PIN 3
setup(){
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGHT);
  
  Serial.begin(9600);
  Serial.print("Led is ");
  Serial.println( digitalRead(LED_PIN)?"ON":"off");

  // через три секунды выключим светик от греха
   delay(3000);
   pinMode(LED_PIN,INPUT);
   digitalWrite(LED_PIN,LOW);
  
}

void loop(){
}

При включении, по идее, толкьо на D3 светик должен загореться на три секунды и в сериал мониторе появится надпись "Led is ON".
 

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

Во вторых.... к сожалению сам код "выглядит корректным".

Дааа?

int count = 0;
void setup()
{
  pinMode(led[count], OUTPUT);
}

На выход какие пины получаются? ;)

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

vdk пишет:

leshak пишет:

Во вторых.... к сожалению сам код "выглядит корректным".

Дааа?

int count = 0;
void setup()
{
  pinMode(led[count], OUTPUT);
}

На выход какие пины получаются? ;)

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

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

leshak пишет:

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

А блин.... все-таки я "невнимательно читал". Вы правы... еще один таракан есть.
Но даже в этом случае мой проверочный из #7 должен нормально зачешь светик и доказать что "с железом все в порядке".

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

Вообщем булатка, банальный скетч типа

void setup(){
  pinMode(3,OUTPUT);
  digitalWrite(3,HIGH);
}
void loop(){}

Зажигает третий светик?

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Благодарствую за советы :). Это я тупанул. Оказывается  на этот pin  3 раза сгоревшие светодиоды использовал. 

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Кстати у меня возник еще вопрос . Теперь у меня 0 pin горит достаточно ярко, а остальные тускло, Я измерил напряжение на светодиодах  и оказалось на 0 pin 2В, а на остальных 1.7. В.  С чем это связано ? И как выдать одинаковое напряжение ?

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

Bulatka92 пишет:

Кстати у меня возник еще вопрос . Теперь у меня 0 pin горит достаточно ярко, а остальные тускло,

А вот теперь смотрите в описание своей платы... смотрите что расположено на D0,D1

Вообщем лучше считайте что D0,D1 - использовать нельзя. По крайней мере пока вы собираетесь к компу подключать дуину. Прошивки там заливать, отлаживать и т.д.

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

Bulatka92 пишет:

Благодарствую за советы :). Это я тупанул. Оказывается  на этот pin  3 раза сгоревшие светодиоды использовал. 

Да нет... у вас реально проблемы в скетче. И в loop() лишний раз цикл прокручиваете, и в setup().... пины на выход не включили (а это 100% причина "тусклости"). Смотрите сообщение №8. Ответте на вопрос который задал vdk.

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Сорри я ввел вас в заблуждение, нет я не использовал D0, D1.  Использовал выходы  с D2- D7.  

Это я элементы массива имел ввиду( D2=0, D3=1, и т.д.)

 

vdk
Offline
Зарегистрирован: 14.04.2013

Bulatka92 пишет:

Кстати у меня возник еще вопрос . Теперь у меня 0 pin горит достаточно ярко, а остальные тускло, Я измерил напряжение на светодиодах  и оказалось на 0 pin 2В, а на остальных 1.7. В.  С чем это связано ? И как выдать одинаковое напряжение ?

А если их (светодиоды с резисторами) подключить не к пинам, а к 5В? Тоже один их них горит ярче? (если да, то это уже зависит не от ардуины, а от светодиода/резистора

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

Bulatka92 пишет:

Сорри я ввел вас в заблуждение, нет я не использовал D0, D1.  Использовал выходы  с D2- D7.  

Это я элементы массива имел ввиду( D2=0, D3=1, и т.д.)

Ну, а D7 какой индекс будет иметь?

То есть у вас D2 горит тускло, а остальные ярко?

Отгадка в сообщении #8. Вы только D2 включили на выход.

А потом (именно "потом", когда ВСЕ пины включите на выход и все нормально загорится)  почитайте внимательно 
Функция digitalWrite() | Аппаратная платформа Arduino , и попробуйте понять "что же сделали", почему они не включенные на выход "все-таки загорелись" хотя-бы тускло.

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

Кстати - не забывайте. Что "что там у вас" - никто не видит. Когда исправите скетч - тоже покажите тут. А то может вы "давно все исправили", но никому об этом не сказали.

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Подключил. Действительно горит ярче. Спасибо, буду уменьшать сопротивление

 

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

vdk пишет:

А если их (светодиоды с резисторами) подключить не к пинам, а к 5В? Тоже один их них горит ярче? (если да, то это уже зависит не от ардуины, а от светодиода/резистора

А смысл? Светит но "тускло". А как еще будет светиться лед, подключенные через 20.2K резистор? Вообщем и порт живой, и светик живой. Все живое. Ничего не сгорело. Только скетч исправить.
Все-таки "допинать работу с циклами".

Bulatka92 
Подсказка: в setup() вам тоже цикл нужен.

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

Bulatka92 пишет:

Подключил. Действительно горит ярче. Спасибо, буду уменьшать сопротивление

 

Не нужно. 220 - вполне правильный номинал. И то что он при подключении к +5v горит нормально - лишнее подтверждение тому.
Разбирайтесь со скетчем.
В итоге у вас на пине должно все гореть так же, и при тех же номиналах, что и при подключении к +5v.

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

А смысл? Светит но "тускло". А как еще будет светиться лед, подключенные через 20.2K резистор? Вообщем и порт живой, и светик живой. Все живое. Ничего не сгорело. Только скетч исправить.

эммм... я исхожу из того, что если на пине LOW, то светодиод светиться вообще не будет. Или будет?

Bulatka92
Offline
Зарегистрирован: 23.07.2014

leshak, вот скейч

int led []={2,3,4,5,6,7};
int count=0;
void setup()
{ 
  pinMode(led[0],OUTPUT); 
   pinMode(led[1],OUTPUT); 
    pinMode(led[2],OUTPUT); 
     pinMode(led[3],OUTPUT); 
      pinMode(led[4],OUTPUT); 
       pinMode(led[5],OUTPUT); 
}
void loop()
{
  for(count=0; count<6;count++){
 digitalWrite(led[count],HIGH); 
 delay(100);
 }
}

Все горит, как я хотел. Спасибо вам

 

Bulatka92
Offline
Зарегистрирован: 23.07.2014

vdk, спасибо,понял в чем дело

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

Bulatka92 пишет:

leshak, вот скейч

int led []={2,3,4,5,6,7};
int count=0;
void setup()
{ 
  pinMode(led[0],OUTPUT); 
   pinMode(led[1],OUTPUT); 
    pinMode(led[2],OUTPUT); 
     pinMode(led[3],OUTPUT); 
      pinMode(led[4],OUTPUT); 
       pinMode(led[5],OUTPUT); 
}
void loop()
{
  for(count=0; count<6;count++){
 digitalWrite(led[count],HIGH); 
 delay(100);
 }
}

Все горит, как я хотел. Спасибо вам

 

И что, думаете я отстану от вас? И не найдетесь :) 
Работает - хорошо. Но нужно же еще что-бы код прилично выглядел.
Почему в loop() вы сделали цикл по массиву идете, а setup() у вас, в принципе тоже самое, но тупым копированием сделано?  
Это правильно когда не работает и не уверен "сделать хоть как-то", лишь бы работало.
Но ведь дальше нужно...  вообщем давайте, то же самое, но тоже только через for.
В loop() вы для каждого элементы выставляли "состояние", а в setup(), абсолютно по аналогии только "режим" выставляем.

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

vdk пишет:

leshak пишет:

А смысл? Светит но "тускло". А как еще будет светиться лед, подключенные через 20.2K резистор? Вообщем и порт живой, и светик живой. Все живое. Ничего не сгорело. Только скетч исправить.

эммм... я исхожу из того, что если на пине LOW, то светодиод светиться вообще не будет. Или будет?

Тогда и вам нужно перечитывать доку по digitalWrite(). Что будет если пину включенному на вход, мы сделаем digitalRead(.., HIGH)? Что подобная комбинация означает с точки зрение камня??  ВХОД+HIGH?  Он не "проигнорирует" (как вы видимо подумали), а... все-таки кой чего сделает. На выходе не LOW будет. А, как ни странно, все-таки HIGH. Только с офигеным ограничем по току: 0.25mA. Которых может хватит что-бы хоть как-то поджечь светик, а может и нет. 

Bulatka92
Offline
Зарегистрирован: 23.07.2014

Согласен с вами.

int led []={2,3,4,5,6,7};
int count=0;
void setup()
{  for(count=0; count<6;count++)
  {pinMode(led[count],OUTPUT); }
    
}
void loop()
{
  for(count=0; count<6;count++){
 digitalWrite(led[count],HIGH); 
 delay(100);
 }
}

 

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

Тогда и вам нужно перечитывать доку по digitalWrite(). Что будет если пину включенному на вход, мы сделаем digitalRead(.., HIGH)?

А! Нашел где это было - digitalRead, я о нем и не думал (и нефиг такие тесты писать, кстати)

Но в любом случае есть смысл посмотреть, на чьей стороне проблема, а потом уже думать, что с ней делать

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

vdk пишет:

leshak пишет:

Тогда и вам нужно перечитывать доку по digitalWrite(). Что будет если пину включенному на вход, мы сделаем digitalRead(.., HIGH)?

А! Нашел где это было - digitalRead, я о нем и не думал

Но в любом случае есть смысл посмотреть, на чьей стороне проблема, а потом уже думать, что с ней делать

Тьфу блин... уже под вечер заговариваю. digitalWrite конечно. Булатки-то я ссылку "что читать" дал верно, а вам уже.. оговорился.

Читаем документацию:Функция digitalWrite() | Аппаратная платформа Arduino

Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор.  Нагрузочного резистра достаточно чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень тускло, возможно необходимо установить режим выход (OUTPUT) функцией pinMode().

P.S. Почему в данном случае pull-up перевели как "нагрузочный", а не "подтягивающий" - я не знаю.

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

vdk пишет:

leshak пишет:

Тогда и вам нужно перечитывать доку по digitalWrite(). Что будет если пину включенному на вход, мы сделаем digitalRead(.., HIGH)?

А! Нашел где это было - digitalRead, я о нем и не думал (и нефиг такие тесты писать, кстати)


Как раз "нужно". Это тоже один из способов проверить (не 100%, но все же) "сгорела нога или нет", Если она включена на OUTPUT. Мы сделали digitalWrite(...,HIGH), и тот уже сделав digitalRead получили LOW, то сказать "похоже ноге кабздец" - можно с большой долей уверенности. А на тот момент, если помните, подозрение что на "спалили ногу" - еще имело место быть. Отсюда и "такие тесты" :)
Кстати если бы тот тест все-таки пустили,то светик он бы защего нормально :) 

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

Bulatka92 пишет:

Согласен с вами.

int led []={2,3,4,5,6,7};
int count=0;
void setup()
{  for(count=0; count<6;count++)
  {pinMode(led[count],OUTPUT); }
    
}
void loop()
{
  for(count=0; count<6;count++){
 digitalWrite(led[count],HIGH); 
 delay(100);
 }
}

Ну вот... другое дело :)
Хотя тут конечно можно еще найти что "улучшать", но на это уже...перфекционизм. у меня сил сегодня уже не хватит сил объяснять:)
В любом случае - новичка, за такой код, ни у кого язык не повернется корить. Да и опытный - в принципе краснеть не будет за такое. :)

 

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор.

Вот я и говорю, что нефиг писать такие тесты как в #7, а то полтергейстов не оберешься

(хотя тоже уже под вечер начал путать digitalRead с INPUT mode - все равно контекст использования совпадает)

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

vdk пишет:

leshak пишет:

Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор.

Вот я и говорю, что нефиг писать такие тесты как в #7, а то полтергейстов не оберешься

Каких полтергейстов? Что вам не нравится в тесте #7? Помоему его проблема только в одном - его не успели запустить и попробовать. Либо запустили, но о результатах - не сказали.
Если вы, по прежнему утверждаете что он содержит "полтергейсы", то опишите что же именно в нем "не так"?

Полтергей был именно в изначальном скетче. Причину полтергейса - вы сами подсказали. Как только ее исправили - все стало на свои места.
Если бы пустили тест #7, то он бы тоже показал что "железо работает нормально" и таракана в изначальном скетче - все равно нашли бы.
Так почему же "нефиг писать такие тесты"?
 

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

Каких полтергейстов? Что вам не нравится в тесте #7? Помоему его проблема только в одном - его не успели запустить и попробовать. Либо запустили, но о результатах - не сказали.

Мне 12 строчка не нравится - переключаем выход на вход и удивляемся побочным эффектам

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

vdk пишет:

leshak пишет:

Каких полтергейстов? Что вам не нравится в тесте #7? Помоему его проблема только в одном - его не успели запустить и попробовать. Либо запустили, но о результатах - не сказали.

Мне 12 строчка не нравится - переключаем выход на вход и удивляемся побочным эффектам

Ну вот это конкретика. Могу объяснить почему именно так:

Вот у нас упрощенное устройство одного входа/выхода

Мы имеем подозрение что у нас "сгоревший порт".
Что будет если мы дадим на него HIGH, а в итоге имеем LOW по факту? Как это может проиходить?  А к примеру если у нас нижний диодик сгорел не в обрыв, а в КЗ.
Теперь что будет если мы на подобный вход попробуем дать HIGH? (подключем его к VCC). Мы получим "короткое замыкание". Через навернувшийся диод пойдет сильнейший ток, который начнет нагревать камень и может его "добить до конца". Хотя,даже со сгоревшей ногой, им можно продожать пользоваться. Просто не использовать D3.
Поэтому сам тест я проводил "включаем светик на три секунды". Достаточно что-бы понять "работает ли", а если нет... то шансы "навредить еще больше" - снижены. Через три секунды, мы все возвращаем в "изначальное состояние". Пин включаем на вход, отключаем подтягивающий. Возвращаем все "как было" при включении контроллера (INPUT+LOW).
Сугубо из принципа "не навреди", так как мы не имеем уверенности что все это запускается на не поврежденном камне.

Вообщем "проверл тест" - верни все как было.

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

vdk пишет:

Мне 12 строчка не нравится - переключаем выход на вход и удивляемся побочным эффектам

А 13-тая, подает туда LOW. Все выключилось. Никаких "полтергейсов". Ничего не горит. 
Жалобы "горит тускло" - явно относились не к тесту #7
Там описание поведения должно было звучать так: "включился на 3 секунды и погас".
Никаких удивление на побочные эффекты (их просто нет) - этот тест просто не запускали.
Все жалобы на побочные эффекты - относились к изначальному скетчу.

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

А 13-тая, подает туда LOW. Все выключилось. Никаких "полтергейсов". Ничего не горит. 

Допустим, я прогоняю тест. "Ага, один работает. А несколько?". Копирую несколько раз нужные фрагменты. Далее думаю, что пусть светодиоды не тухнут и горят, и удаляю 13-е строки, но по ошибке в первом фрагменте удаляю сразу две соседних строки - 12 и 13. В результате и получаем ситуацию, когда один светодиод горит ярко, а остальные еле тлеют. "Что за фигня? Неужели что-то все-таки с платой не так?"

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

Помоему в вас уже явно говорит "дух противоречия".

vdk пишет:

leshak пишет:

А 13-тая, подает туда LOW. Все выключилось. Никаких "полтергейсов". Ничего не горит. 

Допустим, я прогоняю тест. "Ага, один работает.


И все. Об этом и нужно сообщить на форуме. Было подозрение что D3 сгоревший. Тестом выяснили что "железо в норме". Значит нужно все-таки еще раз внимательно смотреть что не так и изначальным скетчем.
Вы высказали жалобу, вам перечислили действия "для диагностики". Нужно их выполнить и сообщить что получилось.

vdk пишет:

А несколько?". Копирую несколько раз нужные фрагменты. Далее думаю, что пусть светодиоды не тухнут и горят, и удаляю 13-е строки, но по ошибке в первом фрагменте удаляю сразу две соседних строки - 12 и 13. В результате и получаем ситуацию, когда один светодиод горит ярко, а остальные еле тлеют. "Что за фигня? Неужели что-то все-таки с платой не так?"

То есть вы спросили совет, вам сказали что нужно сделать, вы сделали "по своему", вы накосячили... а виноват тот кто сказал что нужно делать?
Помоему очевидно кто в этой ситуации "сам себе злобный буратино".
А совсем не "строка 12-ть".

Кстати привыкайте. Что один и тот же пин, "по ходу пьессы" может менять свой режим "вход/выход" несколько раз. Что это не та вещь которую "один раз выставил в setup() и все" (хотя согласен что в большинсве случае это именно так).
Более того.... в целях безопастности (защиты от все тех же ошибок подключения, статики и т.п.) если мы знаем что он нам долго не потребуется, то его даже РЕКОМЕНДУЕТСЯ включать на вход. В режиме INPUT у ноги выживаемость гораздо выше, если снаружи прилетело "что-то не то".

 

vdk
Offline
Зарегистрирован: 14.04.2013

leshak пишет:

Помоему в вас уже явно говорит "дух противоречия".

Дык, не с той стороны зашли. Я так считаю

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

vdk пишет:

leshak пишет:

Помоему в вас уже явно говорит "дух противоречия".

Дык, не с той стороны зашли. Я так считаю

Да почему же "не с той"?  Подозрение на железо.... Значит нужно "просто включить". Максимально просто. Один светик. Без массивов, циклов и пременных. Что-бы исключить вероятность ошибки програмной.
Так как есть опасения в неисправности камня (и что удаленный человек вовремя заметит разогрев и т.п.) - лучше на долго не выключать. Отсюда и выключение после.
Так как это опять-таки удаленно, то что-бы не объяснять "возмите тестер... в течении трех сек. успейте померять" - используем тот тестер который есть под рукой. Serial.println(diditalRead()); Ну да, в принципе это можно было-бы и опустить... вернее оставить на "следующую итерацию" (если светик не зажегся). Но опять, таки. Так как это "форум" и цикл вопрос-ответ достаточно длительный... желательно собрать максимум ифны за один раз.
Цель скетча - проверить версию. Не более того. После чего он выкидыает. И как "база для дальнейшего развития" - совершенно не планировался.
 

vdk
Offline
Зарегистрирован: 14.04.2013

(не, что-то не получается у меня сформулировать)

robots
Offline
Зарегистрирован: 01.02.2015

Есть машинка на ардуино уно.Хочу,чтобы приезжала из одной комнаты в другую,но машинка нестабильно поварачивает.Что можно сделать для стабилизации поворотов?