Общение двух Atmega328p по COM порту

Нет ответов
Freeman
Offline
Зарегистрирован: 06.10.2016

Здравствуйте уважаемые форумчане.

Так как я начинающий в этом деле прошу не бронить меня. 

Мне необходима  Ваша  помощь в создании связи между двух Atmega328p.

Задача состоит в следующем. Два помещения находятся на расстоянии 300 метров между которыми есть холостая витая пара. В помещении первом стоит одна Atmega328p настроенная на приём 8 событий, вторая же Atmega328p на приём и информирование о событиях в первом помещении. Я настроил оба контроллера и они общаются между собой через COM по RX/TX пинам, после завершения пилотирования поставлю RS485.

Логика и схема такова:

1 – контроллер –

·         8 пинов на вход событий

·         1 пин лед отклик от второго устройства что он не завис

·         1 пин переключение режима на RS485

2 – Контроллер

·         8 пинов леды информирующие о сработке на первом контроллере

·         1 пин лед отклик от первого устройства что он не завис

·         1 пин кнопка при нажатии которого посылается код опроса первого устройства на котором 3 раза моргнёт лед и вернётся код об успешном отклике, затем 3 раза маргнёт лед на втором устройстве.

·         1 пин пищалка в случае любого события на первом контроллере пищит

·         2 пина LED дисплей 16х2 по I2C на котором тоже высвечивается информация о сработке.

 

ЛОГИКА:

ДЕЙСТВИЕ СРАБОТКА

1 Контроллер – в случае сработки посылает в COM букву или цифру соответствующую данному действию.

2 Контроллер приняв букву выполняет действия (зажигает лед, пищит, пишет на экране)

Точно также происходит выключение действия.

 

ДЕЙСТВИЕ ПРОВЕРКА СВЯЗИ

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

 

В чём нужна Ваша помощь:

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

Например – пришло событие: B   B   B  - где каждое B это отдельная команда принта в серийный порт, а второй контроллер приняв данное сообщение соединил их в одно значение “BBB” и выполнил условие как у меня сейчас выставлено на одну “B”.

2 – скорее всего я пытаюсь изобрести колесо и всё уже есть и работает но я не смог найти подходящий мне вариант. Как быть если была сработка а ВВВ дошло повреждённым например «ВАА»? как создать условие если пришло что то что не совпадает ни с одной из 16 команд заного запросить событие с первого устройства?

3 – можно ли сделать мануальный или циклический опрос портов на первом устройстве со второго устройства?

 

Это код первого устройства:

#include <LiquidCrystal_I2C.h>

#include <Wire.h> 


 
LiquidCrystal_I2C lcd(0x27,16,2);  // устанавливаем адрес 0x27, и дисплей 16 символов в 2 строки (16х2)

#define LED_PINS 2        // для пинга со второго контроллера моргает 3 раза

#define BUTTON_PINA 3     // реле 1
#define BUTTON_PINB 4     // реле 2
#define BUTTON_PINC 5     // реле 3
#define BUTTON_PIND 6     // реле 4
#define BUTTON_PINE 7     // реле 5
#define BUTTON_PINF 8     // реле 6
#define BUTTON_PING 9     // реле 7
#define BUTTON_PINJ 10    // реле 8
#define BUTTON_PINK 11    // Временно не нужен
#define RXTX_PIN 12       // RXTX ACTIVATION

#define DEBOUNCE_TIME 5000

int _previousValueA = 0;
int _previousValueB = 0;
int _previousValueC = 0;
int _previousValueD = 0;
int _previousValueE = 0;
int _previousValueF = 0;
int _previousValueG = 0;
int _previousValueJ = 0;
int _previousValueK = 0;

