151

Re: Часы (DS3231) с будильником (Arduino)

Я так и не понял, большими цифрами занято только 5 байт + 1 байт под значок будильника, если я неправ, поправьте меня

152

Re: Часы (DS3231) с будильником (Arduino)

все верно

153

Re: Часы (DS3231) с будильником (Arduino)

подскажите как в этой строке прописать значок будильника
if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);alarm = 1;}else{digitalWrite(8,LOW);alarm = 0;}

154

Re: Часы (DS3231) с будильником (Arduino)

lcd.createChar(5, customChar5);

155

Re: Часы (DS3231) с будильником (Arduino)

Спасибо, попробую.

156

Re: Часы (DS3231) с будильником (Arduino)

liman324, добрый день.
1. Попробовал
lcd.createChar(5, customChar5); - не отображается, а вот строка ниже отлично отрабатывает
if(digitalRead(ALARM)==LOW){lcd.createChar(5, customChar5);lcd.setCursor(14, 1);lcd.write(5);}else{lcd.createChar(0, customChar0);lcd.setCursor(14, 1);lcd.write(0);}
2. На DS3231 убрал диод и резистор, проблема со сбросом времени ушла, да уж - намудрили китайцы!
3. От русских букв в дне неделе пришлось отказаться. Прописал сокращённые английские буквы.
Спасибо за помощь!

157

Re: Часы (DS3231) с будильником (Arduino)

Получилось так
http://forum.rcl-radio.ru/uploads/images/2025/04/a519ae837fb988234c91e124a3511634.jpg

158 (2025-04-15 10:17:24 отредактировано Evgen326)

Re: Часы (DS3231) с будильником (Arduino)

Выкладываю отлаженный код целиком

// http://forum.rcl-radio.ru/viewtopic.php?id=129&p=7
#include <Wire.h>
#include <LCD_1602_RUS.h>           // https://github.com/ssilver2007/LCD_1602_RUS
LCD_1602_RUS lcd(0x27,16,4);

  #define SET    4
  #define UP     2
  #define DW     3
  #define ALARM  5
  #define BB     6
  #include <EEPROM.h>
  #include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/ … DS3231.zip
  #include <Adafruit_BME280.h>    // https://github.com/adafruit/Adafruit_BME280_Library.git
  DS3231 clock;
  RTCDateTime DateTime;
  Adafruit_BME280 bme;

  int x = 0;
  int y = 0;
  int n2 = 0;
  int m2 = 0;
  int r3 = 0;
  int r4 = 0;

  int hour,minut,secon,year,month,day,den;
  int svet;
  float temp,p,h;
  int set,hh,mm,ss,dd,mn,gg,  hh_alarm,mm_alarm;
  long times,times0,times1;
   
  int reg;
  byte alarm_on;
  bool alarm,tic;

  byte customChar0[] = {B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000};
  byte customChar1[] = {B01110,B11111,B11111,B11111,B11111,B11111,B11111,B01110};
  byte customChar2[] = {B11111,B01110,B00000,B00000,B00000,B00000,B00000,B00000};
  byte customChar3[] = {B00000,B00000,B00000,B00000,B00000,B00000,B01110,B11111};
  byte customChar4[] = {B11111,B01110,B00000,B00000,B00000,B00000,B01110,B11111};
  byte customChar5[] = {B00100,B01110,B01110,B01110,B11111,B11111,B00010,B00000}; // значок будильника
  //byte customChar6[] = {B00000,B00000,B00001,B00011,B00011,B00001,B00000,B00000}; // двоеточие для больших часов
  //byte customChar7[] = {B00000,B00000,B10000,B11000,B11000,B10000,B00000,B00000}; // двоеточие для больших часов
 

