Два канала светодиодов

Индикаторы, дисплеи, светодиоды и т.п.
Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Два канала светодиодов

Сообщение Serg42 » 05 апр 2018, 19:35

Здравствуйте, Эдуард! Столкнулся с необходимостью (НУ ХОЧЕТСЯ МНЕ! :D ) сделать в паяльной станции индикацию нагрева, точнее процесса нагрева (кроме индикаторов конечно) на бегущей строке из 5 светодиодов в каждой группе. В принципе ничего не было сложного, пока не начал "скрещивать" два канала вместе, т.е. управление канолом 2---6 осуществляется по выводу 7, по каналу 9---13 по выводу 8. Я так понимаю, нужно использовать параллельные процессы?

Код: Выделить всё

#define FIRST_LED_PIN 9
#define LAST_LED_PIN 13
const int buttonPin = 8;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status

 void setup()
  {

  for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
  pinMode(pin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  digitalWrite(buttonPin, HIGH);
  }

  void loop() {
  buttonState = digitalRead(buttonPin); 
  unsigned long int buttonState = millis();
  int FAN;
  if (digitalRead(buttonPin) == HIGH) {
  FAN = LAST_LED_PIN - (buttonState / 120) % 10;
  int pin = FAN;
  digitalWrite(pin, HIGH);
  delay(10);
  digitalWrite(pin, LOW);
   
  }
 }



Код: Выделить всё

#define FIRST_LED_PIN 2
#define LAST_LED_PIN 6
const int buttonPin = 7;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status

 void setup()
  {

  for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
  pinMode(pin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  digitalWrite(buttonPin, HIGH);
  }

  void loop() {
  buttonState = digitalRead(buttonPin); 
  unsigned long int buttonState = millis();
  int SOLDER;
  if (digitalRead(buttonPin) == HIGH) {
  SOLDER = FIRST_LED_PIN + (buttonState / 120) % 10;
  int pin = SOLDER;
  digitalWrite(pin, HIGH);
  delay(10);
  digitalWrite(pin, LOW);
   
  }
 }



Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Два канала светодиодов

Сообщение Serg42 » 05 апр 2018, 19:43

PS выводы 7 и 8 естественно подключены не к кнопкам, они управляются уровнями с PIC контроллеров.

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Два канала светодиодов

Сообщение Эдуард » 05 апр 2018, 20:33

Здравствуйте!
Я ничего не понял в программе.

Код: Выделить всё

buttonState = digitalRead(buttonPin); 
unsigned long int buttonState = millis();

Странные строчки. Но в общем случае для реализации двух временных процессов надо либо в прерывании по таймеру формировать импульс 10 мс на светодиоде, либо все отсчитывать через функцию millis().

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Два канала светодиодов

Сообщение Serg42 » 06 апр 2018, 14:30

buttonState = digitalRead(buttonPin); это наверное лишняя строка ))))
unsigned long int buttonState = millis(); а здесь время, прошедшее после нажатия кнопки
О программе. При нажатии (изменении уровня) на входе 7 (8) поочередно включаются 5 светодиодов.

Serg42
Сообщения: 29
Зарегистрирован: 01 авг 2017, 18:46

Re: Два канала светодиодов

Сообщение Serg42 » 13 апр 2018, 18:58

Всё оказалось банально просто....Пропустил скобочку ))) Кому интересен код, выкладываю.

Код: Выделить всё

#define FIRST_LED_PIN 2
#define LAST_LED_PIN 13

const int buttonA = 7;   
const int buttonB = 8;

void setup()
  {
  for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
  pinMode(pin, OUTPUT);
  pinMode(buttonA, INPUT_PULLUP);
  pinMode(buttonB, INPUT_PULLUP);
  digitalWrite(buttonA, HIGH);
  digitalWrite(buttonB, HIGH);
  }

void loop() {
  int P = (millis() / 200) % 5;
 
  //горят 2,3,4,5,6 управление кн.А
  if (digitalRead(buttonA) == LOW) {
  int pin = FIRST_LED_PIN + P;
  digitalWrite(pin, HIGH);
  delay(10);
  digitalWrite(pin, LOW);
   }

  //горят 9,10,11,12,13 управление кн.В
  if (digitalRead(buttonB) == LOW) {
  int pin = LAST_LED_PIN - P;
  digitalWrite(pin, HIGH);
  delay(10);
  digitalWrite(pin, LOW);
  }
 }



Небольшое пояснение: Во второй части, где горят 9,10... поставил LAST_LED_PIN - P потому, что при проектировании печатной платы "перевернул" разъём, по этой причине светики бежали не снизу вверх, как мне нужно было, а наоборот. Чтобы не переделывать плату перевернул код)))


Вернуться в «Компоненты отображения информации»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей