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

Просто у меня это было «как сюжет фильма-комедии» :smiley:

А я вот так подумал, а вот реально где написано, что если считал величину, та надо её и использовать для дальнейшего? А не первую попавшуюся переменную? Вот правда? Где написано, что прежде, чем какать надо штаны снять? Похоже, прав ТС - “ни где”! И как быть?

это кто с родительским ремнем не впитал - то уже все, так в грязных штанах всю жизнь и будет ходить…

Да… и эти люди рассуждают о минимальной продолжительности сигнала))

Вам надо бы сюда сначала

1 лайк

Ошибиться то каждый может, не зазорно, но здесь видно, что ТС упорно отрицает какое-либо чтение учебника, ибо это один из первых примеров для начинающих))

1 лайк

Беда в том, что одни новички пишут другим примеры с глупыми комментариями типа:

const int RE = A0;//подключаю реостат

Понятное дело, что человек, второй раз открывший IDE и закопистивший такую строку, искренне считает, что реостат подключен, то ардуина сама разберется откуда и чего брать.

Сделал так что-бы проверить .`const int RE = A0;//к А0 подключаю реостат
const int BU = 7;// к 7 выводу подключаю комп
const int OUT = 4;// с 4 выход
int val = 0;// переменная для хранения знач с реостата

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

}

void loop() {

val = map(analogRead(A0),0,1023,0,4000);// присваиваю новые значения к значениям реостата

digitalWrite(OUT, HIGH);//на выходе делаем HIGH
delayMicroseconds(val);// ждём паузу согласно реостату
digitalWrite(OUT, LOW);// опускаем OUT в LOW
delayMicroseconds(3000);

}`
Всё работает . То-есть светодиод меняет яркость в зависимости то поворота ручки реостата. Добавил в основной код, подключил к источнику сигнала на выходе тишина. У ардуино нет защиты от импульсов на входе? Я к тому что может какие нибудь импульсы вводят контролер в состояние защиты? С таким не сталкивались? Вот так выглядит основной код

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

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

}

void loop() {
  val = map(analogRead(A0),0,1023,500,3000);// присваиваю новые значения к значениям реостата
  while(digitalRead(BU) == LOW){// условие если на входе BU LOW  
    digitalWrite(OUT, HIGH);//на выходе делаем HIGH
    delayMicroseconds(val);// ждём паузу согласно реостату
    digitalWrite(OUT, LOW);// опускаем OUT в LOW
    while(digitalRead(BU) == LOW);//ждём следующего нажатия
  }
  

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

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

}

void loop() {
  
  val = map(analogRead(A0),0,1023,0,4000);// присваиваю новые значения к значениям реостата
    
    digitalWrite(OUT, HIGH);//на выходе делаем HIGH
    delayMicroseconds(val);// ждём паузу согласно реостату
    digitalWrite(OUT, LOW);// опускаем OUT в LOW
    delayMicroseconds(3000);
  
  

}
``` Так выглядит проверочный фрагмент кода.

Бредово выглядит. Какова по-Вашему логическая связь между строками №14 и №18? Как они взаимодействуют?

Это в основном коде или в проверочном?

Почему дважды while?

Это в том коде, перед которым написана процитированная мною фраза. Хотите понятнее - пишите понятнее сами.

Не понял к чему это? Причём дважды или трижды используется тот или иной опреатор. Вопрос был

Добавлю попутно: не надо засорять код очевидными комментариями. Не надо буквально описывать действия операторов. Надо писать на уровне алгоритма, а не оператора. Что-то вроде “при нажатии кнопки делаем то-то…”. Потом самому проще будет разобраться в своей писанине.

В 14й строке условие если выполняется то на 7-м выводе BU устанавливаем высокий уровень с продолжительностью val. В 18 строке но без параметров что останавливает код до следующей смены уровня сигнала.

Источник сигнала вывод с напряжением 18вольт . Через делитель в 5ть килоом на входе 7 выставляю 4 вольта. Идут прямоугольные импульсы на вход сигнала.

На вход ардуино.

@Juzame Не превращайте форум в “чатик”, редактируйте сообщение.

Чтобы 18 строка останавливала, надо:
while(digitalRead(BU) == HIGH);
И один хрен непонятна логика. Определённо, стоит работать над алгоритмом. Без него нет смысла в операторах копаться.

Простите, Вы читать умеете? Я же Вас спросил

При чём тут то, что Вы пишете?

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

Вопрос: скажите, пожалуйста, какой уровень на пине BU (другими словами, какое значение будет возвращать digitalRead(BU)) в тот момент, когда исполнение строки №18 закончится и программе перейдёт к строке №19?

Пожалуйста простой ответ: HIGH или LOW. Не надо пространных рассуждений.