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