При нажатии кнопки подать на выход импульс 1мс. Ардуино

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

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

В ардуино не силен..... ближайшее что подходит это вот такое:

int ledPin = 13;
int inPin = 8;
int DoorOld = 0;
int DoorNew = 0;

void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT);
digitalWrite(inPin, HIGH);
}

void loop()
{
DoorNew = digitalRead(inPin);
if (DoorOld != DoorNew)
{
digitalWrite(ledPin, HIGH);
DoorOld = DoorNew;
delay(500);
digitalWrite(ledPin, LOW);
Serial.println(DoorNew);
}
delay(500);
}

Только тут идет импульс при любом изменении кнопки (т. е. нажал идет импульс, отпустил - снова импульс) а нужно чтобы только при нажатии.

Подскажите как подкорректировать скетч чтобы он выдавал только 1 импульс при нажатии кнопки а при отпускании не реагировал.
Изготовление печатных плат + материалы для изготовления плат
Реклама
Друг Кота
Сообщения: 5248
Зарегистрирован: Вт авг 26, 2008 14:36:02
Откуда: москва

Сообщение сэм »

одновибратор (не путать с вибратором) вам в руки
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Код: Выделить всё

int ledPin = 13;
int inPin = 8;
int DoorOld = 0;
int DoorNew = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);
  digitalWrite(inPin, HIGH);
}

void loop() {
  DoorNew = digitalRead(inPin);
  if (DoorOld != DoorNew && DoorNew == 1) {
    digitalWrite(ledPin, HIGH);
    delay(2);
    digitalWrite(ledPin, LOW);
    DoorOld = DoorNew;
    Serial.println(DoorNew);
  }
  else if (DoorOld != DoorNew)
    DoorOld = DoorNew;
}
Как-то так. А то пишите про 1-2 мс, а сами ставите 2 задержки по 500 мс.

Но вообще это всё решается на одной копеечной микрухи логики + немножко пассивной обвязки.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

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

Сейчас идет 1 импульс но увы при отпускании кнопки (нужно чтобы при нажатии).
Последний раз редактировалось sputnic1436 Пн ноя 16, 2020 14:00:07, всего редактировалось 1 раз.
Изготовление печатных плат + материалы для изготовления плат
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Схему или описание подключения тогда давать нужно было. Сами что-ли не видите совсем что исправить 1 на 0 надо просто? Тогда вот так:

Код: Выделить всё

int ledPin = 13;
int inPin = 8;
int DoorOld = 0;
int DoorNew = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);
  digitalWrite(inPin, HIGH);
}

void loop() {
  DoorNew = digitalRead(inPin);
  if (DoorOld != DoorNew && DoorNew == 0) {
    digitalWrite(ledPin, HIGH);
    delay(2);
    digitalWrite(ledPin, LOW);
    DoorOld = DoorNew;
    Serial.println(DoorNew);
  }
  else if (DoorOld != DoorNew)
    DoorOld = DoorNew;
}
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

Спасибо, заработало.
Если бы я занимался программированием ардуинок то да, это легко.... а так только начинаю читать Джереми Блума.
Там схемы особенно то нет... китайцы как обычно написали кривую прошивку на контроллер платы управления точечной сваркой (держишь конечник - жжет пока не отпустишь (хотя и параметры импульсов и задержек установлены) а вот когда отпустишь то тогда выполняет программу + как только появится дребезг контакта так контроллер ждешь и 30 а иногда и 300 секунд пока "переварит"). В общем раздражает + иногда выходит брак.
Вот и пытаюсь выйти из положения - между конечником и контроллеров впихнуть ардуинку которая выдаст на плату гарантированно импульс длиной 2мс (минимальный импульс что можно задать на плате управления точечной сваркой).
Последний раз редактировалось sputnic1436 Пн ноя 16, 2020 14:18:32, всего редактировалось 1 раз.
Изготовление печатных плат + материалы для изготовления плат
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

sputnic1436, ну как-то же частично написали, хоть и неправильно ) Дальше ведь можно было чуть-чуть самому посмотреть и сравнить. Ну да ладно.

PS: И еще раз вам говорю - тут целая ардуина и не нужна. Подобное решается простым одновибратором, как уже выше писали: https://digteh.ru/digital/OdnVib.php
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

Одновибратор то хорошо... но тут уже как говорится уже захотелось за зиму научиться писать скетчи для ардуино (или хотябы редактировать их под себя). Есть много вещей которые хотелось бы собрать/сделать под себя.
Поэтому было решено делать на ардуино + потихоньку начинаю подчитывать Блума.... правда туго доходит... далеко не 18 то уже.
Изготовление печатных плат + материалы для изготовления плат
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

По адуринкам:
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
и
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
...
Правда я "закоренелый сепар" (с некоторой точки зрения)...
8)
Ответить

Вернуться в «AVR»