void T1() { // Большие цифры для часов (на 2-3 строках)
  n2 = hh;
  m2 = mm;
  NB1();
  NB2();

  /*// этот блок показывает двоеточие в часах
  lcd.createChar(6, customChar6);lcd.setCursor(3, 2);lcd.write(6);
  lcd.createChar(7, customChar7);lcd.setCursor(4, 2);lcd.write(7);
  lcd.createChar(6, customChar6);lcd.setCursor(3, 3);lcd.write(6);
  lcd.createChar(7, customChar7);lcd.setCursor(4, 3);lcd.write(7);
   delay(250);
  // этот блок затирает двоеточие в часах
  lcd.createChar(0, customChar0);lcd.setCursor(3, 2);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor(4, 2);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor(3, 3);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor(4, 3);lcd.write(0);
   delay(250);*/
}

void n3() {
  if (y == 0) {x0();}
  if (y == 1) {x1();}
  if (y == 2) {x2();}
  if (y == 3) {x3();}
  if (y == 4) {x4();}
  if (y == 5) {x5();}
  if (y == 6) {x6();}
  if (y == 7) {x7();}
  if (y == 8) {x8();}
  if (y == 9) {x9();}
  if (y == 10) {x10();}
}

void x0() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(2, customChar2);lcd.setCursor((x + 1), 2);lcd.write(2);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(1, customChar1);lcd.setCursor(x, 3);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x1() {
  lcd.createChar(2, customChar2);lcd.setCursor(x, 2);lcd.write(2);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 1), 2);lcd.write(1);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 2), 2);lcd.write(0);
  lcd.createChar(3, customChar3);lcd.setCursor(x, 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 1), 3);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 2), 3);lcd.write(3);
  }
void x2() {
  lcd.createChar(2, customChar2);lcd.setCursor(x, 2);lcd.write(2);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(1, customChar1);lcd.setCursor(x, 3);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 2), 3);lcd.write(3);
  }
void x3() {
  lcd.createChar(2, customChar2);lcd.setCursor(x, 2);lcd.write(2);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor(x, 3);lcd.write(3);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x4() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 2);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(0, customChar0);lcd.setCursor(x, 3);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 1), 3);lcd.write(0);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x5() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(2, customChar2);lcd.setCursor((x + 2), 2);lcd.write(2);
  lcd.createChar(3, customChar3);lcd.setCursor(x, 3);lcd.write(3);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x6() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(2, customChar2);lcd.setCursor((x + 2), 2);lcd.write(2);
  lcd.createChar(1, customChar1);lcd.setCursor(x, 3);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x7() {
  lcd.createChar(2, customChar2);lcd.setCursor(x, 2);lcd.write(2);
  lcd.createChar(2, customChar2);lcd.setCursor((x + 1), 2);lcd.write(2);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(0, customChar0);lcd.setCursor(x, 3);lcd.write(0);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 1), 3);lcd.write(1);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 2), 3);lcd.write(0);
  }
void x8() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(1, customChar1);lcd.setCursor(x, 3);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x9() {
  lcd.createChar(1, customChar1);lcd.setCursor(x, 2);lcd.write(1);
  lcd.createChar(4, customChar4);lcd.setCursor((x + 1), 2);lcd.write(4);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 2);lcd.write(1);
  lcd.createChar(3, customChar3);lcd.setCursor(x, 3);lcd.write(3);
  lcd.createChar(3, customChar3);lcd.setCursor((x + 1), 3);lcd.write(3);
  lcd.createChar(1, customChar1);lcd.setCursor((x + 2), 3);lcd.write(1);
  }
void x10() {
  lcd.createChar(0, customChar0);lcd.setCursor(x, 2);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 1), 2);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 2), 2);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor(x, 3);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 1), 3);lcd.write(0);
  lcd.createChar(0, customChar0);lcd.setCursor((x + 2), 3);lcd.write(0);
  }

void NB1() {
  if (n2 >= 10 & n2 < 100) {x = -4; r3 = n2 / 10; y = r3; n3(); x = 0; r4 = n2 - r3 * 10; y = r4; n3();}
  if (n2 >= 0 & n2 < 10) {x = -4; y = 10; n3(); x = 0; r4 = n2; y = r4; n3();}
  }