void setup() 
{
  Serial.begin(115200);
  
  pinMode(LED_PINS, OUTPUT);


  pinMode(BUTTON_PINA, INPUT);
  pinMode(BUTTON_PINB, INPUT);
  pinMode(BUTTON_PINC, INPUT);
  pinMode(BUTTON_PIND, INPUT);
  pinMode(BUTTON_PINE, INPUT);
  pinMode(BUTTON_PINF, INPUT);
  pinMode(BUTTON_PING, INPUT);
  pinMode(BUTTON_PINJ, INPUT);
  pinMode(BUTTON_PINK, INPUT);
  pinMode(RXTX_PIN, OUTPUT);  // RXTX предназначен для активациии режима приёма RS485
  

  _previousValueA = digitalRead(BUTTON_PINA);
  _previousValueB = digitalRead(BUTTON_PINB);
  _previousValueC = digitalRead(BUTTON_PINC);
  _previousValueD = digitalRead(BUTTON_PIND);
  _previousValueE = digitalRead(BUTTON_PINE);
  _previousValueF = digitalRead(BUTTON_PINF);
  _previousValueG = digitalRead(BUTTON_PING);
  _previousValueJ = digitalRead(BUTTON_PINJ);
  _previousValueK = digitalRead(BUTTON_PINK);
  

  digitalWrite(LED_PINS, LOW);
  digitalWrite(RXTX_PIN, LOW);
}

void SobitiePING()          // сработка при получении кода от первого устройства о состоянии связи
{
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  delay(1000);
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  delay(1000);
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  Serial.println("S");            // ответ для второго контроллера
}
//-------------------------------------------------------------------------------------
// ниже приведены действи при изменениях на восьми входах
void SobitieAHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("0");
  delay(100);
  Serial.println("0");
  delay(100);
  Serial.println("0");
  delay(100);
  //lcd.setCursor(0, 1);            
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieALow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("1");
  delay(100);
  Serial.println("1");
  delay(100);
  Serial.println("1");
  delay(100);
  //lcd.setCursor(0, 1);            
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieBHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("2");
  delay(100);
  Serial.println("2");
  delay(100);
  Serial.println("2");
  delay(100);
  //lcd.setCursor(1, 1);           
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieBLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("3");
  delay(100);
  Serial.println("3");
  delay(100);
  Serial.println("3");
  delay(100);
  //lcd.setCursor(1, 1);           
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieCHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("4");
  delay(100);
  Serial.println("4");
  delay(100);
  Serial.println("4");
  delay(100);
  //lcd.print("V");
  //lcd.setCursor(2, 1);
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieCLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("5");
  delay(100);
  Serial.println("5");
  delay(100);
  Serial.println("5");
  delay(100);
  //lcd.print("X");
  //lcd.setCursor(2, 1);
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------

void SobitieDHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("6");
  delay(100);
  Serial.println("6");
  delay(100);
  Serial.println("6");
  delay(100);
  //lcd.setCursor(3, 1);           
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieDLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("7");
  delay(100);
  Serial.println("7");
  delay(100);
  Serial.println("7");
  delay(100);
  //lcd.setCursor(3, 1);           
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}

