Помогите новичку. Проблема с кодом.
- Войдите на сайт для отправки комментариев
Необходимо реализовать:
Управление пневмоцилиндром сделано одним пневмопереключателем - то есть управляется одним реле. При замыкании цилиндр идет в одну сторону, при размыкании в другую. На концах пневмоцилиндра устанавливаются герконы.
Идет подсчет количества полных перемещений, то есть одно перемещение подразумевает полный ход туда и обратно. Вывод на восьми разрядный семисегментный индикатор. Требуется запоминание количества полных перемещений на случай отключения электричества.
Реализация:
Сильно просьба не пинать!!! В програмировании я не силен сильно.
Первоисточник кода вывода циферок взял тут 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); } }
Подправил код - теперь срабатывает на кнопку как положено - но остановить цикл вывода последовательности не получается
Помогите плиз - где в цикле чего подправить нуна????