Помогите решить проблему SD18B20

Tazzzz
Offline
Зарегистрирован: 09.04.2014
Здравствуйте. Помогите решить проблему, есть скетч в котором на матрицы 8X8 выводится бегущей 
строкой температура с датчика SD18B20 каждые 60 секунд, есть кнопки которые вызывают программу. 
Во время обновления температуры раз 60 секунд примерно на 5 секунд перестают работать кнопки. 
Помогите решить возможно материальное вознаграждение. 

// монетоприемник на одну монету (жетон) - HI-N07CS
const int moneyPin2=3;

int pulse2=0;
unsigned long timeAllPulse2=500; // макс. время приема монеты
unsigned long timeCount2=0;
unsigned int sum=0;

// EEPROM для хранения настроек
//0-1 - номинал
//      интервалы
//2-      
#include <EEPROM.h>

#include <OneWire.h>
OneWire&nbsp; ds(19);&nbsp; // on pin A5
unsigned long millistemp=0;
int t_temp=0;
int heating=0;
#define TEMP1 20
#define TEMP2 20
int z1,z2;
byte my_addr[8]={0x28,0xD9,0xF6,0x26,6,0,0,0xDE};
//28 D9 F6 26 6 0 0 DE
//#include <SPI.h>
//#define spiRelay 8 
//#define spiDisplay 10
//#define keyPin1 14
//#define keyPin2 15

#define MPAUSE1 5000 

unsigned long time_millis1=0;
int pause1=0;
int valbutton=0;
unsigned long millisbutton1[9]={0,0,0,0,0,0,0,0,0};

unsigned long tekinterval1[9]={1500,80,60,3,9,10,70,50,9};
unsigned long mininterval1[9]={10,1,1,1,1,1,1,10,1};
unsigned long maxinterval1[9]={10000,100,100,100,100,100,100,10000,20};
unsigned long stepinterval1[9]={10,1,1,1,1,1,1,10,10};

int tekprg=0;
int tekprgpr=0;
unsigned long millisinterval=0;
unsigned long millispause1=0;
// дисплей WH1602
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(10,9,7,6,5,4);


#include <MaxMatrix.h>
MaxMatrix m(7,6,5,5);
byte comma[] = {
&nbsp; 1,&nbsp; 8, B11000000};

byte figure[40][10]={
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //0
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //1
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000100,
&nbsp;&nbsp;&nbsp; B00000110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2
&nbsp;&nbsp;&nbsp; B00000000,&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; B11000110,
&nbsp;&nbsp;&nbsp; B11100111,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11001111,
&nbsp;&nbsp;&nbsp; B11000110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //3
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //4
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //5
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B11111011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //6
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B11111011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //7
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B00001111,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //8
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //9
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //пустота
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //для мигания
&nbsp;&nbsp;&nbsp; B01100111,
&nbsp;&nbsp;&nbsp; B11100011,
&nbsp;&nbsp;&nbsp; B01110001,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101001,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B01100111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. номинал
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000100,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 1
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 2
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10001000,
&nbsp;&nbsp;&nbsp; B11001000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 3
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 4
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00111000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 5
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 6
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11100000,
&nbsp;&nbsp;&nbsp; B10110000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. пауза
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000101,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //скорость бегущей строки и выполнение программы 0
&nbsp;&nbsp;&nbsp; B01100111,
&nbsp;&nbsp;&nbsp; B11100011,
&nbsp;&nbsp;&nbsp; B01110001,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101001,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B01100111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 1
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 2
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10001000,
&nbsp;&nbsp;&nbsp; B11001000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 3
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 4
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00111000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 5
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 6
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11100000,
&nbsp;&nbsp;&nbsp; B10110000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы пауза
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //пустота
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква П
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква У
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B10000011,
&nbsp;&nbsp;&nbsp; B11000110,
&nbsp;&nbsp;&nbsp; B01101100,
&nbsp;&nbsp;&nbsp; B00111111,
&nbsp;&nbsp;&nbsp; B00011111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква С
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01111110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B01000010},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Т
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква И
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00110000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00001100,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Е
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Ж
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B00111100,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00111100,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B11000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Н
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак=
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак градус 
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000101,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак - 
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp; };





int per1=0;
&nbsp; 




#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
&nbsp;&nbsp;&nbsp; {'1','2','3','a'},
&nbsp;&nbsp;&nbsp; {'4','5','6','b'},
&nbsp;&nbsp;&nbsp; {'7','8','9','c'},
&nbsp;&nbsp;&nbsp; {'*','0','#','d'}
};

byte rowPins[ROWS] = {14, 15, 16, 17}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {18, 19,9,4}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char key=' ';


// *********************************
int prg=0;
int pos_options=0;
//char* str_options[7]={"nominal","delay1 ","delay2 ","delay3 ","delay4 ","delay5 ","delay6 "};
int kstep=1;

