Помогите новичку. Проблема с кодом.

ArchiG
Offline
Зарегистрирован: 09.06.2014

Необходимо реализовать:

Управление пневмоцилиндром сделано одним пневмопереключателем - то есть управляется одним реле. При замыкании цилиндр идет в одну сторону, при размыкании в другую. На концах пневмоцилиндра устанавливаются герконы. 

Идет подсчет количества полных перемещений, то есть одно перемещение подразумевает полный ход туда и обратно. Вывод на восьми разрядный семисегментный индикатор. Требуется запоминание количества полных перемещений на случай отключения электричества.

Реализация:

Сильно просьба не пинать!!! В програмировании я не силен сильно.

Первоисточник кода вывода циферок взял тут http://www.instructables.com/id/5-8-Digit-Arduino-Counter/

Поставил две кнопки вместо герконов. Но где то в цикле похоже проблема. Потому как индикатор ждет первого нажатия и начинает выводить либо только 5ку, либо идет счет секунд с момента запуска (как было в исходном скетче). При повторном нажатии на любую кнопку не происходит абсолютно ничего...

Ребята, где собака порылась, которую я отыскать не могу?

Код:

//8 Digit Arduino Counter
#define A A4
#define B 13
#define C 10
#define D 9
#define E 8
#define F A1
#define G 11
// Pins driving common anodes
#define CA1 12
#define CA2 A3
#define CA3 A2
#define CA4 A5
#define CA5 7
#define CA6 6
#define CA7 5
#define CA8 4
// Pins for A B C D E F G, in sequence
const int segs[7] = {
  A4, 13, 10, 9, 8, A1, 11};
// Segments that make each number
const byte numbers[10] = {
  0b1000000,0b1111001,0b0100100,0b0110000,0b0011001,0b0010010,0b0000010,0b1111000,0b0000000,0b0010000};
void setup()
{

  pinMode(A4, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A5, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);

}
void loop() {

  if (digitalRead(3))
  {    
    for (int digit1=0; digit1 < 10; digit1++) {
      for (int digit2=0; digit2 < 10; digit2++) {
        for (int digit3=0; digit3 < 10; digit3++) {
          for (int digit4=0; digit4 < 10; digit4++) {
            for (int digit5=0; digit5 < 10; digit5++) {
              for (int digit6=0; digit6 < 10; digit6++) {
                for (int digit7=0; digit7 < 10; digit7++) {
                  for (int digit8=0; digit8 < 10; digit8++) {

                    unsigned long startTime = millis();
                    for (unsigned long elapsed=0; elapsed < 600; elapsed = millis() - startTime) 
                    {
                      lightDigit1(numbers[digit1]);
                      delay(1);
                      lightDigit2(numbers[digit2]);
                      delay(1);
                      lightDigit3(numbers[digit3]);
                      delay(1);
                      lightDigit4(numbers[digit4]);
                      delay(1);
                      lightDigit5(numbers[digit5]);
                      delay(1);
                      lightDigit6(numbers[digit6]);
                      delay(1);
                      lightDigit7(numbers[digit7]);
                      delay(1);
                      lightDigit8(numbers[digit8]);
                      delay(1);


                    }
                  }
                }
              }
            }
          }
        }
      }    
    }
  }
  if (digitalRead(2))
  {
    int digit1=digit1+5; 
    int digit2=digit2; 
    int digit3=digit3; 
    int digit4=digit4; 
    int digit5=digit5; 
    int digit6=digit6; 
    int digit7=digit7; 
    int digit8=digit8; 
    {
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 600; elapsed = millis() - startTime) 
      {
        lightDigit1(numbers[digit1]);
        delay(1);
        lightDigit2(numbers[digit2]);
        delay(1);
        lightDigit3(numbers[digit3]);
        delay(1);
        lightDigit4(numbers[digit4]);
        delay(1);
        lightDigit5(numbers[digit5]);
        delay(1);
        lightDigit6(numbers[digit6]);
        delay(1);
        lightDigit7(numbers[digit7]);
        delay(1);
        lightDigit8(numbers[digit8]);
        delay(1);

      }
    }
  }
}


void lightDigit1(byte number)  {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, HIGH);
  lightSegments(number);
}
void lightDigit2(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, HIGH);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}
void lightDigit3(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, HIGH);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}
void lightDigit4(byte number){
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, HIGH);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}
void lightDigit5(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, HIGH);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}
void lightDigit6(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, HIGH);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}

void lightDigit7(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, HIGH);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);
}
void lightDigit8(byte number) {
  digitalWrite(CA1, HIGH);
  digitalWrite(CA2, LOW);
  digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA5, LOW);
  digitalWrite(CA6, LOW);
  digitalWrite(CA7, LOW);
  digitalWrite(CA8, LOW);
  lightSegments(number);

}
void lightSegments(byte number){
  for (int i = 0;i < 7;i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);

  }
}






 

ArchiG
Offline
Зарегистрирован: 09.06.2014

Подправил код - теперь срабатывает на кнопку как положено - но остановить цикл вывода последовательности не получается 

Помогите плиз - где в цикле чего подправить нуна????