массив
- Войдите на сайт для отправки комментариев
Сб, 17/12/2016 - 01:16
доброго времени всем.
не могу разобратся с применением масивов , требуется при получении с аналогового входа значений заменять их другими значениями и отправлять на выход pwm.
есть массив входа и есть массив выхода
[code]
const int PWM_PIN = 3; // выход расходомер
const int AIN_PIN = 0; // вход расходомер
byte VAF[256] //таблица выход
{
205,
202,
200,
197,
195,
192,
190,
188,
186,
183,
181,
178,
176,
173,
170,
168,
166,
163,
160,
158,
156,
153,
150,
148,
146,
143,
140,
138,
136,
133,
130,
128,
126,
123,
120,
118,
116,
113,
110,
108,
106,
103,
103,
102,
102,
101,
101,
100,
100,
99,
99,
98,
98,
97,
97,
96,
96,
95,
95,
94,
94,
93,
93,
92,
92,
91,
91,
90,
90,
90,
89,
89,
88,
88,
87,
87,
86,
86,
85,
85,
84,
84,
83,
83,
82,
82,
81,
81,
80,
80,
79,
79,
78,
78,
77,
77,
77,
76,
76,
75,
75,
74,
74,
73,
73,
72,
72,
71,
71,
70,
70,
69,
69,
68,
68,
67,
67,
66,
66,
65,
65,
64,
64,
64,
63,
63,
62,
62,
61,
61,
60,
60,
59,
59,
58,
58,
57,
57,
56,
56,
55,
55,
54,
54,
53,
53,
52,
52,
52,
51,
51,
50,
50,
49,
49,
48,
48,
47,
47,
46,
46,
45,
45,
44,
44,
43,
43,
42,
42,
41,
41,
40,
40,
39,
39,
39,
38,
38,
37,
37,
36,
36,
35,
35,
34,
34,
33,
33,
32,
32,
31,
31,
30,
30,
29,
29,
28,
28,
27,
27,
26,
26,
26,
25,
25,
24,
24,
23,
23,
22,
22,
21,
21,
20,
20,
19,
19,
18,
18,
17,
17,
16,
16,
15,
15,
14,
14,
13,
13,
13,
12,
12,
11,
11,
10,
10,
9,
9,
8,
8,
7,
7,
6,
6,
5,
5,
4,
4,
3,
3,
2,
2,
1,
1,
0,
0
};
byte MAF[256]// таблица вход
{
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
20
прошу помощи я только учусь
Непонятно, чего Вы хотите. В сообщении отсутствуют вопросы.
как присвоить аналоговый вход к одному массиву
и pwm выход к другому массиву
тоесть массив VAF к PWM_PIN
а массив MAF к AIN_PIN
чтоб получилось потом что функция map будет работать по значениям из массивов
Код неполный, потому непонятно. у Вас массив входов содержит 256 значений? так? При этом в нулевом элементе массива сидит 0, в первом - 1, в 151-ом - 151 и т.д. Правильно?
А что Вы собираетесь делать, если на аналоговый вход пришло большее число? например, 700? Или Вы уверены, что не придёт?
я планирую применить сначало функцию map (0,1023,0,255)
Вы не ответили на первый и главный вопрос, прадва ли что в нулевом элементе массива сидит 0, в первом - 1, в 151-ом - 151 и т.д. Правильно? Это важно. Если это так, то Вам один из двух Ваши массивов нафиг не нужен вообще. Итак? Правильно или нет?
да все правильно
Тогда Вам этот массив вовсе не нужен. Оставляете только массив выходных сигналов (VAF). В этом массиве
в нулевом элементе выходное значение для случая, когда на входе 0
в первом элементе выходное значение для случая, когда на входе 1
во втором элементе выходное значение для случая, когда на входе 2
в тертьем элементе выходное значение для случая, когда на входе 3
......
в 255-ом элементе выходное значение для случая, когда на входе 255
Идея понятна?
Когда у Вас есть такой массив, то дальше всё пишется в одну строчку (я без map для простоты, map сами добавите)
Вот, собственно и всё.
Понятно?
вечером буду дома и сяду разбираться дальше , но примерно понял огромное спасибо
Работать не будет, т.к. пин 0 не является аналоговым входом АЦП. Посмотрите внимательно на плату, как там называются пины.
Жека,
если использовать его в качестве параметра analogRead, то всё нормально. Он (analogRead) умный. Он ожидает либо номера аналогового входа (от 0 до 5) либо сквозного номера от 14, который он сам преобразует к "от 0 до 5" там прямо стоит
if (pin >= 14) pin -= 14
посмотрите сами. А дальше он считает, что это номер входа ADC. Так что, всё там будет нормально.
получилось чтото такое , на железках пока время нет проверить .
но думаю что работать должно.
[code] const int PWM_PIN = 3; // выход расходомер const int AIN_PIN = A0; // вход расходомер int val = 0; // переменная для хранения сигнала входящего расходомера byte VAF[256] //таблица выход { 205, 202, 200, 197, 195, 192, 190, 188, 186, 183, 181, 178, 176, 173, 170, 168, 166, 163, 160, 158, 156, 153, 150, 148, 146, 143, 140, 138, 136, 133, 130, 128, 126, 123, 120, 118, 116, 113, 110, 108, 106, 103, 103, 102, 102, 101, 101, 100, 100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92, 92, 91, 91, 90, 90, 90, 89, 89, 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, 83, 83, 82, 82, 81, 81, 80, 80, 79, 79, 78, 78, 77, 77, 77, 76, 76, 75, 75, 74, 74, 73, 73, 72, 72, 71, 71, 70, 70, 69, 69, 68, 68, 67, 67, 66, 66, 65, 65, 64, 64, 64, 63, 63, 62, 62, 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 56, 56, 55, 55, 54, 54, 53, 53, 52, 52, 52, 51, 51, 50, 50, 49, 49, 48, 48, 47, 47, 46, 46, 45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, 15, 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0 }; void setup() { TCCR2B = TCCR2B & 0b11111000 | 0x02; pinMode (PWM_PIN, OUTPUT); // сконфигурировать контакт как выход pinMode (AIN_PIN, INPUT); // сконфигурировать контакт как вход } void loop() { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); } [/code]Вроде должно.
У меня совет чисто эстетический, не растаскивайте вы масив на "две простыни".
Так даже можно код и не сворачивать.
const int PWM_PIN = 3; // выход расходомер const int AIN_PIN = A0; // вход расходомер int val = 0; // переменная для хранения сигнала входящего расходомера byte VAF[256] //таблица выход { 205,202,200,197,195,192,190,188,186,183,181,178,176,173,170,168, 166,163,160,158,156,153,150,148,146,143,140,138,136,133,130,128, 126,123,120,118,116,113,110,108,106,103,103,102,102,101,101,100, 100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92, 92, 91, 91, 90, 90, 90, 89, 89, 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, 83, 83, 82, 82, 81, 81, 80, 80, 79, 79, 78, 78, 77, 77, 77, 76, 76, 75, 75, 74, 74, 73, 73, 72, 72, 71, 71, 70, 70, 69, 69, 68, 68, 67, 67, 66, 66, 65, 65, 64, 64, 64, 63, 63, 62, 62, 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 56, 56, 55, 55, 54, 54, 53, 53, 52, 52, 52, 51, 51, 50, 50, 49, 49, 48, 48, 47, 47, 46, 46, 45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, 15, 14, 14, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0 }; void setup() { TCCR2B = TCCR2B & 0b11111000 | 0x02; pinMode (PWM_PIN, OUTPUT); // сконфигурировать контакт как выход pinMode (AIN_PIN, INPUT); // сконфигурировать контакт как вход } void loop() { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); }спасибо за подсказку буду делать все красивше
доброго времени
с наступившим новым годом
всем счастья и всех благ
у меня такой вопрос появился ,решил добавить к своему проэкту lcd дисплей
впринцепи все работает но показания напряжения которые выводятся на дисплей постоянно мигают подскажите что я зделал не так?
[code] #include <LiquidCrystal.h> LiquidCrystal lcd(4, 5, 10, 11, 12, 13); const int PWM_PIN = 3; // выход расходомер const int AIN_PIN = A0; // вход расходомер int val = 0; // переменная для хранения сигнала входящего расходомера byte VAF[256] //таблица выход { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,157,155, 153,151,150,148,146,145,144,142,141,140, 138,136,134,133,132,130,129,128,126,125, 123,122,121,120,119,118,117,116,115,114, 113,112,111,110,109,108,107,106,105,104, 103,102,101,100,99,98,96,95,94,93, 92,91,90,89,88,87,86,85,84,83, 82,81,80,79,78,77,76,75,74,73, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; void setup() { lcd.begin(16, 2); lcd.print("\x50\A\C\X\O\xE0\ \B\O\xA4\xE0\xA9\X\A"); TCCR2B = TCCR2B & 0b11111000 | 0x02; pinMode (PWM_PIN, OUTPUT); // сконфигурировать контакт как выход pinMode (AIN_PIN, INPUT); // сконфигурировать контакт как вход } void loop() { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); float vvolt = (inSignal*0.01953125); float ivolt = (VAF[inSignal]*0.01953125); lcd.setCursor(0, 1); lcd.print("\B\o\xBB\xC4\x89\ \xDA\ \xD9\ "); lcd.setCursor (7,1); lcd.print (vvolt); lcd.setCursor (11,1); lcd.print (ivolt); } [/code]А почему Вы решили, что что-то жделаете не так?
Процесс вывода на экран сопряжен с "миганием".
Если хотите, чтобы вообще ничего не мигало, выводите показания один раз из setup().
Если хотите, чтобы мигало реже, реже выводите на экран.
Тогда Вам этот массив вовсе не нужен. Оставляете только массив выходных сигналов (VAF). В этом массиве
в нулевом элементе выходное значение для случая, когда на входе 0
в первом элементе выходное значение для случая, когда на входе 1
во втором элементе выходное значение для случая, когда на входе 2
в тертьем элементе выходное значение для случая, когда на входе 3
......
в 255-ом элементе выходное значение для случая, когда на входе 255
Идея понятна?
Когда у Вас есть такой массив, то дальше всё пишется в одну строчку (я без map для простоты, map сами добавите)
Вот, собственно и всё.
Понятно?
а у интел это одна команда xlat )))
то что реже выводить на экран это понятно но не могу сообразить как реже выводить информацию на экран но чтоб не замедлилось остальная программа
может както реализовать это по количеству изменений на pwm ножке
например каждые 100 изменений ?
Доб рого времени все не было возможности ответить всем .) Большое спамибо что помогаете таким как я "любителям начинающим" вообщем все получилось что задумывал и с lcdтоже оказалось что можно пользоваться millis и все прекрасно начинает работать )) попозже выложу скетч то что получилось . СПАСИБО
[code] #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); long previousMillis = 0; long interval = 1000; const int PWM_PIN = 10; // выход расходомер const int AIN_PIN = A0; // вход расходомер int val = 0;// переменная для хранения сигнала входящего расходомера int kg =0; int SIMENS[256]= { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 21, 26, 31, 36, 57, 60, 62, 65, 67, 69, 72, 74, 77, 79, 82, 84, 87, 89, 92, 95, 98, 100, 103, 106, 109, 112, 115, 118, 122, 125, 128, 131, 135, 138, 142, 146, 149, 153, 157, 161, 165, 169, 173, 178, 182, 187, 191, 196, 201, 206, 211, 217, 222, 228, 233, 239, 245, 251, 257, 264, 270, 277, 283, 290, 297, 305, 312, 319, 327, 334, 342, 350, 358, 366, 374, 382, 390, 398, 407, 415, 424, 432, 441, 450, 459, 468, 477, 486, 496, 505, 515, 525, 535, 545, 556, 566, 577, 588, 599, 610, 622, 634, 646, 658, 670, 683, 696, 709, 722, 736, 750, 764, 778, 793, 808, 823, 838, 854, 870, 886, 902, 919, 936, 953, 970, 988, 1006, 1025, 1043, 1062, 1082, 1101, 1121, 1142, 1162, 1183, 1204, 1236, 1248, 1270, 1293, 1316, 1339, 1363, 1387, 1412, 1437, 1462, 1488, 1514, 1541, 1568, 1595, 1623, 1652, 1680, 1710, 1740, 1770, 1801, 1832, 1864, 1896, 1929, 1963, 1997, 2032, 2067, 2103, 2139, 2176, 2214, 2252, 2291, 2331, 2372, 2413, 2455, 2497, 2541, 2585, 2630, 2676, 2723, 2770, 2817, 2866, 2915, 2964, 3014, 3064, 3115, 3166, 3217, 3268, 3320, 3372, 3424, 3477, 3529, 3582, 3634, 3687, 3740, 3793, 3846, 3900, 3953, 4007, 4060, 4114, 4168, 4222, 4277, 4332, 4386, 4441, 4497, 4552, 4608, 4664, 4720, 4777, 4833, 4891, 4948, 5005, 5063, 5121, 5179, 5238, 5297, 5355, 5414, 5474, 5533, 5593, 5653, 5713, 5773, 5833, 5894, 5955 }; byte VAF[256]= //таблица выход { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,157,155, 153,151,150,148,146,145,144,142,141,140, 138,136,134,133,132,130,129,128,126,125, 123,122,121,120,119,118,117,116,115,114, 113,112,111,110,109,108,107,106,105,104, 103,102,101,100,99,98,96,95,94,93, 92,91,90,89,88,87,86,85,84,83, 82,81,80,79,78,77,76,75,74,73, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; void setup() { lcd.begin(16, 2); lcd.print ("maf vaf"); TCCR1B = TCCR1B & 0b11111000 | 0x02; pinMode (PWM_PIN, OUTPUT); // сконфигурировать контакт как выход pinMode (AIN_PIN, INPUT); // сконфигурировать контакт как вход } void loop() { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); float vvolt = (inSignal*0.01953125); float ivolt = (VAF[inSignal]*0.01953125); int kg = (SIMENS[inSignal]); float kg1 = (kg*0.1); unsigned long currentMillis = millis();// текущее время в миллисекундах float sekunda = ( currentMillis*0.001); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; lcd.setCursor (0,1); lcd.print (vvolt); lcd.setCursor (12,1); lcd.print (ivolt); lcd.setCursor (5,1); lcd.print(sekunda); lcd.setCursor (5,0); lcd.print(kg1); } } [/code]вот что получилось , и не моргает ))))
1. Зачем запятая в строке 269?
2. Переменная sekunda используется только при истинности условия в блоке стр. 330-342. Почему она определяется и вычисляется вне этого блока при каждом проходе, независимо от условия? Зачем?
3. Переменные currentMillis, previousMillis и interval используются при вычислении одного и того же условия, однако две из них объявлены беззнаковыми, а одна - знаковой. Зачем?
Я не знал как милисекунды перевести в секунды чтоб на lcd выводились секунды
В строке 269 запятую случайно поставил уберу
А переменную sekunda лучше в блоке ?
Конечно, зачем она нужна снаружи-то? Вычислять её только каждый раз. Кстати, то же самое про все остальные (строки 321-325). Что они все делают вне блока, если используются только в блоке? Всё туда.
Спасибо за совет обязательно воспользуюсь им )))
добрый вечер , люди помогите плиз ,ни как не разберусь с кнопкой
вродибы все просто но ни как не могу применить чегото упускаю видимо
byte VAF[256]= //таблица выход { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,157,155, 153,151,150,148,146,145,144,142,141,140, 138,136,134,133,132,130,129,128,126,125, 123,122,121,120,119,118,117,116,115,114, 113,112,111,110,109,108,107,106,105,104, 103,102,101,100,99,98,96,95,94,93, 92,91,90,89,88,87,86,85,84,83, 82,81,80,79,78,77,76,75,74,73, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; byte VAF1[256] = { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,148,146, 145,144,143,142,140,138,137,136,134,133, 132,130,129,128,126,125,123,122,121,120, 119,118,117,116,115,114,113,112,111,110, 109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,91, 90,89,88,87,86,85,84,83,82,82, 81,80,79,78,77,76,75,74,73,72, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; const int PWM_PIN = 10; // выход расходомер const int AIN_PIN = A0; // вход расходомер const int MK2_PIN = 5; // вход со 2 мк <pin6 const int PUMP_PIN = 3; // пин включения насоса int val = 0;// переменная для хранения сигнала входящего расходомера int MK2State = 0;//переменная для хранения сигнала с мк2 энкодер void setup() { pinMode(PWM_PIN,OUTPUT); pinMode(AIN_PIN,INPUT); pinMode(MK2_PIN,INPUT); pinMode(PUMP_PIN,OUTPUT); TCCR1B = TCCR1B & 0b11111000 | 0x02; } void loop() { MK2State = digitalRead(MK2_PIN); int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); if(PWM_PIN >=180) { digitalWrite(PUMP_PIN, HIGH); } else { digitalWrite(PUMP_PIN, LOW); } }смысл такой , ардуинки будет две одна будет работать как конвертор выходного сигнала и включатель одного насоса а на второй будет куча всего что не требует быстрой обработки
в первой будет несколько массивов которые должны переключатся по команде со второй дуинке я представляю это так ,например со второй дуинки прилетел один импульс включился первый массив прилетел еще один переключились на второй массив
я понимаю что можно пременить в программе нажатие кнопки но не могу понять как это осущиствить
может так ?
int regim=1; int flag=0; const int PWM_PIN = 10; // выход расходомер const int AIN_PIN = A0; // вход расходомер const int MK2_PIN = 5; // вход со 2 мк <pin6 const int PUMP_PIN = 3; // пин включения насоса byte VAF[256]= //таблица выход { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,157,155, 153,151,150,148,146,145,144,142,141,140, 138,136,134,133,132,130,129,128,126,125, 123,122,121,120,119,118,117,116,115,114, 113,112,111,110,109,108,107,106,105,104, 103,102,101,100,99,98,96,95,94,93, 92,91,90,89,88,87,86,85,84,83, 82,81,80,79,78,77,76,75,74,73, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; byte VAF1[256] = { 205,202,198,195,192,189,185,182,179,176, 172,169,167,165,164,162,160,158,148,146, 145,144,143,142,140,138,137,136,134,133, 132,130,129,128,126,125,123,122,121,120, 119,118,117,116,115,114,113,112,111,110, 109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,91, 90,89,88,87,86,85,84,83,82,82, 81,80,79,78,77,76,75,74,73,72, 72,71,70,70,69,69,68,67,67,66, 66,65,65,64,63,63,62,62,61,60, 60,59,58,58,57,57,56,56,55,54, 54,53,52,52,51,51,50,49,49,48, 48,47,46,46,45,44,44,43,43,42, 41,41,40,40,40,39,39,39,38,38, 38,37,37,37,36,36,36,35,35,34, 34,34,33,33,33,32,32,32,31,31, 30,30,30,30,30,30,29,29,29,28, 28,28,27,27,26,26,26,25,25,25, 24,24,24,23,23,23,22,22,21,21, 21,20,20,20,19,19,19,18,18,18, 17,17,16,16,16,15,15,15,14,14, 14,14,14,14,13,13,13,12,12,12, 11,11,11,10,10,9,9,8,8,7, 7,6,6,5,5,4,4,3,3,2, 2,1,1,1,0,0 }; int val = 0;// переменная для хранения сигнала входящего расходомера void setup() { pinMode(PWM_PIN,OUTPUT); pinMode(AIN_PIN,INPUT); pinMode(MK2_PIN,INPUT); pinMode(PUMP_PIN,OUTPUT); TCCR1B = TCCR1B & 0b11111000 | 0x02; } void loop() { if(digitalRead(MK2_PIN)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { regim++; flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" 100% if(regim>2)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, // то переключать режимы будем циклично } } if(digitalRead(MK2_PIN)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную "knopka" } if(regim==1)//первый режим { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF[inSignal]); } if(regim==2)//второй режим { int val = analogRead ( AIN_PIN ); int inSignal = map (val,0,1023,0,255); analogWrite (PWM_PIN,VAF1[inSignal]); } if(PWM_PIN >=180) { digitalWrite(PUMP_PIN, HIGH); } else { digitalWrite(PUMP_PIN, LOW); } }работу с кнопкой повторил из http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
всех с праздиком святым)))))
проверил на железках все работает всем спасибо
)