включение пина
- Войдите на сайт для отправки комментариев
Ср, 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и с книги
А за разъяснения спасибо