void NB2() {
  if (m2 >= 10 & m2 < 100) {x = 5; r3 = m2 / 10; y = r3; n3(); x = 9; r4 = m2 - r3 * 10; y = r4; n3();}
  if (m2 >= 0 & m2 < 10) {x = 5; y = 0; n3(); x = 9; r4 = m2; y = r4; n3();}
  }
void NB3() {
  if (n2 >= 10 & n2 < 100) {x = -4; r3 = n2 / 10; y = r3; n3(); x = 0; r4 = n2 - r3 * 10; y = r4; n3();}
  if (n2 >= 0 & n2 < 10) {x = -4; y = 10; n3(); x = 0; r4 = n2; y = r4; n3();}
  }
void NB4() {
  if (m2 >= 10 & m2 < 100) {x = 5; r3 = m2 / 10; y = r3; n3(); x = 9; r4 = m2 - r3 * 10; y = r4; n3();}
  if (m2 >= 0 & m2 < 10) {x = 5; y = 0; n3(); x = 9; r4 = m2; y = r4; n3();}
  }


void setup() {
//Serial.begin(9600);
lcd.init();            // инициализация lcd
lcd.backlight();
   
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)

  analogWrite(10, 250); //управление яркостью подсветки LCD, 10-пин на который подключена подсветка LCD, 250-подаваемое напряжение (мах - 255-5В)
  clock.begin();
  bme.begin(0x76);

  pinMode(A2,INPUT);           // вход фоторезистора
  pinMode(12,INPUT);           // сенсорная кнопка будильника (в режиме тактовой кнопки)
  pinMode(11,INPUT);           // сенсорная кнопка LED LCD (в режиме переключателя)
  pinMode(SET,INPUT_PULLUP);   // SET (сброс) - кнопка
  pinMode(UP,INPUT_PULLUP);    // UP (час+) - кнопка
  pinMode(DW,INPUT_PULLUP);    // DW (мин-) - кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) - тумблер
  pinMode(BB,INPUT_PULLUP);    // ВКЛ/ОТК больших цифр часов - тумблер

  //clock.setDateTime(__DATE__, __TIME__); //установка времени с ПК (во время прошивки)

  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