//-------------------------------------------------------------------------------------
void SobitieEHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("8");
  delay(100);
  Serial.println("8");
  delay(100);
  Serial.println("8");
  delay(100);
  //lcd.setCursor(6, 1);            
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieELow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("9");
  delay(100);
  Serial.println("9");
  delay(100);
  Serial.println("9");
  delay(100);
  //lcd.setCursor(6, 1);            
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieFHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("A");
  delay(100);
  Serial.println("A");
  delay(100);
  Serial.println("A");
  delay(100);
  //lcd.setCursor(7, 1);           
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieFLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("B");
  delay(100);
  Serial.println("B");
  delay(100);
  Serial.println("B");
  delay(100);
  //lcd.setCursor(7, 1);           
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieGHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("C");
  delay(100);
  Serial.println("C");
  delay(100);
  Serial.println("C");
  delay(100);
  //lcd.setCursor(8, 1);            
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieGLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("D");
  delay(100);
  Serial.println("D");
  delay(100);
  Serial.println("D");
  delay(100);
  //lcd.setCursor(8, 1);            
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieJHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("E");
  delay(100);
  Serial.println("E");
  delay(100);
  Serial.println("E");
  delay(100);
  //lcd.setCursor(9, 1);           
  //lcd.print("V");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieJLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("F");
  delay(100);
  Serial.println("F");
  delay(100);
  Serial.println("F");
  delay(100);
  //lcd.setCursor(9, 1);           
  //lcd.print("X");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void SobitieKHigh()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("G");
  delay(100);
  Serial.println("G");
  delay(100);
  Serial.println("G");
  delay(100);
  //lcd.setCursor(12, 1);           
  //lcd.print("GOOD");
  digitalWrite(RXTX_PIN, LOW);
}
//-----------------------------------
void SobitieKLow()
{
  digitalWrite(RXTX_PIN, HIGH);
  Serial.println("J");
  delay(100);
  Serial.println("J");
  delay(100);
  Serial.println("J");
  delay(100);
  //lcd.setCursor(12, 1);           
  //lcd.print("FIRE");
  digitalWrite(RXTX_PIN, LOW);
}
//-------------------------------------------------------------------------------------
void loop()
{
    if(Serial.available()>0)
  {
    char letter = Serial.read();
    
    if (letter == 'R')              // это получение кода от кнопки проверки на втором устройстве
    {
      SobitiePING();
    }
  } 
//-------------------------------------------------------------------------------
    
  int currentValueA = digitalRead(BUTTON_PINA);
  
  if (_previousValueA != currentValueA)
  {
    if (currentValueA == HIGH)
    {
      SobitieAHigh();
    }
    else
    {
      SobitieALow();
    }

    _previousValueA = currentValueA;
  }
//-------------------------------------------------------------------
  int currentValueB = digitalRead(BUTTON_PINB);
  if (_previousValueB != currentValueB)
  {
    if (currentValueB == HIGH)
    {
      SobitieBHigh();
    }
    else
    {
      SobitieBLow();
    }
    
    _previousValueB = currentValueB;
  }
//-------------------------------------------------------------------
   int currentValueC = digitalRead(BUTTON_PINC);
  if (_previousValueC != currentValueC)
  {
    if (currentValueC == HIGH)
    {
      SobitieCHigh();
    }
    else
    {
      SobitieCLow();
    }
    

    _previousValueC = currentValueC;
  }
//-------------------------------------------------------------------
   int currentValueD = digitalRead(BUTTON_PIND);
  if (_previousValueD != currentValueD)
  {
    if (currentValueD == HIGH)
    {
      SobitieDHigh();
    }
    else
    {
      SobitieDLow();
    }
 
    _previousValueD = currentValueD;
  }
//-------------------------------------------------------------------
   int currentValueE = digitalRead(BUTTON_PINE);
  if (_previousValueE != currentValueE)
  {
    if (currentValueE == HIGH)
    {
      SobitieEHigh();
    }
    else
    {
      SobitieELow();
    }
 
    _previousValueE = currentValueE;
  }
//-------------------------------------------------------------------
   int currentValueF = digitalRead(BUTTON_PINF);
  if (_previousValueF != currentValueF)
  {
    if (currentValueF == HIGH)
    {
      SobitieFHigh();
    }
    else
    {
      SobitieFLow();
    }
 
    _previousValueF = currentValueF;
  }
//-------------------------------------------------------------------
   int currentValueG = digitalRead(BUTTON_PING);
  if (_previousValueG != currentValueG)
  {
    if (currentValueG == HIGH)
    {
      SobitieGHigh();
    }
    else
    {
      SobitieGLow();
    }
 
    _previousValueG = currentValueG;
  }
//-------------------------------------------------------------------
   int currentValueJ = digitalRead(BUTTON_PINJ);
  if (_previousValueJ != currentValueJ)
  {
    if (currentValueJ == HIGH)
    {
      SobitieJHigh();
    }
    else
    {
      SobitieJLow();
    }
 
    _previousValueJ = currentValueJ;
  }
//-------------------------------------------------------------------
//   int currentValueK = digitalRead(BUTTON_PINK);
//  if (_previousValueK != currentValueK)
//  {
//    if (currentValueK == HIGH)
//    {
//      SobitieKHigh();
//    }
//    else
//    {
//      SobitieKLow();
//    }
 
//    _previousValueK = currentValueK;
//  }

  delay(DEBOUNCE_TIME);
  
}

