включение пина
- Войдите на сайт для отправки комментариев
Ср, 19/04/2017 - 00:53
доброго времени помогите плиз запутался
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(AIN_PIN > 100)
{
digitalWrite(PUMP_PIN, HIGH);
}
else
{
digitalWrite(PUMP_PIN, LOW);
}
}
как включить PUMP_PIN по условию ?
Строки 80, 120 - убрать лишние фигурные скобки
Строки 109, 116 - убрать int, т.к. переменная val уже объявлена в строке 67.
UPD: Хотя нет, строки 109 и 116 лучше оставить как есть, а строку 67 убрать. Т.к. нет нужды в глобальной переменной val.
Строки 110, 117 - int можно заменить на byte или uint8_t, т.к. максимальное значение 255, достаточно одного байта. Аналогично для переменных regim и flag (строки 1 и 2).
Строка 121 - должно быть if (analogRead(AIN_PIN) > 100)
Огромное спасибо , вечером дома буду дальше мучить ардуинку ))))
А почемуто думал что достаточно записи if (AIN_PIN> 100)
тут и ошибся
А почемуто думал что достаточно записи if (AIN_PIN> 100)
Обратите внимание на строку 4 (AIN_PIN = A0). В связи с этим запись if (AIN_PIN > 100) будет равносильна записи if (A0 > 100). Это неправильно, т.к. нам надо сравнивать не номер пина (А0), а значение с пина (0 - 1023). Условный оператор if не занимается считыванием значений. Значение нужно предварительно получить с помощью предусмотренной для этого функции analogRead.
Вот например в строках 81, 99 сделано правильно. Из чего можно сделать вывод, что это не Вы писали. Где-то взяли готовые куски кода и не разобрались как это работает.
Именно этот кусок я повторил из http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
А все остальное я разбирался сам и с людьми с этого сайта
А начинал с этого http://arduino.ru/forum/obshchii/upravlenie-shim-po-tablitse#comment-241212и с книги
А за разъяснения спасибо