void loop() {
    if(digitalRead(11)==HIGH){
    if(millis()-times0>1000){ //время реакции фоторезистора на свет
    svet = map(analogRead(A2), 0,250,10,250);if(svet>250){svet=250;}
    analogWrite(10, svet);
    times0=millis();
    }}else{analogWrite(10, 0);}
   
    DateTime = clock.getDateTime();
    hour = DateTime.hour;
    minut = DateTime.minute;
    secon = DateTime.second;
    year=DateTime.year;
    month=DateTime.month;
    day=DateTime.day;
    den=DateTime.dayOfWeek;
   
    hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
   
    temp = bme.readTemperature();
    p = bme.readPressure() / 133.3224;
    h = bme.readHumidity();
    // этот блок выводит в монитор порта данные
    /*Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
    Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
    Serial.print(secon/10);Serial.println(secon%10);
    Serial.println(temp,1);
    Serial.println(p,1);
    Serial.println(h,1);
    Serial.println(svet);
    Serial.print("D5 = ");Serial.println(digitalRead(5));
    Serial.print("D6 = ");Serial.println(digitalRead(6));
    Serial.print("D7 = ");Serial.println(digitalRead(7));
    Serial.print("D11 = ");Serial.println(digitalRead(11));
    Serial.print("D12 = ");Serial.println(digitalRead(12));*/

    if(digitalRead(BB)==LOW && reg==0){reg=8;delay(200);lcd.clear();}
    if(digitalRead(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
   
    if(reg==1){
    lcd.setCursor(2, 0);
    lcd.print("Настроика");
    lcd.setCursor(0, 1);
    lcd.print("> будильника");
    if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
    if(digitalRead(DW)==LOW){reg = 2;delay(200);lcd.clear();}
    if(digitalRead(SET)==LOW){reg = 3;delay(200);lcd.clear();}
    }

    if(reg==2){
    lcd.setCursor(2, 0);
    lcd.print("Настроика");
    lcd.setCursor(0, 1);
    lcd.print("> часов и даты");
    if(digitalRead(UP)==LOW){reg = 1;delay(200);lcd.clear();}
    if(digitalRead(DW)==LOW){reg = 1;delay(200);lcd.clear();}
    if(digitalRead(SET)==LOW){reg = 4;delay(200);lcd.clear();} //D4
    }

    if(reg==3){ // подменю - настройки времени будильника
    if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);}
    if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
    if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
    if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
    if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
    lcd.setCursor(0, 0);lcd.print("Будильник");
    lcd.setCursor(0, 1);
    if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
    if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

    if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);}
    }

    if(reg==4){ // подменю - руч.настройки времени и даты
    if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);}
   
    if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
    if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2025){gg=2025;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
   
    lcd.setCursor(0, 0);lcd.print("Время и дата");
    lcd.setCursor(0, 1);
    if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
    if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}lcd.print(" ");
    if(set==3&&millis()-times<200){lcd.print("  ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
    if(set==4&&millis()-times<200){lcd.print("  ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
    if(set==5&&millis()-times<200){lcd.print("    ");}else{lcd.print(year);}
   
    if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);}
    }

    // блок главного экрана
    if(reg==0){
    if(millis()-times1<500){tic=1;}else{tic=0;}if(millis()-times1>1000){times1=millis();}

    lcd.setCursor(0, 0);// расположение строки со значениями BME280
    lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
    lcd.print(h,0);lcd.print("% ");
    lcd.print(p,0);lcd.print("mH");   

    lcd.setCursor(3, 1);// расположение даты
    if(set==3&&millis()-times<200){lcd.print("  ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
    if(set==4&&millis()-times<200){lcd.print("  ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
    if(set==5&&millis()-times<200){lcd.print("    ");}else{lcd.print(year);}

    // расположение значка будильник
    if(digitalRead(ALARM)==LOW){lcd.createChar(5, customChar5);lcd.setCursor(14, 1);lcd.write(5);}else{lcd.createChar(0, customChar0);lcd.setCursor(14, 1);lcd.write(0);}

    lcd.setCursor(3, 2); // расположение дня недели
    switch(den){
    case 1: lcd.print("Mo");break;
    case 2: lcd.print("Tu");break;
    case 3: lcd.print("We");break;
    case 4: lcd.print("Th");break;
    case 5: lcd.print("Fr");break;
    case 6: lcd.print("Sa");break;
    case 7: lcd.print("Su");break;
    /*case 1: lcd.print("ПН");break; // с большими цифрами русские буквы не отображаются :-(( !!!
    case 2: lcd.print("BT");break;
    case 3: lcd.print("CP");break;
    case 4: lcd.print("ЧТ");break;
    case 5: lcd.print("ПТ");break;
    case 6: lcd.print("CБ");break;
    case 7: lcd.print("BC");break;*/
    }

    T1(); //большие цифры часов
   
    lcd.setCursor(3, 3); // расположение часов
    //if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}if(tic==1){lcd.print(":");}else{lcd.print(" ");}
    //if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
    if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(secon/10%10);lcd.print(secon%10);}
    }

    if(millis()-times>400){times=millis();}
    if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);alarm = 1;}else{digitalWrite(8,LOW);alarm = 0;}
   
    if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
    if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
   
    if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();/*Serial.println("ZZZZzzzz");*/}
   
    if(digitalRead(12)==LOW && alarm_on==1){alarm_on=2;delay(200);}
   
    delay(100);
}

void pic(){tone(9,2780,100);}// 9 - пин к которому подключен пьезодинамик, 2780 - частота, 100 - период