ЭТО КОД ВТОРОГО УСТРОЙСТВА

#include <LiquidCrystal_I2C.h>

#include <Wire.h> 

#include <Bounce2.h>
 
Bounce bouncer = Bounce();
 
LiquidCrystal_I2C lcd(0x27,16,2);  // устанавливаем адрес 0x27, и дисплей 16 символов в 2 строки (16х2)

#define LED_PINA 3   //relay 1
#define LED_PINB 4   //relay 2
#define LED_PINC 5   //relay 3
#define LED_PIND 6   //relay 4
#define LED_PINE 7   //relay 5
#define LED_PINF 8   //relay 6
#define LED_PING 9   //relay 7
#define LED_PINJ 10  //relay 8

#define BEEP_PINK 2 // Пищалка сигнал при сработке

#define LED_PINS 11 // Лед сигнал о нормальной связи

#define BUTTON_TEST 12     // Тестовая кнопка проверки связи

int _previousValueTEST = 0;
int soundPin = 2; //объявляем переменную с номером пина, на который мы подключили пьезоэлемент

void setup() 
{
  bouncer.attach(12); // устанавливаем кнопку
  bouncer.interval(150); // устанавливаем параметр stable interval = 150 мс
  Serial.begin(115200);
  
  lcd.init();                     // инициализация LCD 
  lcd.backlight();                // включаем подсветку
  lcd.clear();                    // очистка дисплея
  lcd.setCursor(0, 0);            
  lcd.print("1");          
  lcd.setCursor(0, 1);            
  lcd.print(" ");
  lcd.setCursor(1, 0);            
  lcd.print("2");
  lcd.setCursor(1, 1);           
  lcd.print(" ");
  lcd.setCursor(3, 0);            
  lcd.print("3");          
  lcd.setCursor(3, 1);            
  lcd.print(" ");
  lcd.setCursor(4, 0);            
  lcd.print("4");
  lcd.setCursor(4, 1);           
  lcd.print(" ");

  lcd.setCursor(6, 0);            
  lcd.print("5");          
  lcd.setCursor(6, 1);            
  lcd.print(" ");
  lcd.setCursor(7, 0);            
  lcd.print("6");
  lcd.setCursor(7, 1);           
  lcd.print(" ");
  lcd.setCursor(9, 0);            
  lcd.print("7");          
  lcd.setCursor(9, 1);            
  lcd.print(" ");
  lcd.setCursor(10, 0);            
  lcd.print("8");
  lcd.setCursor(12, 1);           
  lcd.print(" ");
  
  
  

  pinMode(LED_PINA, OUTPUT);  // LED 1
  pinMode(LED_PINB, OUTPUT);  // LED 2
  pinMode(LED_PINC, OUTPUT);  // LED 3
  pinMode(LED_PIND, OUTPUT);  // LED 4
  pinMode(LED_PINE, OUTPUT);  // LED 5
  pinMode(LED_PINF, OUTPUT);  // LED 6
  pinMode(LED_PING, OUTPUT);  // LED 7
  pinMode(LED_PINJ, OUTPUT);  // LED 8
  pinMode(soundPin, OUTPUT);  // BEEPER
  pinMode(LED_PINS, OUTPUT);  // LED TEST

  pinMode(BUTTON_TEST, INPUT);
  
 _previousValueTEST = digitalRead(BUTTON_TEST);

}

void SobitiePINS() // RX/TX TEST LED BLINK
{
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  delay(1000);
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  delay(1000);
  digitalWrite(LED_PINS, HIGH);
  delay(1000);
  digitalWrite(LED_PINS, LOW);
  delay(1000);
}
//----------------------------------------------------------------------------------------------------------------
void SobitieAHigh()
{
  //Serial.println("1 NORMAL");
  digitalWrite(LED_PINA, LOW);
  lcd.setCursor(0, 1);            // устанавливаем курсор 
  lcd.print(" ");  
  SobtitleBeepS();
}

