Перейти к содержанию

Много Сенсорных Кнопок


Bartle96

Рекомендуемые сообщения

Всем привет! Вот тут хорошая статья о том, как сделать сенсорную кнопку (http://chipenable.ru...aya-knopka.html)

Это я сделал и даже собрал в реале.

Но одной кнопкой я не ограничился.

Написал такой код:

#include <avr/io.h>
#include "sensor.h"
#include <util/delay.h>
#define F_CPU 8000000

volatile uint8_t tim_flag = 0;
uint8_t count1 = 0;
sensor_t sensor1;
sensor_t sensor2;
int main(void)
{
DDRB = (1<<3);
PORTB = (0<<3);

SENS_Init(&sensor1, 0, &PORTB, 40);
SENS_Init(&sensor2, 4, &PORTB, 40);

while(1){

 SENS_Poll(&sensor1);

 if (SENS_GetState(&sensor1) == SENS_PRESSED) {
	 PORTB |= (1 << PB3); // зажигаем светодиод
        _delay_ms(200); // задержка 200мс
	 PORTB &= ~(1 << PB3); // гасим светодиод
 }
 else {	
	 PORTB &= ~(1 << PB3); // гасим светодиод
}

SENS_Poll(&sensor2);

 if (SENS_GetState(&sensor2) == SENS_PRESSED) {
	 PORTB |= (1 << PB3); // зажигаем светодиод
_delay_ms(200); // задержка 200мс
	 PORTB &= ~(1 << PB3); // гасим светодиод
 }
 else {	
	 PORTB &= ~(1 << PB3); // гасим светодиод
 }

}
return 0;
}

Одна кнопка работает, вторая нет.

Там какая-то переменная sensor_t

Я так понял она хранит настройки об одной кнопки, как можно переделать, что бы можно было работать с 12 кнопками? (циферблат)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

/*
*  GccApplication3.c
*  -Сенсорная клавиатура-
*  Created: 12.02.2014 7:20:02
*  Author: Писанец Александр Николаевич
*  Канал на Youtube - https://www.youtube.com/channel/UCczziZl2-kvBUhzX9awdNEA
*/
#include <avr/io.h>
#include <avr/interrupt.h>   //подгружаем прерывание
#include <avr/eeprom.h>
//=========================//
//оптимизация Os3 в Atmel Studio  USART 9600bit, 1 стоп бит , 8бит размер слова
#define Zvyk_PORTA 3	   //для звука назначаем портD, 7 ножка порта
#define Indikasia_PORTA 0  //куда подключен светодиод (
#define Kalibrovka_PORTD 7 //кнопка для калибровки клавиотуры
#define Knopka_Blok  10	  //снятие блока назначте любую действующую кнопку 
#define Kalibrovka_Sensop 0 //чуствительность клавиотуры (калибровка клавиотуры)						
#define Koli_Sensorov   12  //количество сенсорных кнопок (макс 20)
// ниже перечисляем подключение кнопок сколько указали в Koli_Sensorov
// обезательно! назначаем сенсоры подряд Sensor_1 ,Sensor_2,и т.д.
#define Sensor_1_PORTB  3  //первый сенсор 3 пин на PORTB
#define Kod_Sensora1    1  //в случае нажатия первого сенсора код 1 (макс 255) будет передан USARTOM
#define Sensor_2_PORTB  1 
#define Kod_Sensora2    2 
#define Sensor_3_PORTD  3
#define Kod_Sensora3    3

#define Sensor_4_PORTB  2
#define Kod_Sensora4    4

#define Sensor_5_PORTB  4
#define Kod_Sensora5    5

#define Sensor_6_PORTD  2
#define Kod_Sensora6    6
#define Sensor_7_PORTA  1
#define Kod_Sensora7    7
#define Sensor_8_PORTC  7
#define Kod_Sensora8    8
#define Sensor_9_PORTC  1
#define Kod_Sensora9    9
#define Sensor_10_PORTA 2
#define Kod_Sensora10   10
#define Sensor_11_PORTC  6
#define Kod_Sensora11   11
#define Sensor_12_PORTC  0
#define Kod_Sensora12   12

//=========================//
#include "Kalibrovka_Klaviaturi.h"  //предынструкции для компилятора 
volatile unsigned char  Sostoania_Knopok[Koli_Sensorov],Kalibrovka_Knopok[Koli_Sensorov];
volatile unsigned char  KolProverka_Klava =0,Temp_Klava = 0,Vibor_Klava = 0,Sot_Klava = 0,Da_Klava = 0,No_Klava = 0,Danie_Klava = 0;
volatile unsigned char  Bit_Klava = 0,Nomer_Klava = 0,Temp2_Klava = 0,Bit2_Klava = 0;
unsigned char S = 0,X = 0,Q = 0,Pauza_Klava = 0,Ss = 0,Sa = 0,Ff = 0,Pauza_Vikl1 = 0,Pauza_Vikl2 = 0,AA = 0;
unsigned int D = 0,A = 0;
ISR(USART_UDRE_vect)	    // регистра данных на передачю пуст
{	  
UCSRB &=~(1 << UDRIE);  //прерывания по опусташению регистра данных на передачю запрещаем	  
}
//========================//
ISR  (TIMER0_COMP_vect)  //прерывание таймера T0
 {
Pauza_Klava++;
//==================//
  //время до блока клавиотуры
//=================//
if  (Bit2_Klava & (1<<0)) {}
else
 {
  if (( Pauza_Vikl1++ ) > 253 ) 
   {
  Pauza_Vikl1 = 0;
  if (( Pauza_Vikl2++ ) > 253 )
   {
  Pauza_Vikl2 = 0;
  Bit2_Klava|=(1<<0);  //блок клавиотуры включон
  Bit_Klava |= (1<<5); //разрешаем мегать светодиодом
  Ff = 30;
   }	  
   }	   
 }		   
//===============//
  //кнопка калибровки
//==============//   
if ( Bit_Klava & (1<<7) )  // запущен или нет процес калиброки
 {}	  
else 
 {
   if ( PIN_Kalibrovka & (1 << Bit_Kalibrovka )) // проверка нажата или нет кнопка
 {
  if ( Bit_Klava & (1<<3))			  // кнопка была нажата разрешаем сканирование на оджатие
   {
 Q--; 
    if (Q == 0)	
   Bit_Klava &=~ (1<< 3);		
   }
   else
 Q = 0;   
 }
 else  
 {
   if ( Bit_Klava & (1<<3))		    //кнопка не была нажата
    Q = 100;				 
 else  
  {
 Q++; 
    if (Q == 100)	
  Bit_Klava = 136;			   //разрешаем работу калибровки и фиксируем нажатие кнопки   
  }					
 }		 
 }		  
  //===============//
   //работа визера
  //===============//	   
  if (Bit_Klava & (1<<4))  //писк на визер
   {
  if ((D++) > A )
 {
 D = 0;
 if (( X++) > 3 )
  {
 Bit_Klava &=~ (1<<4);
 X = 0;
  }
  else
  {
 if ( PIN_Zvuk & (1 << Bit_Zvuk))
  {
    Zvuk_PORT &=~(1<<Bit_Zvuk);	 
  }
 else
  {
    Zvuk_PORT |=(1<<Bit_Zvuk);
  }		   
 }	   
 }	   
 }
//==============//
  //мигание светодирда
   //==============//		 
  if (Bit_Klava & (1<<5))
{	   
 if ( (S++) > 200  )
 {
 S = 0;
   if ((Sa++) > Ff  )
 {
  Sa = 0;
  if ( Indikasia_PIN & (1 << Indikasia_Bit))
	  Indikasia_PORT &=~(1 << Indikasia_Bit );
  else
   Indikasia_PORT |=(1 << Indikasia_Bit );
 }	
 }
}	   
 }
//*****************************//
//*****************************//
   //работа с сенсорными кнопками 
//*****************************//
//*****************************//
void Klava_Proverka ( unsigned char Bit_Klava,volatile unsigned char *D_0,  unsigned char *D_1)
 {	
asm("cli");
Temp_Klava  = 0;			   
*D_1 &=~( 1 << Bit_Klava);   //					 
   while (1)
 {
  if (*D_0  &  (1<< Bit_Klava))		
	 break;   
   else
  Temp_Klava  ++; 
 }   
*D_1 |=( 1 << Bit_Klava);	 //переводим порт на выход   
if (!( Temp_Klava < Temp2_Klava))//проверка на состояние кнопки сравнение с калибровкой
   Da_Klava++;			    //фиксируется нажатие			
if ((Sot_Klava++ )== 5)	   //количество проверок кнопки подряд
 {  
 if ( Da_Klava  > 2 )
  {   
	   Sostoania_Knopok[ Vibor_Klava ] = Sostoania_Knopok[ Vibor_Klava ] + 1; 
  }
  else
  {
 Sostoania_Knopok[ Vibor_Klava ] = 0; 
  }				
  Vibor_Klava ++;	  
  Da_Klava = 0;
  Sot_Klava = 0; 
 }	
asm("sei");							 
 }   
//****************************//
//****************************//
 //
//*****************************//
//*****************************//
void PROVERKA_DANIX()
 {
   volatile unsigned char Temp_Klava1 = 0,Sot1_Klava = 0;
   if ((KolProverka_Klava++) > 12 )		 //через сколько количество проверок массива
 {
   KolProverka_Klava = 0;	
   Vibor_Klava = 0;
  //==================//
 //подпрограмма калибровки
  //==================//  
  if (Bit_Klava & (1<<7))
  {	
 Pauza_Vikl1 = 0;				 //зброс времени блока клавиотуры
 Pauza_Vikl2 = 0;			  //зброс времени блока клавиотуры  
 Bit2_Klava &=~(1<<0);		    //блок клавиотуры выключон  
 if ( Bit_Klava & (1<<6)) {}
 else
  {
  Bit_Klava |=(1<<5);   
  Ff = 3;	 
  while (Vibor_Klava < Koli_Sensorov)
   {
   Sostoania_Knopok[ Vibor_Klava ] = 0;  //очищаем масcив 
   Kalibrovka_Knopok[ Vibor_Klava++ ] = 0;	
   }	 
  Bit_Klava |=(1<<6) ;
  return;	 
  }	
 while (Vibor_Klava < Koli_Sensorov)		  // сканируем 'Koli_Sensorov' раз весь массив
  {
  KolProverka_Klava = Sostoania_Knopok [Vibor_Klava]; //считуем состояние кнопок с массива   
  if ( KolProverka_Klava > 1 )			 //проверка на наличие данных в масиве больше 5 тогда фиксируем нажатие
   {
  Sot1_Klava = 2;					   //зафексировано высокое состояние кнопки					  
  Kalibrovka_Knopok[Vibor_Klava] = Kalibrovka_Knopok[Vibor_Klava] + 1;													 
   }																						
  Sostoania_Knopok[ Vibor_Klava ] = 0;	 //очищаем масcив
  Vibor_Klava ++;  
  }			 
   if ( Sot1_Klava == 0 )
 {
   Bit_Klava &=~(1<<7);
   Bit_Klava &=~(1<<6);
   Vibor_Klava = 0;
   while (Vibor_Klava < Koli_Sensorov)
   {	
  Kalibrovka_Knopok[Vibor_Klava] = Kalibrovka_Knopok[Vibor_Klava] + Kalibrovka_Sensop; //4
  eeprom_write_byte(Vibor_Klava, Kalibrovka_Knopok[Vibor_Klava]);	  //запись в eeprom данных калибровки
  Vibor_Klava++;			   
   }
   Bit_Klava &=~(1<<5);
   Indikasia_PORT &=~(1 << Indikasia_Bit );		
 }
   KolProverka_Klava = 0;
   return;		 
 }
 //========================//
 //подпрограмма считывания кнопки нажата и оджата				 
 //========================//	
   while (Vibor_Klava < Koli_Sensorov)			   // сканируем 'Koli_Sensorov' раз весь массив
 {
 KolProverka_Klava = Sostoania_Knopok [Vibor_Klava]; //считуем состояние кнопок с массива
  // ===========================//
 if ( Bit_Klava & (1<<0) )		  //зафиксировано или нет нажатие кнопки
  {
 if (Bit2_Klava != (1<<0) )	  // если блок включон то не выполняется 
  {
 Pauza_Vikl1 = 0;			 //зброс времени блока клавиотуры
    Pauza_Vikl2 = 0;		   //зброс времени блока клавиотуры
    Bit_Klava &=~(1<<5);		
  }
 else
  {
 if ( Nomer_Klava == Vibor_Klava )
  {		   
 if ((Knopka_Blok-1) == Vibor_Klava )
  {
    if ( (Pauza_Vikl1++) > 10 )	  //пауза на удержание кнопки
	 {
    Pauza_Vikl1 = 0;			  //зброс времени блока клавиотуры
			 Pauza_Vikl2 = 0; 
	   Bit2_Klava &=~(1<<0);
	   A = 1500;					 //работа для звука
	   Indikasia_PORT |=(1 << Indikasia_Bit );
			 Bit_Klava |=(1<<4);			   
	 }				 
  }			
  }	   
  }												  
  }								 
   //==========================//
  else
   {
  if (Bit2_Klava & (1<<0) )			   // если блок включон то  выполняется 
    Pauza_Vikl1 = 0;  
  if (KolProverka_Klava > 7 )			 //проверка на наличие данных в масиве больше 5 тогда фиксируем нажатие
	  {			  
	 if ( Temp_Klava1 == 0 )			  //обнаружено нажатие первое
	   {
   Temp_Klava1 = KolProverka_Klava;  //сохраняем первое значение
	  Nomer_Klava = Vibor_Klava;	    //сохраняем номер ячейки с масива
   Bit_Klava |= (1<<2);			  //зафиксировано нажатие	  
 }
   else
 {
	  if ( KolProverka_Klava > 1 )    // проверка на третее нажатие
  Bit_Klava &=~ (1<<2);		 //была обнаружена ошибка										   
    }	  
    }			   
 }
   Sostoania_Knopok[ Vibor_Klava ] = 0;	 //очищаем масcив
   Vibor_Klava ++;																	 
 }																				
 }						
  //========================================//
 if ( Bit_Klava & (1<<1) )	    //кнопка оджата
  {
 if (Bit2_Klava != (1<<0) )  //если блок то невыполняется 
   Indikasia_PORT &=~(1 << Indikasia_Bit );	
 Bit_Klava &=~ ((1<<0)|(1<<1));
 AA &=~(1<<0);
  }		  
 if ( Bit_Klava & (1 << 2))	   //зафексировано нажатие или нет
  {
 if ( Temp_Klava1 < 7 )			  //на правельное нажатие
   {
  Pauza_Vikl1 = 0;			    //зброс времени блока клавиотуры
  Pauza_Vikl2 = 0;			    //зброс времени блока клавиотуры	  
  Bit_Klava &=~ (1<<2);		   //не зафиксировано нажатие
  return;
   }	   
  A = 100;					 //работа для звука   
  if (Bit2_Klava != (1<<0) )   //если блок то невыполняется
   {
  Bit_Klava &=~(1<<5);  
  switch ( Nomer_Klava + 1) 
		 {
	 case 1  :  UDR = Kod_Sensora1; break;  
  case 2  :  UDR = Kod_Sensora2; break;
  case 3  :  UDR = Kod_Sensora3; break;
  case 4  :  UDR = Kod_Sensora4; break;  
  case 5  :  UDR = Kod_Sensora5; break;
  case 6  :  UDR = Kod_Sensora6; break;
  case 7  :  UDR = Kod_Sensora7; break;  
  case 8  :  UDR = Kod_Sensora8; break;
  case 9  :  UDR = Kod_Sensora9; break;
  case 10  :  UDR = Kod_Sensora10; break;  
  case 11  :  UDR = Kod_Sensora11; break;
  case 12  :  UDR = Kod_Sensora12; break;
  case 13  :  UDR = Kod_Sensora13; break;  
  case 14  :  UDR = Kod_Sensora14; break;
  case 15  :  UDR = Kod_Sensora15; break;
  case 16  :  UDR = Kod_Sensora16; break;  
  case 17  :  UDR = Kod_Sensora17; break;
  case 18  :  UDR = Kod_Sensora18; break;
  case 19  :  UDR = Kod_Sensora19; break;
  case 20  :  UDR = Kod_Sensora20; break;
   }	 
  UCSRB |=(1 << UDRIE);  //передача по USART
		   Indikasia_PORT |=(1 << Indikasia_Bit );
  Bit_Klava |=(1<<4);
   }
  Bit_Klava &=~(1<<2);
  Bit_Klava |=(1<<0);
  }				 
   } 
 //**********************************//   
int main(void)
{
Bit_Klava = 0;
PORTA = Bit_Klava;
PORTB = 0;
PORTC = 0;
PORTD = 0;
//==========//
DDRD |=(1<<1);  //вывода USART (TXD)
DDRB |=(1<<0);   //вывода USART (RXD)
   UBRRH = 0;
UBRRL = 103;	  //9600 бит.
UCSRB |= (1 << RXCIE)|(1<<TXEN);//|(1<<UDRIE);//		  //разрешаем прерывание завершение приема (RXCIE),регистр данных чист(UDRIE),разрешаем прием (RXEN),разрешение передачи(TXEN)
UCSRC |= (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0);   //выбор регистра (URSEL),1 стоп бит (USBS), 8бит размер слова
//==========//
   DDR_Zvuk |= (1 << Bit_Zvuk  ); 
Indikasia_DDR |=(1 << Indikasia_Bit);
Kalibrovka_PORT |=(1 << Bit_Kalibrovka );
DDR_Kalibrovka &=~(1  << Bit_Kalibrovka );
Sensor_1_DDR |=(1 << Sensor_1_Bit);
Sensor_2_DDR |=(1 << Sensor_2_Bit);
Sensor_3_DDR |=(1 << Sensor_3_Bit);
Sensor_4_DDR |=(1 << Sensor_4_Bit);
Sensor_5_DDR |=(1 << Sensor_5_Bit);
Sensor_6_DDR |=(1 << Sensor_6_Bit);
Sensor_7_DDR |=(1 << Sensor_7_Bit);
Sensor_8_DDR |=(1 << Sensor_8_Bit);
Sensor_9_DDR |=(1 << Sensor_9_Bit);
Sensor_10_DDR |=(1 << Sensor_10_Bit);
Sensor_11_DDR |=(1 << Sensor_11_Bit);
Sensor_12_DDR |=(1 << Sensor_12_Bit);
Sensor_13_DDR |=(1 << Sensor_13_Bit);
Sensor_14_DDR |=(1 << Sensor_14_Bit);
Sensor_15_DDR |=(1 << Sensor_15_Bit);
Sensor_16_DDR |=(1 << Sensor_16_Bit);
Sensor_17_DDR |=(1 << Sensor_17_Bit);
Sensor_18_DDR |=(1 << Sensor_18_Bit);
Sensor_19_DDR |=(1 << Sensor_19_Bit);
Sensor_20_DDR |=(1 << Sensor_20_Bit);
Ss = 20 - Koli_Sensorov ;
Real_EEPROM();
OCR0=1;			   
   TCCR0=0b00001101; 
   TIMSK|=(1<<1);
 //=============//
   while (1)
 {
 Temp2_Klava = Kalibrovka_Knopok[ Vibor_Klava ];
 if ( Vibor_Klava == Koli_Sensorov )
   Vibor_Klava = 100;
 if (Bit_Klava & (1<<0) )
  {
  if (  Nomer_Klava == Vibor_Klava )
   {
  if ( Sostoania_Knopok [Nomer_Klava] == 0 )
   {
  AA++;  
  if ( AA == 200 )
  {
  Bit_Klava |=(1<<1);
  AA = 0;
  }
   }
  else
   {
  AA = 0; 
   }	  
   }		   
  }



 switch (Vibor_Klava) 
  {
  case 0 :			    //номер ячейки в масиве онже номер кнопки "0"	  
 Klava_Proverka(Sensor_1_Bit,&Sensor_1_PIN,&Sensor_1_DDR);			   
 break; 
  case 1 :			    //номер ячейки в масиве онже номер кнопки "1" 
 Klava_Proverka(Sensor_2_Bit,&Sensor_2_PIN,&Sensor_2_DDR);		  
 break;
  case 2 :			    //номер ячейки в масиве онже номер кнопки "2" 
 Klava_Proverka(Sensor_3_Bit,&Sensor_3_PIN,&Sensor_3_DDR);		  
 break;
  case 3 :			    //номер ячейки в масиве онже номер кнопки "3" 
 Klava_Proverka(Sensor_4_Bit,&Sensor_4_PIN,&Sensor_4_DDR);			   
 break;
  case 4 :			    //номер ячейки в масиве онже номер кнопки "4" 
 Klava_Proverka(Sensor_5_Bit,&Sensor_5_PIN,&Sensor_5_DDR);		  
 break; 
  case 5 :			    //номер ячейки в масиве онже номер кнопки "5" 
 Klava_Proverka(Sensor_6_Bit,&Sensor_6_PIN,&Sensor_6_DDR);		  
 break;
  case 6 :			    //номер ячейки в масиве онже номер кнопки "6" 
 Klava_Proverka(Sensor_7_Bit,&Sensor_7_PIN,&Sensor_7_DDR);		  
 break;
  case 7 :			    //номер ячейки в масиве онже номер кнопки "7" 
 Klava_Proverka(Sensor_8_Bit,&Sensor_8_PIN,&Sensor_8_DDR);		  
 break;
  case 8 :			    //номер ячейки в масиве онже номер кнопки "0"	  
 Klava_Proverka(Sensor_9_Bit,&Sensor_9_PIN,&Sensor_9_DDR);		  
 break; 
  case 9 :			    //номер ячейки в масиве онже номер кнопки "1" 
 Klava_Proverka(Sensor_10_Bit,&Sensor_10_PIN,&Sensor_10_DDR);		  
 break;
  case 10 :			    //номер ячейки в масиве онже номер кнопки "2" 
 Klava_Proverka(Sensor_11_Bit,&Sensor_11_PIN,&Sensor_11_DDR);		  
 break;
  case 11 :			    //номер ячейки в масиве онже номер кнопки "3" 
 Klava_Proverka(Sensor_12_Bit,&Sensor_12_PIN,&Sensor_12_DDR);			   
 break;
  case 12 :			    //номер ячейки в масиве онже номер кнопки "4" 
 Klava_Proverka(Sensor_13_Bit,&Sensor_13_PIN,&Sensor_13_DDR);		  
 break; 
  case 13 :			    //номер ячейки в масиве онже номер кнопки "5" 
 Klava_Proverka(Sensor_14_Bit,&Sensor_14_PIN,&Sensor_14_DDR);		  
 break;
  case 14 :			    //номер ячейки в масиве онже номер кнопки "6" 
 Klava_Proverka(Sensor_15_Bit,&Sensor_15_PIN,&Sensor_15_DDR);		  
 break;
  case 15 :			    //номер ячейки в масиве онже номер кнопки "7" 
 Klava_Proverka(Sensor_16_Bit,&Sensor_16_PIN,&Sensor_16_DDR);		  
 break;  
  case 16 :			    //номер ячейки в масиве онже номер кнопки "4" 
 Klava_Proverka(Sensor_17_Bit,&Sensor_17_PIN,&Sensor_17_DDR);		  
 break; 
  case 17 :			    //номер ячейки в масиве онже номер кнопки "5" 
 Klava_Proverka(Sensor_18_Bit,&Sensor_18_PIN,&Sensor_18_DDR);		  
 break;
  case 18 :			    //номер ячейки в масиве онже номер кнопки "6" 
 Klava_Proverka(Sensor_19_Bit,&Sensor_19_PIN,&Sensor_19_DDR);		  
 break;
  case 19 :			    //номер ячейки в масиве онже номер кнопки "7" 
 Klava_Proverka(Sensor_20_Bit,&Sensor_20_PIN,&Sensor_20_DDR);		  
 break;

  case 100 :			   //кнопки все просканированые		 
  PROVERKA_DANIX();
  Vibor_Klava = 101;
  Pauza_Klava = 0;		   
 break; 
  case 101 :			   //кнопки все просканированые		 
  if (Pauza_Klava > Ss) //пауза
 Vibor_Klava = 0;				   
 break;							   
  }									   
 }		
}
 //***************************//
   //считуем с eeproma
 //***************************//
void Real_EEPROM()
 {
unsigned R,W;
R = 1 + Koli_Sensorov;
W = 0 + Koli_Sensorov ;
while (R )
 {
 Kalibrovka_Knopok[W] = eeprom_read_byte(W);	   //считуем с памяти данные калибровки
 W --;
 R-- ;
 }	  
 }

А можно по подробнее где именно тут отслеживание нажатия?

И можно ли доработать программу которую выложил я?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...