массив

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

доброго времени всем.

не могу разобратся с применением масивов , требуется при получении с аналогового входа значений заменять их другими значениями и отправлять на выход 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
yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

прошу помощи я только учусь

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Непонятно, чего Вы хотите. В сообщении отсутствуют вопросы.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

как присвоить аналоговый вход к одному массиву 

и pwm выход к другому массиву 

 

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

тоесть массив VAF к PWM_PIN

а массив MAF к  AIN_PIN

чтоб получилось потом что  функция map будет работать по значениям из массивов

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Код неполный, потому непонятно. у Вас массив входов содержит 256 значений? так? При этом в нулевом элементе массива сидит 0, в первом - 1, в 151-ом - 151 и т.д. Правильно?

А что Вы собираетесь делать, если на аналоговый вход пришло большее число? например, 700? Или Вы уверены, что не придёт?

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

я планирую применить сначало функцию map (0,1023,0,255)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы не ответили на первый и главный вопрос, прадва ли что  в нулевом элементе массива сидит 0, в первом - 1, в 151-ом - 151 и т.д. Правильно? Это важно. Если это так, то Вам один из двух Ваши массивов нафиг не нужен вообще. Итак? Правильно или нет?

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

да все правильно

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тогда Вам этот массив вовсе не нужен. Оставляете только массив выходных сигналов (VAF). В этом массиве

в нулевом элементе выходное значение для случая, когда на входе 0
в первом элементе выходное значение для случая, когда на входе 1
во втором элементе выходное значение для случая, когда на входе 2
в тертьем элементе выходное значение для случая, когда на входе 3
......
в 255-ом элементе выходное значение для случая, когда на входе 255

Идея понятна?

Когда у Вас есть такой массив, то дальше всё пишется в одну строчку (я без map для простоты, map сами добавите)

int inSignal = analogRead(InPin);
analogWrite(OutPin, VAF[inSignal]);

Вот, собственно и всё.

Понятно?

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

вечером буду дома и сяду разбираться дальше , но примерно понял огромное спасибо

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

yrik8407 пишет:

const int AIN_PIN = 0; // вход расходомер

Работать не будет, т.к. пин 0 не является аналоговым входом АЦП. Посмотрите внимательно на плату, как там называются пины.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Жека,

если использовать его в качестве параметра analogRead, то всё нормально. Он (analogRead) умный. Он ожидает либо номера аналогового входа (от 0 до 5) либо сквозного номера от 14, который он сам преобразует к "от 0 до 5" там прямо стоит

if (pin >= 14) pin -= 14

посмотрите сами. А дальше он считает, что это номер входа ADC. Так что, всё там будет нормально.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

получилось чтото такое , на железках пока время нет проверить .

но думаю что работать должно.


[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]
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Вроде должно.

У меня совет чисто эстетический, не растаскивайте вы масив на "две простыни".

Так даже можно код и не сворачивать.

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]); 
}

 

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

спасибо за подсказку буду делать все красивше

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

доброго времени 

с наступившим новым годом 

всем счастья и всех благ 

у меня такой вопрос появился ,решил добавить к своему проэкту 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]

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А почему Вы решили, что что-то жделаете не так?

Процесс вывода на экран сопряжен с "миганием".

Если хотите, чтобы вообще ничего не мигало, выводите показания один раз из setup().

Если хотите, чтобы мигало реже, реже выводите на экран.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Тогда Вам этот массив вовсе не нужен. Оставляете только массив выходных сигналов (VAF). В этом массиве

в нулевом элементе выходное значение для случая, когда на входе 0
в первом элементе выходное значение для случая, когда на входе 1
во втором элементе выходное значение для случая, когда на входе 2
в тертьем элементе выходное значение для случая, когда на входе 3
......
в 255-ом элементе выходное значение для случая, когда на входе 255

Идея понятна?

Когда у Вас есть такой массив, то дальше всё пишется в одну строчку (я без map для простоты, map сами добавите)

int inSignal = analogRead(InPin);
analogWrite(OutPin, VAF[inSignal]);

Вот, собственно и всё.

Понятно?

а у интел это одна команда xlat )))

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

то что реже выводить на экран это понятно но не могу сообразить как реже выводить информацию на экран но чтоб не замедлилось остальная программа
может както реализовать это по количеству изменений на pwm ножке
например каждые 100 изменений ?

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

Доб рого времени все не было возможности ответить всем .) Большое спамибо что помогаете таким как я "любителям начинающим" вообщем все получилось что задумывал и с lcdтоже оказалось что можно пользоваться millis и все прекрасно начинает работать )) попозже выложу скетч то что получилось . СПАСИБО

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016
[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]

вот что получилось , и не моргает  ))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Зачем запятая в строке 269?

2. Переменная sekunda используется только при истинности условия в блоке стр. 330-342. Почему она определяется и вычисляется вне этого блока при каждом проходе, независимо от условия? Зачем?

3. Переменные currentMillis, previousMillis и interval используются при вычислении одного и того же условия, однако две из них объявлены беззнаковыми, а одна - знаковой. Зачем?

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

Я не знал как милисекунды перевести в секунды чтоб на lcd выводились секунды 

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

В строке 269 запятую случайно поставил уберу 

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

А переменную sekunda лучше в блоке ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Конечно, зачем она нужна снаружи-то? Вычислять её только каждый раз. Кстати, то же самое про все остальные (строки 321-325). Что они все делают вне блока, если используются только в блоке? Всё туда.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

Спасибо за совет обязательно воспользуюсь им )))

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

добрый вечер , люди помогите плиз ,ни как не разберусь с кнопкой 

вродибы все просто но ни как не могу применить чегото упускаю видимо 

 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);
 }
}

смысл такой , ардуинки будет две   одна будет работать  как конвертор выходного сигнала и включатель одного насоса а на второй будет куча всего что не требует быстрой обработки 

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

я понимаю что можно пременить в программе нажатие кнопки но не могу понять как это осущиствить

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

может так ? 

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

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

всех с праздиком святым)))))

проверил на железках все работает всем спасибо

 

 

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

)