void SobitieALow()
{
  //Serial.println("1 ATTENTION");
  digitalWrite(LED_PINA, HIGH);
  lcd.setCursor(0, 1);            // устанавливаем курсор 
  lcd.print("X");  
  SobtitleBeepL();
}
//----------------------------------------------------------------------------------------------------------------
void SobitieBHigh()
{
  //Serial.println("2 NORMAL");
  digitalWrite(LED_PINB, LOW);
  lcd.setCursor(1, 1);            // устанавливаем курсор 
  lcd.print(" "); 
  SobtitleBeepS(); 
}

void SobitieBLow()
{
  //Serial.println("2 ATTENTION");
  digitalWrite(LED_PINB, HIGH);
  lcd.setCursor(1, 1);            // устанавливаем курсор 
  lcd.print("X");  
  SobtitleBeepL();
}
//----------------------------------------------------------------------------------------------------------------
void SobitieCHigh()
{
  //Serial.println("3 NORMAL");
  digitalWrite(LED_PINC, LOW);
  lcd.setCursor(3, 1);            // устанавливаем курсор
  lcd.print(" "); 
  SobtitleBeepS();
}

void SobitieCLow()
{
  //Serial.println("3 ATTENTION");
  digitalWrite(LED_PINC, HIGH);
  lcd.setCursor(3, 1);            // устанавливаем курсор 
  lcd.print("X"); 
  SobtitleBeepL();  
}
//----------------------------------------------------------------------------------------------------------------

void SobitieDHigh()
{
  //Serial.println("4 NORMAL");
  digitalWrite(LED_PIND, LOW);
  lcd.setCursor(4, 1);            // устанавливаем курсор
  lcd.print(" ");
  SobtitleBeepS();   
}

void SobitieDLow()
{
  //Serial.println("4 ATTENTION");
  digitalWrite(LED_PIND, HIGH);
  lcd.setCursor(4, 1);            // устанавливаем курсор 
  lcd.print("X");  
  SobtitleBeepL();
}
//----------------------------------------------------------------------------------------------------------------
void SobitieEHigh()
{
  //Serial.println("5 NORMAL");
  digitalWrite(LED_PINE, LOW);
  lcd.setCursor(6, 1);            // устанавливаем курсор 
  lcd.print(" ");
  SobtitleBeepS();   
}

void SobitieELow()
{
  //Serial.println("5 ATTENTION");
  digitalWrite(LED_PINE, HIGH);
  lcd.setCursor(6, 1);            // устанавливаем курсор 
  lcd.print("X");
  SobtitleBeepL();  
}
//----------------------------------------------------------------------------------------------------------------
void SobitieFHigh()
{
  //Serial.println("6 NORMAL");
  digitalWrite(LED_PINF, LOW);
  lcd.setCursor(7, 1);            // устанавливаем курсор 
  lcd.print(" ");
  SobtitleBeepS();   
}

void SobitieFLow()
{
  //Serial.println("6 ATTENTION");
  digitalWrite(LED_PINF, HIGH);
  lcd.setCursor(7, 1);            // устанавливаем курсор 
  lcd.print("X");
  SobtitleBeepL();  
}
//----------------------------------------------------------------------------------------------------------------
void SobitieGHigh()
{
  //Serial.println("7 NORMAL");
  digitalWrite(LED_PING, LOW);
  lcd.setCursor(9, 1);            // устанавливаем курсор 
  lcd.print(" ");
  SobtitleBeepS();   
}

void SobitieGLow()
{
  //Serial.println("7 ATTENTION");
  digitalWrite(LED_PING, HIGH);
  lcd.setCursor(9, 1);            // устанавливаем курсор 
  lcd.print("X");
  SobtitleBeepL();  
}
//----------------------------------------------------------------------------------------------------------------
void SobitieJHigh()
{
  //Serial.println("8 NORMAL");
  digitalWrite(LED_PINJ, LOW);
  lcd.setCursor(10, 1);            // устанавливаем курсор 
  lcd.print(" ");
  SobtitleBeepS();   
}

