БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

Π’ сСгодняшнСй ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ…ΠΎΡ‡Ρƒ подСлится с Π²Π°ΠΌΠΈ Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. На этот Ρ€Π°Π· это сСнсорный Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ с стСклянной панСлью. Устройство ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 42Ρ…42ΠΌΠΌ(стандартныС стСклянныС панСль ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ 80Ρ…80ΠΌΠΌ). Π˜ΡΡ‚ΠΎΡ€ΠΈΡ этого устройства Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π΄Π°Π²Π½ΠΎ, ΠΎΠΊΠΎΠ»ΠΎ Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄.

БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

ΠŸΡ€Π΅Π²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π΅ atmega328, Π½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ всС Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΎΠΌ nRF52832.

БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

БСнсорная Ρ‡Π°ΡΡ‚ΡŒ устройства Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° микросхСмах TTP223. Оба сСнсора обслуТиваСт ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅. ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΎΡ‚ Π±Π°Ρ‚Π°Ρ€Π΅ΠΉΠΊΠΈ CR2477, Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π° микросхСмС TPS610981 | Π”Π°Ρ‚Π°ΡˆΠΈΡ‚.

БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832
БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

Π’ устройствС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° схСма ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания Π½Π° ΠΏΠΎΠ»Π΅Π²Ρ‹Ρ… транзисторах. ПослС наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ сам ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡΡ для сСрвисных Ρ€Π΅ΠΆΠΈΠΌΠΎΠ²(Π² ΠΌΠΎΠ΅ΠΌ случаСт это сопряТСниС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ устройствами, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ питания ΠΈ сброс ΠΊ заводским установкам(factory reset)).

ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ 2 rgb свСтодиода для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΉ состояний ΠΈ сСрвисных Ρ€Π΅ΠΆΠΈΠΌΠΎΠ². Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡŒΠ΅Π·ΠΎΠΈΠ·Π»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠΊΠ° ΠΏΡ€ΠΈ прикосновСнии ΠΊ сСнсорным ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ ΠΈ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвичных Ρ€Π΅ΠΆΠΈΠΌΠΎΠ². Π‘Π²Π΅Ρ‚ΠΎΠ΄ΠΈΠΎΠ΄Ρ‹ ΠΈ ΠΏΡŒΠ΅Π·ΠΎΠΈΠ·Π»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΠΎ ТСланию ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ДСлаСтся это Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΡƒΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ°, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° тСхничСскиС сСнсоры, Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ измСнСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ заряда Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ ΠΈ уровня сигнала Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΡƒΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ°. Π’ ΠΌΠΎΠ΅ΠΌ случаС это ΠœΠΠ–ΠžΠ Π”ΠžΠœΠž.

ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ 7мА(250ΠΊΠ±ΠΈΡ‚, 10мс), ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ снС 40мкА, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ состоянии ΠΌΠ΅Π½Π΅Π΅ 1мкА(=ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ прСобразоватСля Π² «холостом» Ρ€Π΅ΠΆΠΈΠΌΠ΅). Π’Ρ‹Π²Π΅Π΄Π΅Π½ rx, tx, swd Ρ€Π°Π·ΡŒΠ΅ΠΌ для програмирования. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½Ρ‹ΠΉ Ρ€Π°Π·ΡŒΠ΅ΠΌ 2Ρ…3p с шагом 1.27. Для програмирования ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊ.

БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

Как ΠΈ всСгда Π² основС Ρ€Π°Π±ΠΎΡ‚Ρ‹ устройства Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» MySensors. Π”Π°Π½Π½Ρ‹ΠΉ сСнсорный Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ планируСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² систСмС управлСния Ρ€ΡƒΠ»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΡˆΡ‚ΠΎΡ€Π°ΠΌΠΈ. Но Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вашСй Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠ΅ΠΉ. НапримСр ΡƒΠΆΠ΅ сСйчас сын(7 Π»Π΅Ρ‚) сдСлал 3 Π·Π°ΠΊΠ°Π·Π° Π½Π° вСрсии Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ: для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСта Π² Ρ‚ΡƒΠ°Π»Π΅Ρ‚Π΅ с Π²Π°Π½Π½ΠΎΠΉ(крСпится Π±ΡƒΠ΄Π΅Ρ‚ нСвысоко ΠΎΡ‚ ΠΏΠΎΠ»Π°), для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСта Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΌ ΠΈ Ρ‚Π΅ΠΌΠ½ΠΎΠΌ ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π΅ ΠΏΡ€ΠΈ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π² Ρ‚ΡƒΠ°Π»Π΅Ρ‚ с Π²Π°Π½Π½ΠΎΠΉ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΊΡ€ΠΎΠ²Π°Ρ‚Π½Ρ‹ΠΉ, для быстрого Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСта Π² своСй ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ монстры Ρ€Π°Π·Π±Π΅ΠΆΠ°Π»ΠΈΡΡŒ.

БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832
БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832
БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

ΠšΠΎΡ€ΠΏΡƒΡ ΠΏΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ пСчатался Π½Π° SLA ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅, устройство ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΠ΅, корпус получился нСбольшой, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π½ΡƒΡŽ ΠΌΠΎΠ΄Π΅Π»ΡŒΠ‘Π΅Π½ΡΠΎΡ€Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832
БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832
БСнсорный ΠΌΠΈΠ½ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ c стСклянной панСлью Π½Π° nRF52832

Π’ корпус ΠΈ ΠΊΡ€Ρ‹ΡˆΠΊΡƒ Π±Π°Ρ‚Π°Ρ€Π΅ΠΉΠ½ΠΎΠ³ΠΎ отсСка Π²ΠΊΠ»Π΅Π΅Π½Ρ‹ ΠΌΠ°Π³Π½ΠΈΡ‚ΠΈΠΊΠΈ.

Видосики с тСстами Π΄Π°Π½Π½ΠΎΠ³ΠΎ устрройства:

Play video

Play video

Play video

Для ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ:

Код тСстовой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ Π² систСмС управлСния Ρ€ΡƒΠ»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΡˆΡ‚ΠΎΡ€Π°ΠΌΠΈ для Arduino IDE

Ардуино Π’ΠΈΡ€ΠΈΠ½Π³

int8_t timer_status = 0;
boolean sens_flag1 = 0;
boolean sens_flag2 = 0;
boolean switch_a = 0;
boolean switch_b = 0;
uint16_t temp;
float vcc;
int battery;
int old_battery;
uint32_t oldmillis;
uint32_t newmillis;
uint32_t interrupt_time;
uint32_t SLEEP_TIME = 7000;
uint32_t SLEEP_TIME_W;
uint32_t SLEEP_TIME_W2;
int NrfRSSI;
uint16_t NrfRSSI2;
boolean wait_off;

//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define MY_RADIO_NRF5_ESB
#define MY_PASSIVE_NODE
#define MY_NODE_ID 120
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define POWER_CHILD_ID 110
#define UP_POWER_SWITCH_ID 1
#define DOWN_POWER_SWITCH_ID 2
#define CHILD_ID_nRF52_RSSI_RX 3

#define BAT_COOF 0.0092957746478873
#define BAT_MIN 200
#define BAT_MAX 290

#include <MySensors.h>
MyMessage upMsg(UP_POWER_SWITCH_ID, V_STATUS);
MyMessage downMsg(DOWN_POWER_SWITCH_ID, V_STATUS);
MyMessage powerMsg(POWER_CHILD_ID, V_VAR1);
MyMessage msgRF52RssiReceiv(CHILD_ID_nRF52_RSSI_RX, V_VAR1);