unsigned long millisblink=0;
int blink1=0;int blink0=0;
byte arrblink[]={10,10,10,0,29,30,31,32,33,32,34,10,35,34,32,0,36,10,32,37,10,10,10,38,31};
//** выводы реле
int arrrelay[6]={2,8,10,11,12,13};
//byte arrdorelay[8][6]={{1,1,1,0,1,0},{0,1,1,0,1,0},{0,0,1,0,1,0},
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,0,1,1,1,0},{0,0,0,0,1,0},{0,0,0,0,0,1},
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,0,0,0,0,0},{0,0,0,0,0,0}};
byte arrdorelay[8][6]={{0,0,0,1,0,1},{1,0,0,1,0,1},{1,1,0,1,0,1},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,1,0,0,0,1},{1,1,1,1,0,1},{1,1,1,1,1,0},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,1,1,1,1,1},{1,1,1,1,1,1}};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#include <MsTimer2.h>
void flash()
&nbsp; {
&nbsp; if(sum>0)
&nbsp;&nbsp;&nbsp; return;
&nbsp; MsTimer2::stop();
&nbsp; blink0=(blink0+1)%8;
&nbsp; if(blink0==0)&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; blink1=(blink1+1)%sizeof(arrblink);
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.writeSprite(i*8-blink0,0,figure[arrblink[(blink1+i)%sizeof(arrblink)]]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
&nbsp; MsTimer2::set(tekinterval1[8]*10, flash); //&nbsp; period
&nbsp; MsTimer2::start();
&nbsp; }

unsigned long millisendprg=0;

void setup()
{
&nbsp; Serial.begin(9600);
&nbsp; pinMode(moneyPin2,INPUT);
&nbsp; //attachInterrupt(0,count_pulse,FALLING);
&nbsp; //attachInterrupt(1,count_pulse2,FALLING);

&nbsp; m.init();
&nbsp; m.setIntensity(15);
&nbsp;&nbsp; Serial.println("setup ok!!");
&nbsp; //*****************************************
&nbsp; //for(int i=0;i<8;i++)
&nbsp; //&nbsp;&nbsp; {EEPROM.write(i*2,highByte(tekinterval1[i]));
&nbsp; //&nbsp;&nbsp; EEPROM.write(i*2+1,lowByte(tekinterval1[i]));}&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp; //*****************************************
&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[i]=(EEPROM.read(i*2)<<8)+EEPROM.read(i*2+1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(tekinterval1[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp; 
&nbsp; //** выводы реле 2,8,10,11,12,13
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; {pinMode(arrrelay[i],OUTPUT);delay(20);digitalWrite(arrrelay[i],HIGH);}
&nbsp;&nbsp;&nbsp; 
&nbsp; 
&nbsp; Serial.println("spiok!!");
&nbsp; m.writeSprite(0, 0, figure[11]);
&nbsp; m.writeSprite(8, 0, figure[0]);
&nbsp; m.writeSprite(16,0, figure[0]);
&nbsp; m.writeSprite(24, 0, figure[0]);
&nbsp; m.writeSprite(32, 0, figure[0]);
&nbsp; delay(2000);
&nbsp; attachInterrupt(1,count_pulse2,FALLING);
&nbsp;&nbsp;&nbsp; t_temp=get_temp();
&nbsp;&nbsp;&nbsp; if(t_temp<999)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //t_temp=t_temp;
&nbsp;&nbsp;&nbsp; z1=abs(t_temp)/10;
&nbsp;&nbsp;&nbsp; z2=byte(abs(t_temp)%10);
&nbsp;&nbsp;&nbsp; //arrblink[22]=byte(z2);
&nbsp;&nbsp;&nbsp; if(t_temp<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=39;
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=10; 
&nbsp;&nbsp;&nbsp; if(z1<1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z2);arrblink[22]=38;arrblink[23]=31;arrblink[24]=10;}
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z1);arrblink[22]=byte(z2);arrblink[23]=38;arrblink[24]=31;}
&nbsp;&nbsp;&nbsp; }
}

void loop()
{
if(prg==1)
&nbsp; {
&nbsp; 
&nbsp; key = keypad.getKey();
&nbsp; if(key)
&nbsp;&nbsp;&nbsp; {doForKey(key);heating=0;}
&nbsp; }
else
&nbsp; {
&nbsp; //
&nbsp; if(millis()-millisblink>tekinterval1[8]*10 && sum==0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; millisblink=millis();
&nbsp;&nbsp;&nbsp; blink0=(blink0+1)%8;
&nbsp;&nbsp;&nbsp; if(blink0==0)&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blink1=(blink1+1)%sizeof(arrblink);
&nbsp;&nbsp;&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.writeSprite(i*8-blink0,0,figure[arrblink[(blink1+i)%sizeof(arrblink)]]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp; //
&nbsp; if(millis()-millistemp>60000 && sum==0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; MsTimer2::set(tekinterval1[8]*10, flash); //&nbsp; period
&nbsp;&nbsp;&nbsp; MsTimer2::start();&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; t_temp=get_temp();
&nbsp;&nbsp;&nbsp; if(t_temp<999)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //t_temp=t_temp;
&nbsp;&nbsp;&nbsp; z1=abs(t_temp)/10;
&nbsp;&nbsp;&nbsp; z2=byte(abs(t_temp)%10);
&nbsp;&nbsp;&nbsp; //arrblink[22]=byte(z2);
&nbsp;&nbsp;&nbsp; if(t_temp<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=39;
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=10; 
&nbsp;&nbsp;&nbsp; if(z1<1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z2);arrblink[22]=38;arrblink[23]=31;arrblink[24]=10;}
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z1);arrblink[22]=byte(z2);arrblink[23]=38;arrblink[24]=31;}
&nbsp;&nbsp;&nbsp; String t1=" t="+String(t_temp);
&nbsp;&nbsp;&nbsp; Serial.print("temp=");Serial.println(int(t_temp));
&nbsp;&nbsp;&nbsp; //Serial.println(z1);Serial.print(' ');Serial.print(z2);Serial.println();
&nbsp;&nbsp;&nbsp; //Serial.println(t1);
&nbsp;&nbsp;&nbsp; for(int j=20;j<25;j++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Serial.print(arrblink[j],DEC);Serial.print(' ');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; //Serial.println();
&nbsp;&nbsp;&nbsp; millistemp=millis();
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("no temp"); 
&nbsp;&nbsp; MsTimer2::stop();&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp; }
&nbsp; // прошло максимальное время приема монеты?
&nbsp; if(pulse2>0 && (millis()-timeCount2)>timeAllPulse2) 
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //Serial.println("moneta - ok");
&nbsp;&nbsp;&nbsp; //Serial.println(EEPROM.read(0));
&nbsp;&nbsp;&nbsp; //Serial.println(EEPROM.read(1));
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; //sum=sum+(EEPROM.read(0)<<8)+EEPROM.read(1);
&nbsp;&nbsp;&nbsp; sum=sum+tekinterval1[0];
&nbsp;&nbsp;&nbsp; //Serial.print("sum=");Serial.println(sum);
&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp; pulse2=0;&nbsp; 
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; key = keypad.getKey();
&nbsp;&nbsp;&nbsp; if(key)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {doForKey(key);heating=0;}
&nbsp;&nbsp;&nbsp; 
&nbsp; if((millis()-millisinterval)>tekinterval1[tekprg]*100 && pause1==0 && tekprg>0 && tekprg<7 && sum>0)&nbsp; 
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; millisinterval=millis();
&nbsp;&nbsp;&nbsp; sum=sum-10;
&nbsp;&nbsp;&nbsp; //show_sum(sum);
&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp; if(sum==0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=0;send_led(8);send_relay(8);blink1=0;blink0=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heating=0;millisendprg=millis();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp;&nbsp;&nbsp; }
&nbsp; //
&nbsp; if(pause1==1)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; if((millis()-millispause1)>tekinterval1[7]*100)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {pause1=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekprg=5;//tekprg=tekprgpr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_led(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_relay(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("pause1=");Serial.println(pause1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("tekprg=");Serial.println(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp; //Serial.print("A0=");Serial.println(analogRead(A0));
&nbsp;} 

&nbsp;if(t_temp<TEMP1 && heating==0 && millis()-millispause1>10000 && millis()-millisendprg>20000)
&nbsp;&nbsp; {heating=1;//Serial.println("ON");
&nbsp;&nbsp; digitalWrite(arrrelay[0],0);digitalWrite(arrrelay[4],0);
&nbsp;&nbsp; }
&nbsp;if(t_temp>TEMP2 && heating==1)
&nbsp;&nbsp; {heating=0;//Serial.println("OFF");
&nbsp;&nbsp; digitalWrite(arrrelay[0],1);digitalWrite(arrrelay[4],1);
&nbsp;&nbsp; }
&nbsp;
}

// обработка нажатия кнопки
void doForKey(char key) {
&nbsp;//Serial.print("key="); Serial.println(key);
&nbsp;switch(key)
&nbsp;&nbsp; {
&nbsp;&nbsp; case '1': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=1;pause1=0;send_relay(1);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '2': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=2;pause1=0;send_relay(2);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '3': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=3;pause1=0;send_relay(3);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '4': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=4;pause1=0;send_relay(4);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '5': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=5;pause1=0;send_relay(5);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '6': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=6;pause1=0;send_relay(6);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '7': if(prg<1 && sum>0 && tekprg>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprgpr=tekprg;pause1=1;millispause1=millis();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_relay(7);tekprg=7;view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '*': prg=1-prg;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(prg==1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {show_prg(pos_options);send_relay(8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_led(8);tekprg=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //show_sum(sum);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blink1=0;blink0=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=0;tekprg=0;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case '9': if(prg==1)&nbsp; // следующий параметр
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=(pos_options+1)%9;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("pos_options="); Serial.println(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case 'a': // +монета 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum=sum+tekinterval1[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pulse2=0;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case 'b':&nbsp; sum=10;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // обнуление (было предыдущий параметр)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*if(prg==1)&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=pos_options-1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pos_options<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=8;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case '0': if(prg==1)&nbsp; // уменьшение значения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(stepinterval1[pos_options]*kstep<tekinterval1[pos_options])&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=tekinterval1[pos_options]-stepinterval1[pos_options]*kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=max(tekinterval1[pos_options],mininterval1[pos_options]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '8': if(prg==1)&nbsp; // увеличение значения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=tekinterval1[pos_options]+stepinterval1[pos_options]*kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=min(tekinterval1[pos_options],maxinterval1[pos_options]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '#': if(prg==1)&nbsp; // коэффициент*10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kstep=10/kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case 'd': if(prg==1)&nbsp; // сохранить настройки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {EEPROM.write(i*2,highByte(tekinterval1[i]));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EEPROM.write(i*2+1,lowByte(tekinterval1[i]));}&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case 'с': if(prg==1)&nbsp; // не сохранять настройки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[i]=(EEPROM.read(i*2)<<8)+EEPROM.read(i*2+1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(tekinterval1[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; }
&nbsp;&nbsp; 
&nbsp;}
// обработка прерывания монетоприемника - получить кол-во импульсов
//&nbsp; 
void count_pulse2()
&nbsp; {
&nbsp; //detachInterrupt(0);
&nbsp; detachInterrupt(1);
&nbsp; pulse2++;
&nbsp; if(pulse2==1)
&nbsp;&nbsp;&nbsp; timeCount2=millis();
&nbsp; //attachInterrupt(0,count_pulse,FALLING);
&nbsp; attachInterrupt(1,count_pulse2,FALLING);
&nbsp; }
// индикация отсчета
void show_sum(int val)
&nbsp; {
&nbsp;&nbsp;&nbsp; float sum1;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,0);lcd.print("working&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);lcd.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; sum1=float(val)/10;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print(sum1);
&nbsp; }
// индикация настройки
void show_prg(int val)
&nbsp; {
&nbsp;&nbsp;&nbsp; float interval1;
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,0);
&nbsp;&nbsp;&nbsp; //lcd.print(str_options[val]);
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; //interval1=float(tekinterval1[val])/10;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print(interval1);
&nbsp;&nbsp;&nbsp; view_figure(tekinterval1[val],2);
&nbsp; }

// запуск/останов реле
void send_relay(int val)
&nbsp; {
&nbsp; //Serial.print("sendrelay=");Serial.println(val);

&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; digitalWrite(arrrelay[i],HIGH);
&nbsp; if(val<5)
&nbsp;&nbsp;&nbsp; {digitalWrite(arrrelay[4],LOW);
&nbsp;&nbsp;&nbsp;&nbsp; delay(1000);}
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; digitalWrite(arrrelay[i],arrdorelay[val-1][i]);
&nbsp;&nbsp; 
&nbsp; }
// запуск/останов реле+светодиодов
void send_led(byte val)
&nbsp; {
&nbsp; //digitalWrite(spiRelay,LOW);
&nbsp; //SPI.transfer(B00000001<<(tekprg-1));
&nbsp; //SPI.transfer(B00000001<<(val-1));
&nbsp; //SPI.transfer(B00000001<<(val-1));
&nbsp; //digitalWrite(spiRelay,HIGH); 
&nbsp; }
// показать цифры
void view_figure(unsigned int num,int mode)
&nbsp; {
&nbsp; int num1,num2,num3,num4,num5;
&nbsp; num1=num/10000;
&nbsp; num2=(num-num1*10000)/1000;
&nbsp; num3=(num-num1*10000-num2*1000)/100;
&nbsp; num4=(num-num1*10000-num2*1000-num3*100)/10;
&nbsp; num5=num-num1*10000-num2*1000-num3*100-num4*10;
&nbsp; //Serial.print("num1="); Serial.print(num1);
&nbsp; //Serial.print(" num2="); Serial.print(num2);
&nbsp; //Serial.print(" num3="); Serial.print(num3);
&nbsp; //Serial.print(" num4="); Serial.print(num4);
&nbsp; if(num5>0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(32, 0, figure[num5]);
&nbsp;&nbsp;&nbsp; m.writeSprite(24, 0, figure[num4]);
&nbsp;&nbsp;&nbsp; m.writeSprite(16,0, figure[num3]);
&nbsp;&nbsp;&nbsp; m.writeSprite(8, 0, figure[num2]);
&nbsp;&nbsp;&nbsp; m.writeSprite(32,0, comma);
&nbsp;&nbsp;&nbsp; }
&nbsp; else
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(32, 0, figure[num4]);
&nbsp;&nbsp;&nbsp; m.writeSprite(24, 0, figure[num3]);
&nbsp;&nbsp;&nbsp; m.writeSprite(16,0, figure[num2]);
&nbsp;&nbsp;&nbsp; m.writeSprite(8, 0, figure[num1]);
&nbsp;&nbsp;&nbsp; }
&nbsp; if(mode>1)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(0, 0, figure[pos_options+12]);
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp; else
&nbsp;&nbsp;&nbsp; m.writeSprite(0, 0, figure[tekprg+20]);
&nbsp; }
&nbsp;// получение тмпературы датчика
int get_temp()
&nbsp;{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp,SignBit;
&nbsp; /*if ( !ds.search(addr)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("No more addresses.\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.reset_search();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 999;
&nbsp; }
&nbsp; Serial.print("R=");&nbsp; //R=28 Not sure what this is
&nbsp; for( i = 0; i < 8; i++) {
&nbsp;&nbsp;&nbsp; Serial.print(addr[i], HEX);
&nbsp;&nbsp;&nbsp; Serial.print(" ");
&nbsp; }
&nbsp; if ( OneWire::crc8( addr, 7) != addr[7]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("CRC is not valid!\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;
&nbsp; }
&nbsp; if ( addr[0] != 0x28) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("Device is not a DS18S20 family device.\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;
&nbsp; }*/
&nbsp; ds.reset();
&nbsp; ds.select(my_addr);
&nbsp; ds.write(0x44,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // start conversion, with parasite power on at the end
&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp; // maybe 750ms is enough, maybe not
&nbsp; // we might do a ds.depower() here, but the reset will take care of it.

&nbsp; present = ds.reset();
&nbsp; ds.select(my_addr);
&nbsp; ds.write(0xBE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Read Scratchpad
&nbsp; for ( i = 0; i < 9; i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we need 9 bytes
&nbsp;&nbsp;&nbsp; data[i] = ds.read();
&nbsp; }
&nbsp; Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature
&nbsp;&nbsp; // Проверяем - или нет
&nbsp;&nbsp;&nbsp;&nbsp; Temp = Temp/16;&nbsp; 
&nbsp; return Temp;
&nbsp;}

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

ШТО ЭТО ? Что такое sd18B20 ? И что это за завораживающее форматирование текста !?

inspiritus
Offline
Зарегистрирован: 17.12.2012

нуу для начала Вы бы привели публикуемый код в удобовоспринимаемый вид. прогрните через текстовый редактор и &nbsp; замените на пробел.

между 570 и 594 строками  подвешивает, пока происходит, подробнее некогда разбираться.  возможно библиотека MaxMatrix бегущую строку пока выводит все подвешивает.

Еще там раз в минуту опрашивается датчик температуры вызовом get_temp();  с задержкой в одну секунду внутри, что вызывает безусловное висение в это время всего остального. в принципе delay(1000) в 885 строке можно заменить на delay(800),  если загрубить точность температуры можно это время еще уменьшить. 

 

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Можете решить проблему я оплачу.

maksim
Offline
Зарегистрирован: 12.02.2012

Вы сначала оплатите, а после решим проблему.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Я не против, лиж бы проблему помогли решить.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Tazzzz пишет:

Я не против, лиж бы проблему помогли решить.

высылайте 100$ на наш колективный акаунт. (блин, нужно подумать куда их потратим)

vov4ik
Offline
Зарегистрирован: 10.09.2013

Грамотно опишите задачу, какая ардуина, какие матрици и сколько, зачем нужны кнопки.

А пока соедените как на картинке.После залиь скеч 

#include <OneWire.h>
OneWire  ds(2);  // on pin 2 (a 4.7K resistor is necessary)
byte deviceType;
void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;

  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius; 
  
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
  
 
 

  if (OneWire::crc8(addr, 7) != addr[7]) {
     
      return;
  }

 

  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      deviceType=1; //Chip = DS18S20 or old DS1820
      break;
    case 0x28:
      type_s = 0;
      deviceType=2;//Chip = DS18B20
      break;
    case 0x22:
      type_s = 0;
      deviceType=3;// Chip = DS1822
      break;
    default:
      deviceType=0;//������ ����������
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        
  
  delay(1000);     
 
  
  ds.reset();
  ds.select(addr);    
  ds.write(0xBE);     
 for ( i = 0; i < 9; i++) {data[i] = ds.read();} 
     


  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; 
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;  
    else if (cfg == 0x20) raw = raw & ~3; 
    else if (cfg == 0x40) raw = raw & ~1; 
   
  }
  celsius = (float)raw / 16.0;
  
  
  Serial.write (1);
  Serial.write (2);
  Serial.print (deviceType); 
  Serial.write (3);
     for( i = 0; i < 8; i++) {      
   
     Serial.write (2);
     Serial.print(addr[i], HEX);
     Serial.write (3);
    }
  Serial.write (2);
  Serial.print(celsius);
  Serial.write (3); 
  Serial.write (4);
  
  
}

Посмотреть что выдаст порт выделить и при помощи Ctrl+C скопировать.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

В программе 16 кнопок 6 основных при включении которых, срабатывают различные комбинации реле по таймеру, естькнопка зачисления баланса таймера и программные кнопки для редактирования настроек баланса и интервала отсчёа разных программ. Термометр нужен для изменения алгоритма включения реле, если температура упадёт ниже заданной. Всё работает нормально, только провалы в 5 секунд , не получатся зачислить баланс времени.

Матрицы для бегущей строки 5 штук MAX7219

Вот что выдаёт монитор порта с вашим скетчем: 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56 228F5B4BC5006130.56

Tazzzz
Offline
Зарегистрирован: 09.04.2014
// монетоприемник на одну монету (жетон) - HI-N07CS
const int moneyPin2=3;

int pulse2=0;
unsigned long timeAllPulse2=500; // макс. время приема монеты
unsigned long timeCount2=0;
unsigned int sum=0;

// EEPROM для хранения настроек
//0-1 - номинал
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; интервалы
//2-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#include <EEPROM.h>

#include <OneWire.h>
OneWire&nbsp; ds(19);&nbsp; // on pin A5
unsigned long millistemp=0;
int t_temp=0;
int heating=0;
#define TEMP1 20
#define TEMP2 20
int z1,z2;
byte my_addr[8]={0x28,0xD9,0xF6,0x26,6,0,0,0xDE};
//28 D9 F6 26 6 0 0 DE
//#include <SPI.h>
//#define spiRelay 8 
//#define spiDisplay 10
//#define keyPin1 14
//#define keyPin2 15

#define MPAUSE1 5000 

unsigned long time_millis1=0;
int pause1=0;
int valbutton=0;
unsigned long millisbutton1[9]={0,0,0,0,0,0,0,0,0};

unsigned long tekinterval1[9]={1500,80,60,3,9,10,70,50,9};
unsigned long mininterval1[9]={10,1,1,1,1,1,1,10,1};
unsigned long maxinterval1[9]={10000,100,100,100,100,100,100,10000,20};
unsigned long stepinterval1[9]={10,1,1,1,1,1,1,10,10};

int tekprg=0;
int tekprgpr=0;
unsigned long millisinterval=0;
unsigned long millispause1=0;
// дисплей WH1602
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(10,9,7,6,5,4);


#include <MaxMatrix.h>
MaxMatrix m(7,6,5,5);
byte comma[] = {
&nbsp; 1,&nbsp; 8, B11000000};

byte figure[40][10]={
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //0
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01111110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B01111110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //1
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000100,
&nbsp;&nbsp;&nbsp; B00000110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2
&nbsp;&nbsp;&nbsp; B00000000,&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; B11000110,
&nbsp;&nbsp;&nbsp; B11100111,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11001111,
&nbsp;&nbsp;&nbsp; B11000110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //3
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B11100111,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B01100110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //4
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //5
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01011111,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B01110011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //6
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01111110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B01110010},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //7
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B11111011,
&nbsp;&nbsp;&nbsp; B00001111,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //8
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B01100110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //9
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01001110,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B01111110},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //пустота
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //для мигания
&nbsp;&nbsp;&nbsp; B01100111,
&nbsp;&nbsp;&nbsp; B11100011,
&nbsp;&nbsp;&nbsp; B01110001,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101001,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B01100111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. номинал
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000100,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 1
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 2
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10001000,
&nbsp;&nbsp;&nbsp; B11001000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 3
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 4
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00111000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 5
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B10111000,
&nbsp;&nbsp;&nbsp; B10101000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. задержка 6
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000001,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11100000,
&nbsp;&nbsp;&nbsp; B10110000,
&nbsp;&nbsp;&nbsp; B11101000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //прогр. пауза
&nbsp;&nbsp;&nbsp; B00011111,
&nbsp;&nbsp;&nbsp; B00000101,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00100000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //скорость бегущей строки и выполнение программы 0
&nbsp;&nbsp;&nbsp; B01100111,
&nbsp;&nbsp;&nbsp; B11100011,
&nbsp;&nbsp;&nbsp; B01110001,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101000,
&nbsp;&nbsp;&nbsp; B01101001,
&nbsp;&nbsp;&nbsp; B11110011,
&nbsp;&nbsp;&nbsp; B01100111},
&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 1
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00000100,
&nbsp;&nbsp;&nbsp; B11111110,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 2
&nbsp;&nbsp;&nbsp; B11000100,
&nbsp;&nbsp;&nbsp; B10100010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10001100,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 3
&nbsp;&nbsp;&nbsp; B01000100,
&nbsp;&nbsp;&nbsp; B10000010,
&nbsp;&nbsp;&nbsp; B10000010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B01101100,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 4
&nbsp;&nbsp;&nbsp; B00011110,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B00010000,
&nbsp;&nbsp;&nbsp; B11111110,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 5
&nbsp;&nbsp;&nbsp; B01001110,
&nbsp;&nbsp;&nbsp; B10001010,
&nbsp;&nbsp;&nbsp; B10001010,
&nbsp;&nbsp;&nbsp; B10001010,
&nbsp;&nbsp;&nbsp; B10001010,
&nbsp;&nbsp;&nbsp; B01110010,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы 6
&nbsp;&nbsp;&nbsp; B01111100,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B01100100,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //выполнение программы пауза
&nbsp;&nbsp;&nbsp; B01001100,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B10010010,
&nbsp;&nbsp;&nbsp; B01100100,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //пустота
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква П
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква У
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01001111,
&nbsp;&nbsp;&nbsp; B11011111,
&nbsp;&nbsp;&nbsp; B11011000,
&nbsp;&nbsp;&nbsp; B11011000,
&nbsp;&nbsp;&nbsp; B11011000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B01111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква С
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B01111110,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B01000010},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Т
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00000011,
&nbsp;&nbsp;&nbsp; B00000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква И
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00110000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00001100,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Е
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11011011,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B11000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Ж
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11000011,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B00111100,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00111100,
&nbsp;&nbsp;&nbsp; B01100110,
&nbsp;&nbsp;&nbsp; B11000011},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //буква Н
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B00011000,
&nbsp;&nbsp;&nbsp; B11111111,
&nbsp;&nbsp;&nbsp; B11111111},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак=
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00010100,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак градус 
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000101,
&nbsp;&nbsp;&nbsp; B00000111,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp;&nbsp; {8,8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //знак - 
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00001000,
&nbsp;&nbsp;&nbsp; B00000000,
&nbsp;&nbsp;&nbsp; B00000000},
&nbsp; };





int per1=0;
&nbsp; 




#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
&nbsp;&nbsp;&nbsp; {'1','2','3','a'},
&nbsp;&nbsp;&nbsp; {'4','5','6','b'},
&nbsp;&nbsp;&nbsp; {'7','8','9','c'},
&nbsp;&nbsp;&nbsp; {'*','0','#','d'}
};

