Не выходит короткий импульс

Всем привет. Такая проблема. Я в ардуино совсем новичок. Попробовал моргать светодиодом получилось, а вот от руки не получается. Схема простая один светодиод одна кнопка. Жму на кнопку и должен получить кроткую вспышку. Вместо этого получаю долгую вспышку примерно секунд на семь. Прошу помощи как сделать чтобы всё работало по выше описанному сценарию. Вот код. Там ещё реостат что бы менять длительность импульса.

const int RE = A0;//подключаю реостат
const int BU = 7;//подключаю комп
int val = 0;// переменная для хранения RE
const int OUT = 10;// выход

void setup() {
pinMode (OUT, OUTPUT);

}

void loop() {
if (digitalRead(BU)==HIGH){
digitalWrite(OUT,HIGH);
delay(2);
digitalWrite(OUT,LOW);
}

}

Быстрее кликать надо ))

1 лайк

Начните с того, чтобы вставить код по правилам форума.
Затем приведите схему.
К примеру, есть два варианта правильного подключения кнопки, а ещё есть неправильные…

1 лайк

Мозгами кликать надо. Ну он же видит, с…(собачка), как люди код вставляют, так почему не сделать так же! А потому что мозгов недостаточно. Поэтому и результата не будет никакого.

Где?

Код на этом форуме выглядит примерно вот так:

void setup(void) {
}

void loop(void) {
}

Ничего похожего я у Вас не нашёл.

Не выходит каменный цветок.

1 лайк


схема примерно выглядит так .

Вот такой код
const int RE = A0;//подключаю реостат
const int BU = 7;//подключаю комп
int val = 0;// переменная для хранения RE
const int OUT = 3;// выход

void setup() {
pinMode (OUT, OUTPUT);

}

void loop() {
if (digitalRead(BU)==HIGH){
digitalWrite(OUT,HIGH);
delay(2);
digitalWrite(OUT,LOW);
}

}

const int RE = A0;//подключаю реостат
const int BU = 7;//подключаю комп
int val = 0;// переменная для хранения RE
const int OUT = 3;// выход


void setup() {
  pinMode (OUT, OUTPUT);

}

void loop() {
if (digitalRead(BU)==HIGH){
  digitalWrite(OUT,HIGH);
  delay(2);
  digitalWrite(OUT,LOW);  
}

}
1 лайк

Тот случай, когда кнопка подключена в корне не верно.

Но это не решит проблему, надо после обнаружения нажатия кнопки, моргнуть и дождаться когда ее отпустят.

ну хоть вот так, по дешману

const int RE = A0;//подключаю реостат
const int BU = 7;//подключаю комп
int val = 0;// переменная для хранения RE
const int OUT = 3;// выход


void setup() {

  pinMode (OUT, OUTPUT);
  pinMode (BU, INPUT_PULLUP);
  
}

void loop() {

  if (digitalRead(BU) == LOW) {
    digitalWrite(OUT, HIGH);
    delay(2);
    digitalWrite(OUT, LOW);
    while(digitalRead(BU) == LOW);
  }

}
1 лайк

Сколько держите кнопку, столько и получаете. Только не одну длинную вспышку, а кучу коротких (по 2 миллисекунды). У Вас же это написано? Или как Вы понимаете свой “код”?

Держу четверть секунды может меньше. Кучу коротких не получаю получаю одну длинную примерно секунд на 7 . До этого параметром для delay было 100, вот тогда вспышка была примерно секунд 15.

Вам же объяснили, что кнопка подключена неправильно(рис.#7),
и дали рабочий вариант(#11), что ещё не так?

Вас понял, с кнопкой разберусь. Я во о чём. Можно сделать так что-бы при переходе с низкого на высокий уровень на выходе появлялся один импульс? То-есть что бы импульс появлялся при переходе уровня сигнала.

Всё это сможете сделать, хоть в цикле loop(), хоть с помощью прерывания по изменению лог.уровня на пине.
Но надо будет немного подучиться

По умолчанию все пины подтянуты к плюсу?

Ответ - нет.

1 лайк

Понимаю что наглею, но не могу не поинтересоваться, где можно подучиться, ну или где поискать того кто скажет где можно подучиться .

Сам ещё учусь. Поэтому скажу не преувеличивая - всё что надо, по Ардуино, я сполна нахожу в интернете. В том числе и здесь, на форуме. Главное - освоить поиск (гугл, яндекс, и.т.д), правильно задавать вопросы/запросы.
Например: “Ардуино для начинающих”. Или: “ардуино , прерывания по изменению уровня сигнала”

P.S. Здесь на форуме тоже есть строка поиска, очень удобно.