помогите пожалуйста оптимизировать.

sparrow
Offline
Зарегистрирован: 04.12.2014

Вот нехитрый код:

int LedPin1=2;
int LedPin2=3;
int LedPin3=4;
int LedPin4=5;
void setup ()
{
pinMode(LedPin1,OUTPUT);
pinMode(LedPin2,OUTPUT);
pinMode(LedPin3,OUTPUT);
pinMode(LedPin4,OUTPUT);
}
void loop()
{
  digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,LOW);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,HIGH);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,HIGH);
  digitalWrite(LedPin4,LOW);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,HIGH);
  digitalWrite(LedPin4,HIGH);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,HIGH);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,LOW);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,HIGH);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,HIGH);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,HIGH);
  digitalWrite(LedPin3,HIGH);
  digitalWrite(LedPin4,LOW);
  delay (1000);
    digitalWrite(LedPin1,LOW);
  digitalWrite(LedPin2,HIGH);
  digitalWrite(LedPin3,HIGH);
  digitalWrite(LedPin4,HIGH);
  delay (1000);
    digitalWrite(LedPin1,HIGH);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,LOW);
  delay (1000);
    digitalWrite(LedPin1,HIGH);
  digitalWrite(LedPin2,LOW);
  digitalWrite(LedPin3,LOW);
  digitalWrite(LedPin4,HIGH);
  delay (1000)

это управление дешифратором для ламп. (газораз. индикаторы)

задача поочерёдно включать лампы (6 штук)  и прогонять от 0 до 9.

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

вопрос - как сделать, чтобы не писать всё вышеизложенное 6 раз. 

думал по цикл for, но чёт не догнал. 

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Создаете функцию, с этим кодом и потом вызываете ее когда нужно. Примерно так:
int LedPin1 = 2;
int LedPin2 = 3;
int LedPin3 = 4;
int LedPin4 = 5;
void setup ()
{
  pinMode(LedPin1, OUTPUT);
  pinMode(LedPin2, OUTPUT);
  pinMode(LedPin3, OUTPUT);
  pinMode(LedPin4, OUTPUT);
}

void proverka()
{
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, LOW);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, HIGH);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, HIGH);
  digitalWrite(LedPin4, LOW);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, HIGH);
  digitalWrite(LedPin4, HIGH);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, HIGH);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, LOW);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, HIGH);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, HIGH);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, HIGH);
  digitalWrite(LedPin3, HIGH);
  digitalWrite(LedPin4, LOW);
  delay (1000);
  digitalWrite(LedPin1, LOW);
  digitalWrite(LedPin2, HIGH);
  digitalWrite(LedPin3, HIGH);
  digitalWrite(LedPin4, HIGH);
  delay (1000);
  digitalWrite(LedPin1, HIGH);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, LOW);
  delay (1000);
  digitalWrite(LedPin1, HIGH);
  digitalWrite(LedPin2, LOW);
  digitalWrite(LedPin3, LOW);
  digitalWrite(LedPin4, HIGH);
  delay (1000);
}

void loop()
{
  proverka();
}

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
byte dcPin3 = 2;
byte dcPin2 = 3;
byte dcPin1 = 4;
byte dcPin0 = 5;

byte znPin5 = 11;
byte znPin4 = 10;
byte znPin3 =  9;
byte znPin2 =  8;
byte znPin1 =  7;
byte znPin0 =  6;

void setup ()
{
pinMode( dcPin3, OUTPUT );
pinMode( dcPin2, OUTPUT );
pinMode( dcPin1, OUTPUT );
pinMode( dcPin0, OUTPUT );

pinMode( znPin5, OUTPUT );
pinMode( znPin4, OUTPUT );
pinMode( znPin3, OUTPUT );
pinMode( znPin2, OUTPUT );
pinMode( znPin1, OUTPUT );
pinMode( znPin0, OUTPUT );
}

void loop()
{
  for ( byte n = 0; n < 6; n++ )
  {
    digitalWrite( n + 6, HIGH );
    for ( byte i = 0; i < 10; i++ )
    {
      digitalWrite( dcPin3, ( i & 0x08 >> 3 ) );
      digitalWrite( dcPin2, ( i & 0x04 >> 2 ) );
      digitalWrite( dcPin1, ( i & 0x02 >> 1 ) );
      digitalWrite( dcPin0, ( i & 0x01 >> 0 ) );
      delay (1000);
    }
    digitalWrite( n + 6, LOW );
  }
  while( 1 );
}
byte dcPin3 = 2;
byte dcPin2 = 3;
byte dcPin1 = 4;
byte dcPin0 = 5;

byte znPin5 = 11;
byte znPin4 = 10;
byte znPin3 =  9;
byte znPin2 =  8;
byte znPin1 =  7;
byte znPin0 =  6;

void setup ()
{
  Serial.begin( 9600 );
  
  pinMode( dcPin3, OUTPUT );
  pinMode( dcPin2, OUTPUT );
  pinMode( dcPin1, OUTPUT );
  pinMode( dcPin0, OUTPUT );

  pinMode( znPin5, OUTPUT );
  pinMode( znPin4, OUTPUT );
  pinMode( znPin3, OUTPUT );
  pinMode( znPin2, OUTPUT );
  pinMode( znPin1, OUTPUT );
  pinMode( znPin0, OUTPUT );
}

void loop()
{
  for ( byte n = 0; n < 6; n++ )
  {
    digitalWrite( n + 6, HIGH );
    for ( byte i = 0; i < 10; i++ )
    {
      digitalWrite( dcPin3, ( i & 0x08 >> 3 ) );
      digitalWrite( dcPin2, ( i & 0x04 >> 2 ) );
      digitalWrite( dcPin1, ( i & 0x02 >> 1 ) );
      digitalWrite( dcPin0, ( i & 0x01 >> 0 ) );
      Serial.print( "razrjad = " ); Serial.print( "\t" ); Serial.print( n, DEC ); Serial.print( "\t" );
      Serial.print( "digit = " );   Serial.print( "\t" ); Serial.println( i, DEC );
      delay (1000);
    }
    digitalWrite( n + 6, LOW );
  }
  while( 1 );
}

 

sparrow
Offline
Зарегистрирован: 04.12.2014

спасибо большое)