ШИМ

winziwul
Offline
Зарегистрирован: 05.03.2014

вот накидал скейч, по нему всё работает но проблема в том что на дисплей выводится от 0 до 250, а я хочу сделать что бы выводилось в процентах, то-есть 0-0% до 250-100%, всю голову сломал но не пойму как уровень сигнала шим перевести в процены на дисплее, будет в дальнейшем две пары кнопок и два выхода шим, но с этим проблем нет это я сам допишу

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
 
int led = 11;         //  Номер Pin к которому подключен диод
int brightness1 =0;    //  Переменная в которой хранится уровень яркости (От 0 до 250) 
int buttonPlus=9;     //  Номер Pin к которому подключена кнопка  
int buttonMinus=10;   //  Номер Pin к которому подключена кнопка -
 
 
void setup()  { 
  pinMode(led, OUTPUT); // Порт 11 (led) будет работать как Выход.
   // initialize serial communication at 9600 bits per second:
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  
  display.clearDisplay();     // очистка экрана и буфера
  display.setTextSize(2);     // установка размера текста
  display.setTextColor(WHITE);
  //delay(1000);
void loop()  { // Этот цикл будет выполняться бесконечное количество раз.
  if (digitalRead(buttonPlus) == HIGH) { 
    brightness   +=   25; 
    display.print(brightness);
  }   // Делаем проверку, если вход под номером 9 (buttonPlus) имеет состояние  5 В. Увеличиваем значение переменной яркости на 5 единиц.
  if (digitalRead(buttonMinus) == HIGH) { 
    brightness -=  25; 
    display.print(brightness);
  }   // Делаем проверку, если вход под номером 10 (buttonMinus) имеет состояние  5 В. Уменьшаем значение переменной яркости на 5 единиц. 
  brightness1 = constrain(brightness, 0, 250); // Эта функция контролирует, что бы переменная brightness не стала больше 250 и меньше 0, если значение вылазит за границу то функция 0 или 250
  analogWrite(led, brightness);    // Устанавливаем состояние яркости для светодиода 
  delay(50); // Пауза 50 миллисекунд.   
 
  
}
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

здец какой то ! 

1% = 100 / 250;

дальше умножайте полученый 1% на число которое пихаете в ШИМ.

еще есть функция map(), но об этом я даже боюсь зарекаться......

b707
Offline
Зарегистрирован: 26.05.2017

да уж, уже и проценты от 250 начали в форуме спрашивать. Скоро заведем тему "В помощь новичку - Таблица умножения" в прикрепленных :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Мда, мельчает народ :)

Неужели в школе не учат простейшим преобразованиям?

МАКСИМАЛЬНОЕ_ЧИСЛО = 100%

ПРОВЕРОЧНОЕ_ЧИСЛО = x%

x * МАКСИМАЛЬНОЕ_ЧИСЛО  == ПРОВЕРОЧНОЕ_ЧИСЛО  * 100

x = (ПРОВЕРОЧНОЕ_ЧИСЛО  * 100) / МАКСИМАЛЬНОЕ_ЧИСЛО

Получили x в процентах от максимального. Какой это класс, друзья - кто помнит? Четвёртый? Пятый?

winziwul
Offline
Зарегистрирован: 05.03.2014

да смешно, я не идеот и посчитать проценты могу, прочитайте вопрос, как заставить дисплей показывать проценты, если вы обратите внимание на  display.print(brightness); то поймёте что он выводит яркость  а надо проценты, какой командой задать ему эту задачу

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

да уж, уже и проценты от 250 начали в форуме спрашивать. 

Почитайте вот эту тему. Даже не обязательно стартовый пост. Достаточно только заголовок и сообщения №№ 1 и 2 - они короткие

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

winziwul пишет:

я не идеот

Точно?

winziwul пишет:

как заставить дисплей

Попробуйте в таком порядке:

1. Убеждением
2. Шантажом
3. Угрозами
4. Пытками

В общем, сделайте ему предложение, от которого он не сможет отказаться. 

Известно ведь, что добрым словом можно творить чудеса, но доброе слово, подкреплённое пистолетом - ещё эффективнее.

 

winziwul
Offline
Зарегистрирован: 05.03.2014

если я правельно понял то надо добавить функцию

const int motor31 = 2; 
const int motor32 = 3; 
const int motor33 = 4; 
const int motor34 = 5; 
 
в моём случае
const int brightness25 = 10; 
const int brightness50 = 20; 
const int brightness75 = 30; 
 и так далее

и вывести на дисплей константу

b707
Offline
Зарегистрирован: 26.05.2017

winziwul пишет:

если я правельно понял то надо добавить функцию

const int motor31 = 2; 
const int motor32 = 3; 
const int motor33 = 4; 
const int motor34 = 5; 
 
в моём случае
const int brightness25 = 10; 
const int brightness50 = 20; 
const int brightness75 = 30; 
 и так далее

и вывести на дисплей константу

НеправЕльно ты понял. Все-таки - идЕот.

Купи учебник математики 5-ого класса (специально для тебя посмотрел в Яндексе, когда изучают проценты в школе). И учебник русского, чтобы писать грамотно.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ЕвгенийП пишет:

b707 пишет:

да уж, уже и проценты от 250 начали в форуме спрашивать. 

Почитайте вот эту тему. Даже не обязательно стартовый пост. Достаточно только заголовок и сообщения №№ 1 и 2 - они короткие

смотрю на дату регистрации 0_0

и тут и там "Эффект Бенджамина Баттона" в действии... грустно.

 

winziwul
Offline
Зарегистрирован: 05.03.2014

всем спасибо за "помощь"

b707
Offline
Зарегистрирован: 26.05.2017

winziwul пишет:

всем спасибо за "помощь"

в ответе #1 вам все правильно написали. Если купите учебник и сравните - убедитесь, что и там то же самое написано. Остается только понять.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

winziwul пишет:

всем спасибо за "помощь"

Не за что. Когда Вам потребуется сложить два числа, обращайтесь, поможем.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

winziwul пишет:

всем спасибо за "помощь"

Не за что. Когда Вам потребуется сложить два числа, обращайтесь, поможем.

Ну и кому это умение нужно? Нынче отнимать и делить востребовано. И проценты левые у вас какие-то, как не пересчитываю, чушь полная. Еще со школы помню, если купить за рупь, а продать за три, то это всего жалкие 2%. А в вашей, типа формуле, какие то цифры безумные лезут, эдак и по миру пойти недолго.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

Ну и кому это умение нужно? Нынче отнимать и делить востребовано.

И то верно. O tempora, o mores!