Регулировка длительности импульса
- Войдите на сайт для отправки комментариев
Вс, 17/05/2020 - 13:54
Добрый день! Подскажите пож. кто разбирается, частота 1 Гц, прямоугольный импульс, нужно сделать регулировку ширины импульса от 0 до 100 % , т.е при 0% светодиод не светиться, на 50% 0,5 сек горит 0,5 сек не горит, на 100% светиться непрерывно, код на делай ниже. пробовал на миллис не выходит, как мне от делай избавиться? % меняются согласно положению переменного резистора.
void loop() {
x=analogRead(A1);
x = constrain(x, 0, 1000);
int a = map(x, 0, 1023, 0, 100);
//int b = map(analogRead(A0), 0, 1023, 0, 100);
disp.displayInt(a);
y=1000-x;
digitalWrite(0,HIGH);
delay(x);
digitalWrite(0,LOW);
delay(y);
}
Что делает строка 8?
1. в песочницу
2. а лучше удалить и читать "блинк без делей" до простветления.
Скорее всего, очередное бессмысленное учебное задание.
ТС! Вот представь, что ты столяр. Приходит дитё и говорит: "Я раньше гвоздями все крепил, а теперь мне шурупы дали, как его ловчее молотком забить?". Первому ты отвечаешь, что нужна отвертка, второму, третьему, тридцатому... а сотому говоришь "Иди нахер!".
Так вот понятно?
Кстати вариант - черным маркером. А почему нет?
Ну началось.... опять «умники» пис*ками меряются)))) ведь просил кто знает, у не у кого длиннее, про песочницу не спорю, надо было туда, действительно. Ту статью про delay читал, не особо понял, «умники» зафлудили путный топик. 8 строка выводит показания на дисплей, это все работает, dalay убрать нужно чтоб другте задачи выполнять параллельно, может есть у когото кусочек кода для этих целей, без всяких там столяров и прочих безполезных бла бла бла
"блинк без делей» конечно работает, но там частота меняется от значения interval, при 50% заполнении, а у меня немного другая задача
Ну началось.... опять «умники» пис*ками меряются))))
Ну, началось, опять «дурики», вместо простых ответов на простые вопросы, начинают учить как им надо помогать.
может есть у когото кусочек кода для этих целей
А то! Держите! Вот Вам работающий "кусочек кода" - частота 1Гц, Процессор не занимает от слова совсем - по нулям. Заполнение задаётся функцией setBrightness (в строке №21 задано 64% для примера). Только что проверял на Nano - 100% работает.
// // ШИМ с частотой 1Гц на пине D9 // заполнение задаётся функцией setBrightness от 0% до 100% // constexpr uint8_t prescaler1024 = 5; constexpr uint16_t for1Hz = 15625; // // Установить яркость (0% - 100%) // inline void setBrightness(const uint8_t br = 50) { OCR1A = map(constrain(br, 0, 100), 0, 100, 0, for1Hz - 1); } void setup(void) { pinMode(9, OUTPUT); TCCR1A = bit(COM1A1) | bit(WGM11); TCCR1B = bit(WGM13) | bit(WGM12) | prescaler1024; ICR1 = for1Hz; setBrightness(64); } void loop(void) {}Только не говорите теперь, что Вам что-то непонятно, и не требуйте объяснений. Я пытался Вам объяснить, но Вам не нужны объяснения, Вам "кусочек кода" нужен. Вот и кушайте его с маслом.
"блинк без делей» конечно работает, но там частота меняется от значения interval, при 50% заполнении, а у меня немного другая задача
ДУрень! Вот код "блинк без делей" с этого сайта, с того на котором мы сейчас.
/* Blink without Delay 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen */ const int ledPin = 13; // номер выхода, подключенного к светодиоду // Variables will change: int ledState = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода long interval = 1000; // интервал между включение/выключением светодиода (1 секунда) void setup() { // задаем режим выхода для порта, подключенного к светодиоду pinMode(ledPin, OUTPUT); } void loop() { // здесь будет код, который будет работать постоянно // и который не должен останавливаться на время между переключениями свето unsigned long currentMillis = millis(); //проверяем не прошел ли нужный интервал, если прошел то if(currentMillis - previousMillis > interval) { // сохраняем время последнего переключения previousMillis = currentMillis; // если светодиод не горит, то зажигаем, и наоборот if (ledState == LOW) ledState = HIGH; else ledState = LOW; // устанавливаем состояния выхода, чтобы включить или выключить светодиод digitalWrite(ledPin, ledState); } }А вот код того, что тебе нужно. добавлено 6 строк и рамочки из "//////////////"
/* Blink without Delay 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen */ const int ledPin = 13; // номер выхода, подключенного к светодиоду // Variables will change: int ledState = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода long interval = 0; // интервал между включение/выключением светодиода (1 секунда) /////////////////////////////////////// long On_interval = 0; long Off_interval = 1000; byte inputPin = A1; /////////////////////////////////////// void setup() { // задаем режим выхода для порта, подключенного к светодиоду pinMode(ledPin, OUTPUT); //////////////////////////////////////////// interval = Off_interval; /////////////////////////////////////////// } void loop() { // здесь будет код, который будет работать постоянно // и который не должен останавливаться на время между переключениями свето unsigned long currentMillis = millis(); /////////////////////// On_interval = map(analogRead(inputPin),0,1023,0,1000); Off_interval = 1000 - On_interval; /////////////////////////// //проверяем не прошел ли нужный интервал, если прошел то if(currentMillis - previousMillis > interval) { // сохраняем время последнего переключения previousMillis = currentMillis; // если светодиод не горит, то зажигаем, и наоборот if (ledState == LOW) { ledState = HIGH; ////////////////// interval = On_interval; ////////////////// } else { /////////////// interval = Off_interval; ///////////////// ledState = LOW; } // устанавливаем состояния выхода, чтобы включить или выключить светодиод digitalWrite(ledPin, ledState); } }Ну ты кудесник!!! Буду пробовать спасибо большое)))
Граф,
а чем мой ШИМ не устроил? Вроде ж ТС написал
Или просто параллельно писали?
Я читал в Вашей статье, классно, но не хотелось мне с таймерами разбираться для столь «низменных» целей))) спасибо за труд!!!
Граф,
а чем мой ШИМ не устроил? Вроде ж ТС написал
Или просто параллельно писали?
обязательно буду использовать в следующих проектах!!!
Граф,
а чем мой ШИМ не устроил? Вроде ж ТС написал
Или просто параллельно писали?
Женя! Первое - да, писал параллельно. А второе то, что человек не мог осознать, что изменить в блинк-без-делей! Чисто педагогическая цель была.
Теперь нужно поставить ТС оценку за проделанную работу)))
ТС, а чтоб еще точней интервалы ШИМ выдерживались, замени millis() на micros(). Чего все на миллисе помешались)))
Ну и избався от map().