byte rowPins[ROWS] = {14, 15, 16, 17}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {18, 19,9,4}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char key=' ';


// *********************************
int prg=0;
int pos_options=0;
//char* str_options[7]={"nominal","delay1 ","delay2 ","delay3 ","delay4 ","delay5 ","delay6 "};
int kstep=1;

unsigned long millisblink=0;
int blink1=0;int blink0=0;
byte arrblink[]={10,10,10,0,29,30,31,32,33,32,34,10,35,34,32,0,36,10,32,37,10,10,10,38,31};
//** выводы реле
int arrrelay[6]={2,8,10,11,12,13};
//byte arrdorelay[8][6]={{1,1,1,0,1,0},{0,1,1,0,1,0},{0,0,1,0,1,0},
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,0,1,1,1,0},{0,0,0,0,1,0},{0,0,0,0,0,1},
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,0,0,0,0,0},{0,0,0,0,0,0}};
byte arrdorelay[8][6]={{0,0,0,1,0,1},{1,0,0,1,0,1},{1,1,0,1,0,1},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,1,0,0,0,1},{1,1,1,1,0,1},{1,1,1,1,1,0},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,1,1,1,1,1},{1,1,1,1,1,1}};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#include <MsTimer2.h>
void flash()
&nbsp; {
&nbsp; if(sum>0)
&nbsp;&nbsp;&nbsp; return;
&nbsp; MsTimer2::stop();
&nbsp; blink0=(blink0+1)%8;
&nbsp; if(blink0==0)&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; blink1=(blink1+1)%sizeof(arrblink);
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.writeSprite(i*8-blink0,0,figure[arrblink[(blink1+i)%sizeof(arrblink)]]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
&nbsp; MsTimer2::set(tekinterval1[8]*10, flash); //&nbsp; period
&nbsp; MsTimer2::start();
&nbsp; }

unsigned long millisendprg=0;

void setup()
{
&nbsp; Serial.begin(9600);
&nbsp; pinMode(moneyPin2,INPUT);
&nbsp; //attachInterrupt(0,count_pulse,FALLING);
&nbsp; //attachInterrupt(1,count_pulse2,FALLING);

&nbsp; m.init();
&nbsp; m.setIntensity(15);
&nbsp;&nbsp; Serial.println("setup ok!!");
&nbsp; //*****************************************
&nbsp; //for(int i=0;i<8;i++)
&nbsp; //&nbsp;&nbsp; {EEPROM.write(i*2,highByte(tekinterval1[i]));
&nbsp; //&nbsp;&nbsp; EEPROM.write(i*2+1,lowByte(tekinterval1[i]));}&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp; //*****************************************
&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[i]=(EEPROM.read(i*2)<<8)+EEPROM.read(i*2+1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(tekinterval1[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp; 
&nbsp; //** выводы реле 2,8,10,11,12,13
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; {pinMode(arrrelay[i],OUTPUT);delay(20);digitalWrite(arrrelay[i],HIGH);}
&nbsp;&nbsp;&nbsp; 
&nbsp; 
&nbsp; Serial.println("spiok!!");
&nbsp; m.writeSprite(0, 0, figure[11]);
&nbsp; m.writeSprite(8, 0, figure[0]);
&nbsp; m.writeSprite(16,0, figure[0]);
&nbsp; m.writeSprite(24, 0, figure[0]);
&nbsp; m.writeSprite(32, 0, figure[0]);
&nbsp; delay(2000);
&nbsp; attachInterrupt(1,count_pulse2,FALLING);
&nbsp;&nbsp;&nbsp; t_temp=get_temp();
&nbsp;&nbsp;&nbsp; if(t_temp<999)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //t_temp=t_temp;
&nbsp;&nbsp;&nbsp; z1=abs(t_temp)/10;
&nbsp;&nbsp;&nbsp; z2=byte(abs(t_temp)%10);
&nbsp;&nbsp;&nbsp; //arrblink[22]=byte(z2);
&nbsp;&nbsp;&nbsp; if(t_temp<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=39;
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=10; 
&nbsp;&nbsp;&nbsp; if(z1<1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z2);arrblink[22]=38;arrblink[23]=31;arrblink[24]=10;}
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z1);arrblink[22]=byte(z2);arrblink[23]=38;arrblink[24]=31;}
&nbsp;&nbsp;&nbsp; }
}

void loop()
{
if(prg==1)
&nbsp; {
&nbsp; 
&nbsp; key = keypad.getKey();
&nbsp; if(key)
&nbsp;&nbsp;&nbsp; {doForKey(key);heating=0;}
&nbsp; }
else
&nbsp; {
&nbsp; //
&nbsp; if(millis()-millisblink>tekinterval1[8]*10 && sum==0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; millisblink=millis();
&nbsp;&nbsp;&nbsp; blink0=(blink0+1)%8;
&nbsp;&nbsp;&nbsp; if(blink0==0)&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blink1=(blink1+1)%sizeof(arrblink);
&nbsp;&nbsp;&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.writeSprite(i*8-blink0,0,figure[arrblink[(blink1+i)%sizeof(arrblink)]]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp; //
&nbsp; if(millis()-millistemp>600000 && sum==0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; MsTimer2::set(tekinterval1[8]*10, flash); //&nbsp; period
&nbsp;&nbsp;&nbsp; MsTimer2::start();&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; t_temp=get_temp();
&nbsp;&nbsp;&nbsp; if(t_temp<999)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //t_temp=t_temp;
&nbsp;&nbsp;&nbsp; z1=abs(t_temp)/10;
&nbsp;&nbsp;&nbsp; z2=byte(abs(t_temp)%10);
&nbsp;&nbsp;&nbsp; //arrblink[22]=byte(z2);
&nbsp;&nbsp;&nbsp; if(t_temp<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=39;
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrblink[20]=10; 
&nbsp;&nbsp;&nbsp; if(z1<1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z2);arrblink[22]=38;arrblink[23]=31;arrblink[24]=10;}
&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {arrblink[21]=byte(z1);arrblink[22]=byte(z2);arrblink[23]=38;arrblink[24]=31;}
&nbsp;&nbsp;&nbsp; String t1=" t="+String(t_temp);
&nbsp;&nbsp;&nbsp; Serial.print("temp=");Serial.println(int(t_temp));
&nbsp;&nbsp;&nbsp; //Serial.println(z1);Serial.print(' ');Serial.print(z2);Serial.println();
&nbsp;&nbsp;&nbsp; //Serial.println(t1);
&nbsp;&nbsp;&nbsp; for(int j=20;j<25;j++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Serial.print(arrblink[j],DEC);Serial.print(' ');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; //Serial.println();
&nbsp;&nbsp;&nbsp; millistemp=millis();
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp; Serial.println("no temp"); 
&nbsp;&nbsp; MsTimer2::stop();&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp; }
&nbsp; // прошло максимальное время приема монеты?
&nbsp; if(pulse2>0 && (millis()-timeCount2)>timeAllPulse2) 
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; //Serial.println("moneta - ok");
&nbsp;&nbsp;&nbsp; //Serial.println(EEPROM.read(0));
&nbsp;&nbsp;&nbsp; //Serial.println(EEPROM.read(1));
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; //sum=sum+(EEPROM.read(0)<<8)+EEPROM.read(1);
&nbsp;&nbsp;&nbsp; sum=sum+tekinterval1[0];
&nbsp;&nbsp;&nbsp; //Serial.print("sum=");Serial.println(sum);
&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp; pulse2=0;&nbsp; 
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; key = keypad.getKey();
&nbsp;&nbsp;&nbsp; if(key)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {doForKey(key);heating=0;}
&nbsp;&nbsp;&nbsp; 
&nbsp; if((millis()-millisinterval)>tekinterval1[tekprg]*100 && pause1==0 && tekprg>0 && tekprg<7 && sum>0)&nbsp; 
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; millisinterval=millis();
&nbsp;&nbsp;&nbsp; sum=sum-10;
&nbsp;&nbsp;&nbsp; //show_sum(sum);
&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp; if(sum==0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=0;send_led(8);send_relay(8);blink1=0;blink0=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heating=0;millisendprg=millis();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp;&nbsp;&nbsp; }
&nbsp; //
&nbsp; if(pause1==1)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; if((millis()-millispause1)>tekinterval1[7]*100)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {pause1=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekprg=5;//tekprg=tekprgpr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_led(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_relay(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("pause1=");Serial.println(pause1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("tekprg=");Serial.println(tekprg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp; //Serial.print("A0=");Serial.println(analogRead(A0));
&nbsp;} 

&nbsp;if(t_temp<TEMP1 && heating==0 && millis()-millispause1>10000 && millis()-millisendprg>20000)
&nbsp;&nbsp; {heating=1;//Serial.println("ON");
&nbsp;&nbsp; digitalWrite(arrrelay[0],0);digitalWrite(arrrelay[4],0);
&nbsp;&nbsp; }
&nbsp;if(t_temp>TEMP2 && heating==1)
&nbsp;&nbsp; {heating=0;//Serial.println("OFF");
&nbsp;&nbsp; digitalWrite(arrrelay[0],1);digitalWrite(arrrelay[4],1);
&nbsp;&nbsp; }
&nbsp;
}

// обработка нажатия кнопки
void doForKey(char key) {
&nbsp;//Serial.print("key="); Serial.println(key);
&nbsp;switch(key)
&nbsp;&nbsp; {
&nbsp;&nbsp; case '1': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=1;pause1=0;send_relay(1);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '2': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=2;pause1=0;send_relay(2);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '3': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=3;pause1=0;send_relay(3);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '4': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=4;pause1=0;send_relay(4);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '5': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=5;pause1=0;send_relay(5);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '6': if(prg<1 && sum>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprg=6;pause1=0;send_relay(6);view_figure(sum,1);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '7': if(prg<1 && sum>0 && tekprg>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {tekprgpr=tekprg;pause1=1;millispause1=millis();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_relay(7);tekprg=7;view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '*': prg=1-prg;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(prg==1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {show_prg(pos_options);send_relay(8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_led(8);tekprg=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //show_sum(sum);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blink1=0;blink0=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=0;tekprg=0;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case '9': if(prg==1)&nbsp; // следующий параметр
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=(pos_options+1)%9;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("pos_options="); Serial.println(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case 'a': // +монета 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum=sum+tekinterval1[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; view_figure(sum,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pulse2=0;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case 'b':&nbsp; sum=10;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // обнуление (было предыдущий параметр)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*if(prg==1)&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=pos_options-1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pos_options<0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_options=8;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp; case '0': if(prg==1)&nbsp; // уменьшение значения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(stepinterval1[pos_options]*kstep<tekinterval1[pos_options])&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=tekinterval1[pos_options]-stepinterval1[pos_options]*kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=max(tekinterval1[pos_options],mininterval1[pos_options]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '8': if(prg==1)&nbsp; // увеличение значения
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=tekinterval1[pos_options]+stepinterval1[pos_options]*kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[pos_options]=min(tekinterval1[pos_options],maxinterval1[pos_options]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show_prg(pos_options);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case '#': if(prg==1)&nbsp; // коэффициент*10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kstep=10/kstep;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case 'd': if(prg==1)&nbsp; // сохранить настройки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {EEPROM.write(i*2,highByte(tekinterval1[i]));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EEPROM.write(i*2+1,lowByte(tekinterval1[i]));}&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; case 'с': if(prg==1)&nbsp; // не сохранять настройки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i<9;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tekinterval1[i]=(EEPROM.read(i*2)<<8)+EEPROM.read(i*2+1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(tekinterval1[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; 
&nbsp;&nbsp; }
&nbsp;&nbsp; 
&nbsp;}
// обработка прерывания монетоприемника - получить кол-во импульсов
//&nbsp; 
void count_pulse2()
&nbsp; {
&nbsp; //detachInterrupt(0);
&nbsp; detachInterrupt(1);
&nbsp; pulse2++;
&nbsp; if(pulse2==1)
&nbsp;&nbsp;&nbsp; timeCount2=millis();
&nbsp; //attachInterrupt(0,count_pulse,FALLING);
&nbsp; attachInterrupt(1,count_pulse2,FALLING);
&nbsp; }
// индикация отсчета
void show_sum(int val)
&nbsp; {
&nbsp;&nbsp;&nbsp; float sum1;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,0);lcd.print("working&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);lcd.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; sum1=float(val)/10;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print(sum1);
&nbsp; }
// индикация настройки
void show_prg(int val)
&nbsp; {
&nbsp;&nbsp;&nbsp; float interval1;
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,0);
&nbsp;&nbsp;&nbsp; //lcd.print(str_options[val]);
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
&nbsp;&nbsp;&nbsp; //interval1=float(tekinterval1[val])/10;
&nbsp;&nbsp;&nbsp; //lcd.setCursor(2,1);
&nbsp;&nbsp;&nbsp; //lcd.print(interval1);
&nbsp;&nbsp;&nbsp; view_figure(tekinterval1[val],2);
&nbsp; }

// запуск/останов реле
void send_relay(int val)
&nbsp; {
&nbsp; //Serial.print("sendrelay=");Serial.println(val);

&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; digitalWrite(arrrelay[i],HIGH);
&nbsp; if(val<5)
&nbsp;&nbsp;&nbsp; {digitalWrite(arrrelay[4],LOW);
&nbsp;&nbsp;&nbsp;&nbsp; delay(1000);}
&nbsp; for(int i=0;i<6;i++)
&nbsp;&nbsp;&nbsp; digitalWrite(arrrelay[i],arrdorelay[val-1][i]);
&nbsp;&nbsp; 
&nbsp; }
// запуск/останов реле+светодиодов
void send_led(byte val)
&nbsp; {
&nbsp; //digitalWrite(spiRelay,LOW);
&nbsp; //SPI.transfer(B00000001<<(tekprg-1));
&nbsp; //SPI.transfer(B00000001<<(val-1));
&nbsp; //SPI.transfer(B00000001<<(val-1));
&nbsp; //digitalWrite(spiRelay,HIGH); 
&nbsp; }
// показать цифры
void view_figure(unsigned int num,int mode)
&nbsp; {
&nbsp; int num1,num2,num3,num4,num5;
&nbsp; num1=num/10000;
&nbsp; num2=(num-num1*10000)/1000;
&nbsp; num3=(num-num1*10000-num2*1000)/100;
&nbsp; num4=(num-num1*10000-num2*1000-num3*100)/10;
&nbsp; num5=num-num1*10000-num2*1000-num3*100-num4*10;
&nbsp; //Serial.print("num1="); Serial.print(num1);
&nbsp; //Serial.print(" num2="); Serial.print(num2);
&nbsp; //Serial.print(" num3="); Serial.print(num3);
&nbsp; //Serial.print(" num4="); Serial.print(num4);
&nbsp; if(num5>0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(32, 0, figure[num5]);
&nbsp;&nbsp;&nbsp; m.writeSprite(24, 0, figure[num4]);
&nbsp;&nbsp;&nbsp; m.writeSprite(16,0, figure[num3]);
&nbsp;&nbsp;&nbsp; m.writeSprite(8, 0, figure[num2]);
&nbsp;&nbsp;&nbsp; m.writeSprite(32,0, comma);
&nbsp;&nbsp;&nbsp; }
&nbsp; else
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(32, 0, figure[num4]);
&nbsp;&nbsp;&nbsp; m.writeSprite(24, 0, figure[num3]);
&nbsp;&nbsp;&nbsp; m.writeSprite(16,0, figure[num2]);
&nbsp;&nbsp;&nbsp; m.writeSprite(8, 0, figure[num1]);
&nbsp;&nbsp;&nbsp; }
&nbsp; if(mode>1)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; m.writeSprite(0, 0, figure[pos_options+12]);
&nbsp;&nbsp;&nbsp; }&nbsp; 
&nbsp; else
&nbsp;&nbsp;&nbsp; m.writeSprite(0, 0, figure[tekprg+20]);
&nbsp; }
&nbsp;// получение тмпературы датчика
int get_temp()
&nbsp;{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp,SignBit;
&nbsp; /*if ( !ds.search(addr)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Serial.print("No more addresses.\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.reset_search();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 999;
&nbsp; }
&nbsp; Serial.print("R=");&nbsp; //R=28 Not sure what this is
&nbsp; for( i = 0; i < 8; i++) {
&nbsp;&nbsp;&nbsp; Serial.print(addr[i], HEX);
&nbsp;&nbsp;&nbsp; Serial.print(" ");
&nbsp; }
&nbsp; if ( OneWire::crc8( addr, 7) != addr[7]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("CRC is not valid!\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;
&nbsp; }
&nbsp; if ( addr[0] != 0x28) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print("Device is not a DS18S20 family device.\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;
&nbsp; }*/
&nbsp; ds.reset();
&nbsp; ds.select(my_addr);
&nbsp; ds.write(0x44,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // start conversion, with parasite power on at the end
&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp; // maybe 750ms is enough, maybe not
&nbsp; // we might do a ds.depower() here, but the reset will take care of it.

&nbsp; present = ds.reset();
&nbsp; ds.select(my_addr);
&nbsp; ds.write(0xBE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Read Scratchpad
&nbsp; for ( i = 0; i < 9; i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we need 9 bytes
&nbsp;&nbsp;&nbsp; data[i] = ds.read();
&nbsp; }
&nbsp; Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature
&nbsp;&nbsp; // Проверяем - или нет
&nbsp;&nbsp;&nbsp;&nbsp; Temp = Temp/16;&nbsp; 
&nbsp; return Temp;
&nbsp;}

 

vov4ik
Offline
Зарегистрирован: 10.09.2013

Попробуйте привезать к своей мазайке, код чтение датчика один раз в минуту.

#include <OneWire.h>
byte SD18B20_address[8]={0x22, 0x8F, 0x5B, 0x4B, 0xC5, 0x0, 0x0, 0x61};
OneWire  SD18B20_pin_2(2);
unsigned long SD18B20_millis = 0UL;
float SD18B20_temperature = 0.00;
void setup()
{
}
void loop()
{
if(SD18B20_Timer(SD18B20_millis, 60000)) {SD18B20_millis = millis(); 
SD18B20_temperature = reading_SD18B20(SD18B20_address, 0);}
}


bool SD18B20_Timer(unsigned long startTime, unsigned long period )
  {unsigned long currentTime; currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
float convert_SD18B20_Data(byte type_s, byte data[12])
{int16_t raw = (data[1] << 8) | data[0];
  if (type_s) { raw = raw << 3; 
  if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
  }
else 
  {byte cfg = (data[4] & 0x60);
   if (cfg == 0x00) raw = raw & ~7;   else if (cfg == 0x20) raw = raw & ~3;  else if (cfg == 0x40) raw = raw & ~1;
  }
return  (float)raw / 16.0;
}
float reading_SD18B20(byte addr[8], byte type_s)
{ byte data[12];
byte id;
SD18B20_pin_2.reset();
SD18B20_pin_2.select(addr);
SD18B20_pin_2.write(0xBE);
for ( id = 0; id < 9; id++) {
 data[id] = SD18B20_pin_2.read();}
SD18B20_pin_2.reset();
SD18B20_pin_2.select(addr);
SD18B20_pin_2.write(0x44, 1);
return convert_SD18B20_Data(type_s, data);}

P.S. Смотрите как правильно сворачивать код, чтоб не приходилось пролистывать 1000 строк чтобы прочитать суть, http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

 

 

Tazzzz
Offline
Зарегистрирован: 09.04.2014

По умолчанию там стояло опрос датчика 60 секунд. Это я поправил в скетче. И датчик там прописывал чтобы определения не было.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Подскажите за что отвечает delay(1000) в строке 885, снижаю с 1000 до 500 тормоза становятся меньше?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Ето пауза  между запросом преобразования температуры и получением данных. Для 12 битного преобразования составляет 750 мс больше не нужно меньше надо смотреть с какой точность датчик настроен. Для меньшей точности можно снижать. Я в первом посте писал. Только строка 800.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Я удалил эту строчку тормозо пропали. Значение в этой строчке пропорциональны зависанию Температуру вроде бы показывает. Как это влияет на точность?

bwn
Offline
Зарегистрирован: 25.08.2014

Tazzzz пишет:

Я удалил эту строчку тормозо пропали. Значение в этой строчке пропорциональны зависанию Температуру вроде бы показывает. Как это влияет на точность?

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

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

Вот это "некоторое" время находится в полной вашей власти.
Можете ждать в delay хоть  полчаса , можете использовать millis, да хоть через час. И так много раз.
Только отдаваемые данные будут равны тому значению которое получилось при последнем " начать преобразование"

А вот спрашивать датчик когда он занят преобразованием - я не думаю что он вам правильно ответит, если вооюще что-то ответит.....
Поэтому ждите любым способом

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Я не сильно силён в программировании но удалил эту строчку и всё работает, температуру могу считывать хоть каждую секунду, не виснет. Просто не пойму зачем эта строчка нужна если всё и так прекрасно работает. 

bwn
Offline
Зарегистрирован: 25.08.2014

Вам же написали, что вы читаете неизвестно когда измеренную температуру. Пауза нужна для проведения преобразования и записи результата в регистры. Посмотрите тот код, который я вам дал ссылку (команды все ваши). Он состоит из двух частей - команды на конвертацию и считывание+пересчет. Дали команду конвертировать, подождали 750мС и провели считывание.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Я вас понял, просто если удалить delay из выше приведённого вами скетча температуру тоже прекрасно определяет, очень быстро прикладываешь руку повышается убираешь опускается. Вот я и спрашиваю, зачем delay.

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Так что, то что все работает это анамалия :-) получатся не нужно время для обработки?

bwn
Offline
Зарегистрирован: 25.08.2014

Tazzzz пишет:

Так что, то что все работает это анамалия :-) получатся не нужно время для обработки?

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

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Я не считаю просто уже как сутки работает как часы.

vov4ik
Offline
Зарегистрирован: 10.09.2013

Tazzzz пишет:

Я не считаю просто уже как сутки работает как часы.

выкиньте показания в порт типа флоут, и мы посмотрим как будет прыгать температура, скорей всего вы уменьшили дискретизацию.

maksim
Offline
Зарегистрирован: 12.02.2012

Ничего там не уменьшалось, просто читаются данные с предыдущей конвертации. Судя по тому, что данные читаются и температура изменяется, датчик либо не успевает затереть регистры, либо вообще их не затирает. Возможно, что регистры заполняются побитово по мере конвертации. И чтение происходит до изменений в регистрах или часть битов берется от предыдущей конвертации, а часть уже от текущей, а возможно переписываюся по завершению конвертации.

Так же может быть так, что при чтении регистров датчик приостанавливает или откладывает конвертацию, но скорее всего просто конвертирует независимо от того, что регистры в этот момент читаются, а вот в случае с паразитным питанием, скорее всего конвертация прерывается, а возможно и отлкладывается. При нормальном питании чтение регистров, как мне кажется, если конвертация продолается в момент чтения, может вносить цифровой шум и повлиять на точность измерений.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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

Tazzzz
Offline
Зарегистрирован: 09.04.2014

Понятно. Спасибо, значит страдает точность. Скажите можно сделать, что бы на жатие на кнопку было в приоритете перед проверкой температуры. Чтобы задержки не было?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вы не поняли. Точность страдает при ДВУХ-проводном подключении, а у вас трех-проводное. Но задержка все равно может быть, я не вникал в ваш код. А приоритет кнопки - очень просто, после подачи команды на конвертацию опрашивайте кнопки в цикле, а данные термометра читайте только если кнопки не нажаты.