Автор Тема: Arduino - странно поведение  (Прочетена 18745 пъти)

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« -: Май 13, 2010, 09:31:52 am »
Здравейте,
Правя този урок за Ардуино http://www.ladyada.net/learn/arduino/lesson5.html но ми се струва, че нещо не е наред с пиновете.
Кодът е този:

int switchPin = 2;              // Switch connected to digital pin 2

void setup()                    // run once, when the sketch starts
{
  Serial.begin(9600);           // set up Serial library at 9600 bps
  pinMode(switchPin, INPUT);    // sets the digital pin as input to read switch
}


void loop()                     // run over and over again
{
  Serial.print("Read switch input: ");
  Serial.println(digitalRead(switchPin));    // Read the pin and display the value
  delay(100);
}

Значи странното е, че серийният монитор показва "Read switch input: 1" дори когато пинът е свободен. После вкарвам един проводник в пин-а, за да го свържа с бредборда и в момента, в който докосна пин-а той започва да показва 0. Но не за дълго! Започват да се сменят 0 и 1. Смених на друг пин и пак същото. Изобщо държи се много странно.
Кодът е съвсем прост и не виждам какво може да се обърка. Ако не се лъжа това трябва да покаже 1 само ако подам електричество към пин 2 нали?
Едит: Пробвах пинове от 2 до 10 s digitalRead. Имат напълно безразборно поведение. Стойностите се сменят като пипна черните цокълчета, в които се слагат проводниците. Дори някои се сменят като вдигна платката от масата.
Ангел Колев, София

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
Arduino - странно поведение
« Отговор #1 -: Май 13, 2010, 10:02:33 am »
пиновете на микроконтролерите се влияят от статично електричество и това не е ненормално.

Можеш ли да дадеш схемата, с която си пробвал. И ползваш ли PULL DOWN резистор както е указано в инструкциите на ladyada.

Информация за отчитане на бутон има и на български
Симеон Янчев, София
www.robotev.com

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« Отговор #2 -: Май 13, 2010, 10:24:20 am »
Пробвах същата схема, която е в урока, но понеже нямам 100 омов резистор сложих 220 ома. Това го забелязах още преди да стигна до момента с pull-down резистора. Платката изпраща различни стойности по серийния дори без да има нищо в пиновете. Пзил съм я от статично електричество, защото съм наясно с него (в работата ми използвам гривна).
Ангел Колев, София

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
Arduino - странно поведение
« Отговор #3 -: Май 13, 2010, 10:37:24 am »
След като сложиш pull down резистор променя ли се поведението? Без pull down резистор е нормално показанията да "играят" между 0 и 1.
Симеон Янчев, София
www.robotev.com

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« Отговор #4 -: Май 13, 2010, 10:47:44 am »
Ами в момента немога да правя тестове, защото съм на работа. Чак довечера. Има ли някаква стандартна процедура, с която да проверя всичко в платката дали работи както трябвя?
Ангел Колев, София

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« Отговор #5 -: Май 13, 2010, 11:08:03 am »
Намерих отговора и в сайта на ардуино. Мерси на Симеон за помощта.
Цитат
If you disconnect the digital i/o pin from everything, the LED may blink erratically. This is because the input is "floating" - that is, it will randomly return either HIGH or LOW. That's why you need a pull-up or pull-down resistor in the circuit.

link: http://www.arduino.cc/en/Tutorial/Button
Ангел Колев, София

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
Arduino - странно поведение
« Отговор #6 -: Май 13, 2010, 11:10:15 am »
не знам за стандартна процедура, но може да ги изпробваш един по един - със светодиод за да видиш дали се държат добре като изходи; и с бутон за да ги тестваш като входове.

Аналоговите входни пинове се изпробват най-лесно с потенциометър.
Симеон Янчев, София
www.robotev.com

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Arduino - странно поведение
« Отговор #7 -: Май 13, 2010, 02:04:36 pm »
Зa бутоните трябват кондезаторчета от пина към маса 100нФ може и 1мкФ, ако нямаш направено софтуерно елиминиране на претрепването и  статични електричества и т.н.

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« Отговор #8 -: Май 13, 2010, 02:26:13 pm »
Значи винаги когато ползвам дигитален вход в арудино трябва да слагам по един пулл даун/ъп резистор за да "нулирам" пина?
Ангел Колев, София

mivr

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 118
    • Профил
Arduino - странно поведение
« Отговор #9 -: Май 13, 2010, 07:18:09 pm »
и аз имах същият проблем до скоро но когато сложих пина да е вързан към маса(когато не е натиснат бутона) и към +(когато е натиснат) и всичко се оправи
Михаил Врачaнски 19год. В ТУ-София Автоматика

Skype: mivrmmm

email: [email protected]

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
Arduino - странно поведение
« Отговор #10 -: Май 13, 2010, 08:47:03 pm »
Мдам и това е задължително винаги да е определено началното състоянието на използвания изход. Аз си ги слагам на 1 да са и работното им състояние да е 0 при натиснат бутон и пак повтарям задъжително кондезаторче, ако няма софтуерно елиминиране на претрепването на ключа.

anio

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 110
    • Профил
Arduino - странно поведение
« Отговор #11 -: Май 14, 2010, 10:59:54 am »
Като минах частта от урока със pull-up и pull-down резисторите всичко си дойде на мястото и пина чете съответно 0 или 1.
@tommyboy - не съм наясно с кондензаторите и в случая незнам как да го използвам и дали изобщо има смисъл от него след като с резистор си е ОК.
Ангел Колев, София

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
Arduino - странно поведение
« Отговор #12 -: Май 14, 2010, 01:09:58 pm »
tommyboy е прав. без кондензатор или софтуерно елиминиране на потрепването пина може да премине няколко пъти между 0 и 1 в моментите когато бутонът се натиска или отпуска. Това става много бързо и със светодиод трудно се забелязва, но ако логиката на програмата изисква да се следи абсолютно точно всяко натискане на бутона (например да се брои точно колко пъти е натиснат) тогава има нужда да се елиминира потрепването. На английски се нарича debounce.

Пример за софтуерно елиминиране на потрепването с Ардуино.
Симеон Янчев, София
www.robotev.com