2 кнопки и никак не разберусь
- Войдите на сайт для отправки комментариев
Сб, 16/02/2013 - 20:41
Вот код проблема в том когда работают параметры одного из if значение постоянно увеличивается или уменьшается а нужно чтоб оно это делало всего на 1 единицу а не постоянно
#include <Servo.h>
Servo servaProverka;// серва передача
Servo servaMost1; //перед
Servo servaMost2;// зад
int PPMin = 2; // сигнал 3 канал
int servoPin = 10;
int servoPin2 = 11;
int ledPin5 = 5;// серва центр
int ledPin6 = 6;// серва зад
int ledPin7 = 7;// серва перед
int ledPin8 = 8;// габариты
int ledPin9 = 9; // кенгуру
int RCval; // длительность импульса
int val; // назначает что значение должно быть 0-255
//////////////////////////
boolean lastButton = 1; // свет 1
boolean ledOn = 0;
boolean lastButton2 = 1; // свет 2
boolean ledOn2 = 0;
boolean lastButton3 = 1; // серва1
boolean ledOn3 = 0;
boolean lastButton4 = 1; // серва2
boolean ledOn4 = 0;
boolean lastButton5 = 1; // серва3
boolean ledOn5 = 0;
//////////////////////////
int pic = 0;
int pic2 = 0;
int pic3 =0;
void setup()
{
Serial.begin(9600); //serial library start
servaProverka.attach(servoPin);
servaMost1.attach(servoPin2);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(PPMin, INPUT); //газ
}
void loop()
{
RCval = pulseIn(PPMin, HIGH, 20000); //руль
// val = map(RCval, 1080, 1880, 0, 255); //
if((RCval>100)&(RCval<1400)) {++pic;}
if((RCval>1520)&(RCval<2000)) {--pic;}
//int pic = pic2+pic3;
Serial.println (pic);
Serial.println(RCval);
delay(300);
}
вроде не сложно но такое ощущение что на шаре стою. У меня постоянно или уменьшается или увеличивается на 1 единицу. А мне нужно чтоб например я нажал и держал а увеличилось ил и уменьшилось только только на 1 единицу
void loop() { RCval = pulseIn(PPMin, HIGH, 20000); //руль // val = map(RCval, 1080, 1880, 0, 255); // static bool f; if(RCval>1400 && RCval<1520) f = 0; if(RCval>100 && RCval<1400 && !f) { ++pic; f = 1; } if(RCval>1520 && RCval<2000 && !f) { --pic; f = 1; } //int pic = pic2+pic3; Serial.println (pic); Serial.println(RCval); delay(50); }И не путайте логический оператор "И" - && и битовый оператор "И" - &.
Спасибо только не до конца меня поняли или я не правильно описал проблему. Немного облегчил себе задачу. Получается нажали1 кнопку и держим у нас -1. Отпустили 0. Нажали вторую у нас 1, отпустили 1 осталось. Как к этой единице еще 1 прибавить при повторном нажатии чтоб было 2 ???
/* 2 4 10 8 6 8 диодов 4 перед 2 синих 2 белых зад 4 диода красных --- работает строб и стоп стою работает нет сигнала пульта аварика .. stoim еду работает строб .. StrobEdy торможу работает стоп строб вык ...stop1*/ //подключение красн-красн серы-черный // 1 126-129 // 2 118-121 // 3 98-100 // 4 104-106 // 5 111-113 // нетрал 92-94 // вык -344 #include <Servo.h> Servo servaProverka;// серва передача Servo servaMost1; //перед Servo servaMost2;// зад int PPMin = 2; // сигнал 3 канал int servoPin = 10; int servoPin2 = 11; int ledPin5 = 5;// серва центр int ledPin6 = 6;// серва зад int ledPin7 = 7;// серва перед int ledPin8 = 8;// габариты int ledPin9 = 9; // кенгуру int RCval; // длительность импульса int val; // назначает что значение должно быть 0-255 ////////////////////////// boolean lastButton = 1; // свет 1 boolean ledOn = 0; boolean lastButton2 = 1; // свет 2 boolean ledOn2 = 0; boolean lastButton3 = 1; // серва1 boolean ledOn3 = 0; boolean lastButton4 = 1; // серва2 boolean ledOn4 = 0; boolean lastButton5 = 1; // серва3 boolean ledOn5 = 0; ////////////////////////// boolean pic = 0; int pic2 = 0; int pic3 =0; void setup() { Serial.begin(9600); //serial library start servaProverka.attach(servoPin); servaMost1.attach(servoPin2); pinMode(ledPin5, OUTPUT); pinMode(ledPin6, OUTPUT); pinMode(ledPin7, OUTPUT); pinMode(ledPin8, OUTPUT); pinMode(ledPin9, OUTPUT); pinMode(PPMin, INPUT); //газ } void loop() { RCval = pulseIn(PPMin, HIGH, 20000); //руль // val = map(RCval, 1080, 1880, 0, 255); // // static bool f; // if(pic>0&&RCval>100 && RCval<1400) {pic2=2;} // else {pic2=0;} if(RCval>1400 && RCval<1520&pic<1) {pic=0;} if(RCval>100 && RCval<1400){pic=+1;} if(RCval>1520 && RCval<2000){pic=-1;} // if((pic>0&pic<2)&&(RCval>1520 && RCval<2000)) {pic=2;} //int pic = pic2+pic3; Serial.println (pic); Serial.println(pic2); delay(300); }Спасибо только не до конца меня поняли или я не правильно описал проблему. Немного облегчил себе задачу. Получается нажали1 кнопку и держим у нас -1. Отпустили 0. Нажали вторую у нас 1, отпустили 1 осталось. Как к этой единице еще 1 прибавить при повторном нажатии чтоб было 2 ???
Спасибо за помощь проблема решена
#include <Servo.h> Servo servaProverka;// серва передача Servo servaMost1; //перед Servo servaMost2;// зад int PPMin = 2; // сигнал 3 канал int servoPin = 10; int servoPin2 = 11; int ledPin5 = 5;// серва центр int ledPin6 = 6;// серва зад int ledPin7 = 7;// серва перед int ledPin8 = 8;// габариты int ledPin9 = 9; // кенгуру int RCval; // длительность импульса int val; // назначает что значение должно быть 0-255 ////////////////////////// boolean lastButton = 1; // свет 1 boolean ledOn = 0; boolean lastButton2 = 1; // свет 2 boolean ledOn2 = 0; boolean lastButton3 = 1; // серва1 boolean ledOn3 = 0; boolean lastButton4 = 1; // серва2 boolean ledOn4 = 0; boolean lastButton5 = 1; // серва3 boolean ledOn5 = 0; ////////////////////////// int pic = 0; int pic2 = 0; int pic3 =0; void setup() { Serial.begin(9600); //serial library start servaProverka.attach(servoPin); servaMost1.attach(servoPin2); pinMode(ledPin5, OUTPUT); pinMode(ledPin6, OUTPUT); pinMode(ledPin7, OUTPUT); pinMode(ledPin8, OUTPUT); pinMode(ledPin9, OUTPUT); pinMode(PPMin, INPUT); //газ } void loop() { RCval = pulseIn(PPMin, HIGH, 20000); //руль // val = map(RCval, 1080, 1880, 0, 255); // static bool f; if(RCval>1400 && RCval<1520) f = 0; if(RCval>100 && RCval<1400 && !f) { ++pic; f = 1; } // if(RCval>1520 && RCval<2000 && !f) // { // --pic; // f = 1; // } if( pic>1&&RCval>1400 && RCval<1520) pic=0; if(pic>2) pic=2; if(pic<-1) pic = 0; //int pic = pic2+pic3; Serial.println (pic); Serial.println(RCval); delay(200); }