2 кнопки и никак не разберусь

Protez1999
Offline
Зарегистрирован: 08.07.2012

Вот код проблема в том когда работают параметры одного из 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);

}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

вроде не сложно но такое ощущение что на шаре стою. У меня постоянно или уменьшается или увеличивается на 1 единицу. А мне нужно чтоб например я нажал и держал а увеличилось ил и уменьшилось только только на 1 единицу

maksim
Offline
Зарегистрирован: 12.02.2012
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);
}

И не путайте логический оператор "И" - && и битовый оператор "И" - &.

Protez1999
Offline
Зарегистрирован: 08.07.2012

Спасибо только не до конца меня поняли или я не правильно описал проблему. Немного облегчил себе задачу. Получается нажали1 кнопку и держим у нас -1. Отпустили 0. Нажали вторую у нас 1, отпустили 1 осталось. Как к этой единице еще 1 прибавить при повторном нажатии  чтоб было 2 ???

Protez1999
Offline
Зарегистрирован: 08.07.2012

/* 
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);
  
}
Protez1999
Offline
Зарегистрирован: 08.07.2012

Спасибо только не до конца меня поняли или я не правильно описал проблему. Немного облегчил себе задачу. Получается нажали1 кнопку и держим у нас -1. Отпустили 0. Нажали вторую у нас 1, отпустили 1 осталось. Как к этой единице еще 1 прибавить при повторном нажатии чтоб было 2 ???

Protez1999
Offline
Зарегистрирован: 08.07.2012

Спасибо за помощь проблема решена

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