помогите с счетчиком

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

здраствуйте вот код в нем есть "digitalRead(6)" к ней подключена кнопка нужно чтобы на LCD16-02

прибовлялось по одной позиции в каждое нажатие сам догнать не могу помогите пожалуйста

 
 #include <Wire.h>
 #include <LCD.h>
 #include <LiquidCrystal_I2C.h>
 

 
 #define LCD_I2C_ADDR 0x20
 #define BACKLIGHT 7
 #define LCD_EN  4
 #define LCD_RW  5
 #define LCD_RS  6
 #define LCD_D4  0
 #define LCD_D5  1
 #define LCD_D6  2
 #define LCD_D7  3
  LiquidCrystal_I2C       lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
  
 int sel = 0;
 int res = 0;
 int start = 0;
 int sttop = 0;
 int wozv = 0;

 
 void setup()
 {
 lcd.begin (16,2);
 lcd.setBacklightPin(BACKLIGHT,NEGATIVE); // init the backlight
 lcd.setBacklight(HIGH); // включить подсветку
 lcd.clear(); // очистить дисплей
 
 lcd.setCursor ( 0, 0 );        // положение текста первой строки
 lcd.print("popal:");           //текст страки
 lcd.setCursor ( 0, 1 ); 
 lcd.print("avto mechen'");
 
 pinMode (2,OUTPUT);//мотор 1
 pinMode (3,OUTPUT);//мотор 2
 pinMode (6,INPUT);//кнопка подъема
 digitalWrite(6, HIGH);//кнопка подъема резистор
 pinMode (7,INPUT);//кнопка возврата
 digitalWrite(7, HIGH);//кнопка подъема резистор
 pinMode (8,INPUT);//кнопка стопа
 digitalWrite(8, HIGH);//кнопка подъема резистор
 pinMode (9,INPUT);//кнопка сброса
 digitalWrite(9, HIGH);//кнопка сброса резистор
 pinMode (10,OUTPUT); //сигнал готовность
 }

void loop()
{
/////////////////////////////////////////////////////////////////////////////////
res = digitalRead(9);                                                     ///////
if (res == LOW)                                                           ///////
{                                                                         ///////
lcd.setCursor ( 6, 0 );        // положение текста второйстроки строки    ///////
lcd.print("          ");       //обнуление экрана                         ///////
sel = 0;                       //обнуление переменной счетчика            ///////
}                                                                         ///////
                                                                          ///////
lcd.setCursor ( 6, 0 );        // положение текста второйстроки строки    ///////
lcd.print(sel);                //вывод количества нажатий на start        ///////
/////////////////////////////////////////////////////////////////////////////////
sttop = digitalRead(8);
if (sttop == LOW )
{
 digitalWrite(2,LOW);
}

wozv = digitalRead(7);
if (wozv == LOW)
{
  digitalWrite(3,HIGH);
 digitalWrite(2,LOW);
}

start = digitalRead(6);
if (start == LOW)
{
 digitalWrite(2,HIGH);
 digitalWrite(3,LOW);
}
}

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
int satate = 0;
int old_state = 0;

state = digitalRead(6)
if (state != old_state) //Зашита от повтора при нажатой кнопке
{
   old_state = state;
   if(state == LOW){ //Состояние нажатой кнопки
   sel++;    // Прибавить 1
   }
   delay(50); //Предохранитель от дребезга

}

 

vvadim
Offline
Зарегистрирован: 23.05.2012

 if(button == LOW)   val ++;

 

vvadim
Offline
Зарегистрирован: 23.05.2012

пока писал опередили

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014
int state = 0;
int old_state = 0;

state = digitalRead(6);
if (state != old_state) //Зашита от повтора при нажатой кнопке
{
   old_state = state;
   if(state == LOW){ //Состояние нажатой кнопки
   sel++;    // Прибавить 1
   }
   delay(50); //Предохранитель от дребезга

}

спасибо всем а вам огромное спасибо работает

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

а как обнулить такой счетчик я так понимаю достаточно сбросить значение переменой sel = 0 ?


res = digitalRead(pinin_op);
if(res = 0){
sel = 0;
Serial.println(sel = 0);}

state = digitalRead(pinin);
digitalWrite(pinout , state);
if (state != old_state) //Зашита от повтора при нажатой кнопке
{
   old_state = state;
   if(state == LOW){ //Состояние нажатой кнопки
   sel++;    // Прибавить 1
   Serial.println(sel);
   }
   delay(10); //Предохранитель от дребезга
}

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Правильно понимаете.

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

vvadim пишет:

Правильно понимаете.

а как это сделать пример ниже так не получается!

int pinin_op = 11;
pinMode(pinin_op,INPUT)
res = digitalRead(pinin_op);
if(res = 0)
{
sel = 0;
}

 

vdk
Offline
Зарегистрирован: 14.04.2013

Разберитесь с 4 строкой - тогда и будет получаться

leshak
Offline
Зарегистрирован: 29.09.2011

Читаем:= (assignment)

Потом:==

Потом думаем над комментом vdk.

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

Спасибо vdk

Cпасибо leshak

вои правильный код работает{ без вас бы не разобрался }

int pinin_op = 11;
pinMode(pinin_op,INPUT)
res = digitalRead(pinin_op);
if(res == LOW)
{
sel = 0;
}