void SobitieJLow()
{
  //Serial.println("8 ATTENTION");
  digitalWrite(LED_PINJ, HIGH);
  lcd.setCursor(10, 1);            // устанавливаем курсор
  lcd.print("X"); 
  SobtitleBeepL(); 
}
//----------------------------------------------------------------------------------------------------------------
//void SobitieKHigh()
//{
//  Serial.println("The TEMP is GOOD");
//  digitalWrite(LED_PINK, LOW);
//  lcd.setCursor(12, 1);            // устанавливаем курсор 
//  lcd.print("GOOD");   
//}

//void SobitieKLow()
//{
//  Serial.println("The TEMP is FIRE");
//  digitalWrite(LED_PINK, HIGH);
//  lcd.setCursor(12, 1);            // устанавливаем курсор
//  lcd.print("FIRE");  
//}
//----------------------------------------------------------------------------------------------------------------

void SobtitleBeepS()
{
  tone (soundPin, 1000); //включаем на 500 Гц
  delay(2000); //ждем 100 Мс
  noTone(soundPin);
}

void SobtitleBeepL()
{
  tone (soundPin, 1000); //включаем на 500 Гц
  delay(300); //ждем 100 Мс
  tone(soundPin, 500); //включаем на 250 Гц
  delay(300); //ждем 100 Мс
  tone(soundPin, 1000); //включаем на 100 Гц
  delay(300); //ждем 100 Мс
  tone(soundPin, 500); //включаем на 250 Гц
  delay(300); //ждем 100 Мс
  tone(soundPin, 1000); //включаем на 100 Гц
  delay(300); //ждем 100 Мс
  tone(soundPin, 500); //включаем на 250 Гц
  delay(300); //ждем 100 Мс
  noTone(soundPin);
}

void loop()
{
  if (bouncer.update())
  { //если произошло событие
    if (bouncer.read()==0)
     { //если кнопка нажата
       Serial.println("R"); //вывод сообщения о нажатии
     }
  }
//-------------------------------------------------------------------------------
  if(Serial.available()>0)
  {
    char letter = Serial.read();

    if (letter == '0')
    {
      
      SobitieAHigh();
    }
    else if (letter == '1')
    {
      SobitieALow();
    }


//-------------------------------------------------------------------------------
    if (letter == '2')
    {
      SobitieBHigh();
    }
    if (letter == '3')
    {
      SobitieBLow();
    }
//-------------------------------------------------------------------------------
    if (letter == '4')
    {
      SobitieCHigh();
    }
    if (letter == '5')
    {
      SobitieCLow();
    }
//-------------------------------------------------------------------------------
    if (letter == '6')
    {
      SobitieDHigh();
    }
    if (letter == '7')
    {
      SobitieDLow();
    } 

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
    
    if (letter == '8')
    {
      SobitieEHigh();
    }
    else if (letter == '9')
    {
      SobitieELow();
    }

//-------------------------------------------------------------------------------
    if (letter == 'A')
    {
      SobitieFHigh();
    }
    if (letter == 'B')
    {
      SobitieFLow();
    }
//-------------------------------------------------------------------------------
    if (letter == 'C')
    {
      SobitieGHigh();
    }
    if (letter == 'D')
    {
      SobitieGLow();
    }
//-------------------------------------------------------------------------------
    if (letter == 'E')
    {
      SobitieJHigh();
    }
    if (letter == 'F')
    {
      SobitieJLow();
    } 

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//    if (letter == 'G')
//    {
//      SobitieKHigh();
//    }
//    if (letter == 'J')
//    {
//      SobitieKLow();
//    } 

//-------------------------------------------------------------------------------
    if (letter == 'S')
    {
      SobitiePINS();
    }
    
  }

}