void preHwInit() {
  pinMode(31, OUTPUT); //power management pin
  digitalWrite(31, HIGH);
  delay(3000);
  pinMode(3, INPUT); // on off mode button
  pinMode(25, OUTPUT); // sens1 led
  pinMode(26, OUTPUT); // sens1 led
  pinMode(27, OUTPUT); // sens1 led
  pinMode(6, OUTPUT); // sens21 led
  pinMode(7, OUTPUT); // sens2 led
  pinMode(8, OUTPUT); // sens2 led

  pinMode(28, OUTPUT); // bizzer

  pinMode(2, INPUT); // common interrupt for touch sensors
  pinMode(9, INPUT); // touch sensors1
  pinMode(10, INPUT); //touch sensors2

  pinMode(29, INPUT); // battery

  digitalWrite(28, LOW);
  digitalWrite(27, HIGH);
  digitalWrite(26, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
}

void before()
{
  NRF_POWER->DCDCEN = 1;
  analogReadResolution(12);
  disableNfc();
  turnOffAdc();
  digitalWrite(25, LOW);
  digitalWrite(6, LOW);
  wait(200);
  digitalWrite(25, HIGH);
  digitalWrite(6, HIGH);
  wait(100);
  playSound0();
  wait(100);
  digitalWrite(25, LOW);
  digitalWrite(6, LOW);
  wait(200);
  digitalWrite(25, HIGH);
  digitalWrite(6, HIGH);
  wait(3000);

  digitalWrite(27, LOW);
  digitalWrite(8, LOW);
  wait(200);
  digitalWrite(27, HIGH);
  digitalWrite(8, HIGH);
  wait(400);
  digitalWrite(6, LOW);
  digitalWrite(25, LOW);
  wait(200);
  digitalWrite(6, HIGH);
  digitalWrite(25, HIGH);
  wait(400);
  digitalWrite(26, LOW);
  digitalWrite(7, LOW);
  wait(200);
  digitalWrite(26, HIGH);
  digitalWrite(7, HIGH);
  wait(1000);
  digitalWrite(26, LOW);
  digitalWrite(7, LOW);
}

void setup()
{
  digitalWrite(26, HIGH);
  digitalWrite(7, HIGH);
  wait(50);
  playSound();
  wait(2000);
  readBatLev();
  wait(200);
  SLEEP_TIME_W = SLEEP_TIME;
}

void presentation()
{
  sendSketchInfo("EFEKTA ON|OFF NODE 2CH", "1.0");
  wait(100);
  present(POWER_CHILD_ID, S_CUSTOM, "BATTERY DATA");
  wait(100);
  present(UP_POWER_SWITCH_ID, S_BINARY, "UP SWITCH");
  wait(100);
  present(DOWN_POWER_SWITCH_ID, S_BINARY, "DOWN SWITCH");
}

void loop()
{
  if (sens_flag1 == 0 && sens_flag2 == 0) {
    if (switch_a == 0 && switch_b == 0) {
      timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, 3600000, false);
      wait_off = 1;
    } else {
      //oldmillis = millis();
      timer_status = sleep(digitalPinToInterrupt(2), RISING, digitalPinToInterrupt(3), RISING, SLEEP_TIME_W, false);
      wait_off = 0;
    }
  }
  if (timer_status == 3) {
    wait(100);
    digitalWrite(27, LOW);
    digitalWrite(8, LOW);
    wait(2000);
    digitalWrite(27, HIGH);
    digitalWrite(8, HIGH);
    wait(100);
    digitalWrite(31, LOW);
  }

  if (timer_status == 2) {

    if (digitalRead(9) == HIGH && sens_flag1 == 0 && switch_b == 0) {
      sens_flag1 = 1;
      if (switch_a == 0) {
        oldmillis = millis();
        SLEEP_TIME_W = SLEEP_TIME;
        switch_a = 1;
        digitalWrite(6, LOW);
        wait(10);
        playSound1();
        wait(20);
        playSound2();
        wait(50);
        send(upMsg.set(switch_a));
        wait(200);
      } else {
        switch_a = 0;
        digitalWrite(6, HIGH);
        wait(10);
        playSound2();
        wait(20);
        playSound1();
        wait(50);
        send(upMsg.set(switch_a));
        wait(200);
      }
    }
    if (digitalRead(10) == HIGH && sens_flag2 == 0 && switch_a == 0) {
      sens_flag2 = 1;
      if (switch_b == 0) {
        oldmillis = millis();
        SLEEP_TIME_W = SLEEP_TIME;
        switch_b = 1;
        digitalWrite(25, LOW);
        wait(10);
        playSound1();
        wait(20);
        playSound2();
        wait(50);
        send(downMsg.set(switch_b));
        wait(200);
      } else {
        switch_b = 0;
        digitalWrite(25, HIGH);
        wait(10);
        playSound2();
        wait(20);
        playSound1();
        wait(50);
        send(downMsg.set(switch_b));
        wait(200);
      }
    }

    if (digitalRead(9) == LOW && sens_flag1 == 1) {
      sens_flag1 = 0;
    }

    if (digitalRead(10) == LOW && sens_flag2 == 1) {
      sens_flag2 = 0;
    }
    if (switch_a == 1 || switch_b == 1) {
      if (wait_off == 0) {
        newmillis = millis();
        wait(10);
        SLEEP_TIME_W2 = SLEEP_TIME_W;
        wait(10);
        interrupt_time = newmillis - oldmillis;
        wait(10);
        SLEEP_TIME_W = SLEEP_TIME_W2 - interrupt_time;
        wait(10);
        Serial.print("WAS IN A SLEEP: ");
        Serial.print(newmillis - oldmillis);
        Serial.println(" MILLISECONDS");

        if (SLEEP_TIME_W < 1000) {
          if (switch_a == 1) {
            switch_a = 0;
            digitalWrite(6, HIGH);
            wait(10);
            playSound2();
            wait(20);
            playSound1();
            wait(50);
            send(upMsg.set(switch_a));
            wait(200);
          }
          if (switch_b == 1) {
            switch_b = 0;
            digitalWrite(25, HIGH);
            wait(10);
            playSound2();
            wait(20);
            playSound1();
            wait(50);
            send(downMsg.set(switch_b));
            wait(200);
          }
          SLEEP_TIME_W = SLEEP_TIME;
          wait(50);
        }
        Serial.println(SLEEP_TIME);
        Serial.println(SLEEP_TIME_W);
        Serial.println(SLEEP_TIME_W2);
        Serial.print("GO TO SLEEP FOR: ");
        Serial.print(SLEEP_TIME_W);
        Serial.println(" MILLISECONDS");
      }
      oldmillis = millis();
    }
  }

  if (timer_status == -1) {
    if (switch_a == 1 || switch_b == 1) {
      if (switch_a == 1) {
        switch_a = 0;
        digitalWrite(6, HIGH);
        wait(10);
        playSound2();
        wait(20);
        playSound1();
        wait(50);
        send(upMsg.set(switch_a));
        wait(200);
      }
      if (switch_b == 1) {
        switch_b = 0;
        digitalWrite(25, HIGH);
        wait(10);
        playSound2();
        wait(20);
        playSound1();
        wait(50);
        send(downMsg.set(switch_b));
        wait(200);
      }
    } else {
      readBatLev();
    }
  }
}

