Страница 1 из 1

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

Добавлено: Пн ноя 16, 2020 12:52:19
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 импульс при нажатии кнопки а при отпускании не реагировал.

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

Добавлено: Пн ноя 16, 2020 12:54:42
сэм
одновибратор (не путать с вибратором) вам в руки

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

Добавлено: Пн ноя 16, 2020 12:59:11
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 мс.

Но вообще это всё решается на одной копеечной микрухи логики + немножко пассивной обвязки.

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

Добавлено: Пн ноя 16, 2020 13:53:44
sputnic1436
500мс было вбито для того чтобы было удобней по встроенному светодиоду проконтролировать срабатывание... потом задержку изменю на 2мс.

Сейчас идет 1 импульс но увы при отпускании кнопки (нужно чтобы при нажатии).

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

Добавлено: Пн ноя 16, 2020 14:00:04
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;
}

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

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

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

Добавлено: Пн ноя 16, 2020 14:17:52
NStorm
sputnic1436, ну как-то же частично написали, хоть и неправильно ) Дальше ведь можно было чуть-чуть самому посмотреть и сравнить. Ну да ладно.

PS: И еще раз вам говорю - тут целая ардуина и не нужна. Подобное решается простым одновибратором, как уже выше писали: https://digteh.ru/digital/OdnVib.php

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

Добавлено: Пн ноя 16, 2020 14:24:15
sputnic1436
Одновибратор то хорошо... но тут уже как говорится уже захотелось за зиму научиться писать скетчи для ардуино (или хотябы редактировать их под себя). Есть много вещей которые хотелось бы собрать/сделать под себя.
Поэтому было решено делать на ардуино + потихоньку начинаю подчитывать Блума.... правда туго доходит... далеко не 18 то уже.

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

Добавлено: Пн ноя 16, 2020 15:35:23
BOB51
По адуринкам:
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
и
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
...
Правда я "закоренелый сепар" (с некоторой точки зрения)...
8)