Arduino зависает на самой ПРОСТОМ СКЕТЧЕ
- Войдите на сайт для отправки комментариев
Чт, 25/08/2016 - 05:16
Доброго времени суток! Помогите пожалуйста, делаю САМЫЙ простой счетчик импульсов с 7-ми сегментным дисплеем(tm1637). Вот код: http://paste.ubuntu.com/23084999/ или http://paste.ubuntu.com/23085005/ вот фото блока питания http://radikal.ru/lfp/i057.radikal.ru/1608/e3/9102e46d595e.jpg/htm
Проблема заключается в том, что переменная перестает изменяться на 62, 188, 189, 288, 267 и вообще на любых числах примерно 3 раза за 20 минут. (подключаю через резистор 10 кОм к GND)
Пишу с телефона поэтому не получилось код вставить.
Вот, когда получится, тогда и поговорим.
Я не знаю, что за код Вы привели и какую именно библиотеку использовали.
Более того, Вы привели два РАЗНЫХ кода. И который из них не работает? Второй, так даже и не компилируется.
Заниматься расследованием никому нафиг не нужно. Нужна помощь - давайте полный код в нормальном виде.
Спасибо, что откликнулись! Подскажите в каком направлении искать причину... Вот с этим кодом зависает, если подключить к 7-ми сегментному дисплею. А если выводить значение переменной через Serial., то не виснет, перепробывал все библиотеки и различные значения delay(x); Может беда в коде?
А также пробывал все делать в ОДИН цикл, все равно зависает на числах до 300., причем значение выводилось на дисплей без задержки 2000мс. При таком скетче:
Использую вот такую библиотеку: http://www.arduino.md/wp-content/uploads/library/TM1637-4-digit-display-tube.zip
Попробуйте поставить небольшую задержку (ну, там 3-5 миллисекунд) между строками 27 и 28. Отпишитесь, что получилось.
не в коде дело,у Вас "импульсник",поставьте блок - кондёры по питанию сразу возле платы,и провода не больше 20 см,и всё у Вас должно получиться
Спасибо попробую. А как именно конденсатор ставить и какой емкости?
по питанию ,между "общим" и "+",ёмкость (0,1 мкФ керамика)+(4,7мкФ электролит) паралельно друг-другу, и перед платой!!!!
Я, конечно, не очень программист..., но мне кажется что в скетче считывается HIGH. Сколько раз его посчитают ни кому не известно. Должно быть как-то HIGH, LOW, ...короче, фиксировать пару.
Мне кажется пока выполняется Delay, много чего может произойти, тех же импульсов может проскочить туева хуча, а их ни кто и не защитает.
вы давайте не тупите. обявили s как int, переполняется и все. ардуина перезагружается.
вы давайте не тупите. обявили s как int, переполняется и все. ардуина перезагружается.
А как ее по другому объявить? Виснет при s до 300, а потом не разу не зависало, необходим подсчет максимум до 9000. Так почему же не int?
если вам не надо более 9000 то нужно описывать это в коде.
делей я бы вообще не использовал. millis тогда уж.
нужно оставить что то вроде этого если конечно дисплей при этом не гаснет..
if
(digitalRead(7)==HIGH)
2
{
3
s=s+1;
4
5
disp.display(s);
6
}
если вам не надо более 9000 то нужно описывать это в коде.
делей я бы вообще не использовал. millis тогда уж.
нужно оставить что то вроде этого если конечно дисплей при этом не гаснет..
if
(digitalRead(7)==HIGH)
2
{
3
s=s+1;
4
5
disp.display(s);
6
}
Большое спасибо за совет. Просто ситуация такая, что импульс появляется один раз в 5-10 секунд. Сейчас попробую с внешним прерыванием.
здравстуйте. удлиннил провода до 3 метров на датчик и экран, и ардуино начало виснуть. Нашел, пришлось отдельное питание на экран дать.
здравстуйте. удлиннил провода до 3 метров на датчик и экран, и ардуино начало виснуть.
Так его, этот I2C! Мало удлинил, надо удлинить ВНУТРИСХЕМНЫЙ интерфейс ещё больше - вытаскивай сразу метров на двадцать.
надо экранированный провод подключать и экран этого провода надо на землю подключать, и это действительно внутрисхемный интерфейс