void disableNfc() {
  NRF_NFCT->TASKS_DISABLE = 1;
  NRF_NVMC->CONFIG = 1;
  NRF_UICR->NFCPINS = 0;
  NRF_NVMC->CONFIG = 0;
}

void turnOffAdc() {
  if (NRF_SAADC->ENABLE) {
    NRF_SAADC->TASKS_STOP = 1;
    while (NRF_SAADC->EVENTS_STOPPED) {}
    NRF_SAADC->ENABLE = 0;
    while (NRF_SAADC->ENABLE) {}
  }
}

void myTone(uint32_t j, uint32_t k) {
  j = 500000 / j;
  k += millis();
  while (k > millis()) {
    digitalWrite(28, HIGH); delayMicroseconds(j);
    digitalWrite(28, LOW ); delayMicroseconds(j);
  }
}

void playSound0() {
  myTone(1300, 50);
  wait(20);
  myTone(1300, 50);
  wait(50);
}

void playSound() {
  myTone(700, 30); 
  wait(10);
  myTone(700, 30);
  wait(10);
  myTone(700, 30);
  wait(50);
}

void playSound1() {
  myTone(200, 10);
  wait(10);
  myTone(400, 5);
  wait(30);
}

void playSound2() {
  myTone(400, 10);
  wait(10);
  myTone(200, 5);
  wait(30);
}

void readBatLev() {
  temp = analogRead(29);
  vcc = temp * 0.0033 * 100;
  battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
  if (battery < 0) {
    battery = 0;
  }
  if (battery > 100) {
    battery = 100;
  }
  sendBatteryLevel(battery, 1);
  wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
  send(powerMsg.set(temp));
  wait(200);
  NrfRSSI = transportGetReceivingRSSI();
  NrfRSSI2 = map(NrfRSSI, -85, -40, 0, 100);
  if (NrfRSSI2 < 0) {
    NrfRSSI2 = 0;
  }
  if (NrfRSSI2 > 100) {
    NrfRSSI2 = 100;
  }
  send(msgRF52RssiReceiv.set(NrfRSSI2));
  wait(200);
}

Π€Π°ΠΉΠ»Ρ‹ корпуса Π² stl β€” Π³ΡƒΠ³Π» Π΄Ρ€Π°ΠΉΠ²

Gerber Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ‹ β€” Π³ΡƒΠ³Π» Π΄Ρ€Π°ΠΉΠ²

На вопросы ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΏΠΎ трудностям Π² Π²Π°ΡˆΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… Π½Π° Π°Ρ€Π΄ΡƒΠΈΠ½ΠΊΠ°Ρ… ΠΈ Mysensors всСгда ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌΠΌ Ρ‡Π°Ρ‚Π΅ β€” https://t.me/mysensors_rus.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