Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Cyfarchion i holl ddarllenwyr yr adran “DIY neu Do It Yourself” ar Habr! Bydd erthygl heddiw yn ymwneud â'r switsh cyffwrdd ar y sglodyn TTP223 | Taflen data. Mae'r switsh yn gweithredu ar y microreolydd nRF52832 | Taflen data, defnyddiwyd modiwl YJ-17103 gydag antena printiedig a chysylltydd ar gyfer antena MHF4 allanol. Mae'r switsh cyffwrdd yn gweithredu ar fatris CR2430 neu CR2450. Nid yw'r defnydd yn y modd trawsyrru yn fwy nag 8 mA, yn y modd cysgu dim mwy na 6 µA.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Fel pob prosiect blaenorol, mae'r un hwn hefyd yn brosiect Arduino, mae'r rhaglen wedi'i hysgrifennu yn yr Arduino IDE. Mae gweithrediad meddalwedd y ddyfais yn seiliedig ar brotocol Mysensors | Llyfrgelloedd GitHub, Mae bwrdd nRF5 yn cefnogi GitHub yn Mysynwyr. Fforwm cymunedol Saesneg - http://forum.mysensors.org, fforwm cymunedol iaith Rwsieg - http://mysensors.ru/forum/
(I'r rhai sydd eisiau astudio - Cofnodion, Protocol Cyfresol, API, Protocol, parser | ar gyfer y rhai sy'n dymuno cynorthwyo (cyfraniadau) wrth ddatblygu'r prosiect - Cofnodion)

Datblygwyd y bwrdd switsh cyffwrdd yn y rhaglen Deeptrace, gan ystyried gweithgynhyrchu dilynol gan ddefnyddio'r dull Technoleg Smwddio Laser (LUT). Datblygwyd y bwrdd mewn dimensiynau o 60x60mm (mae gan banel gwydr safonol ddimensiynau o 80x80mm). Argraffwyd y gylched ar dudalennau cylchgrawn Antenna a'i throsglwyddo gyda haearn Bosch gyda'r gosodiad “Len” (uchafswm pŵer) ar fwrdd gwydr ffibr ffoil dwy ochr 1.5mm, 35µm (yn absenoldeb un arall).
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Cyflawnwyd ysgythru â thoddiant o ferric clorid, a baratowyd yn flaenorol mewn cyfrannau o 1.5 llwy de fesul 250 ml o ddŵr cynnes. Cymerodd y broses 15 munud.
Perfformiwyd tyllau drilio ar gyfer vias interlayer ac ar gyfer cau deiliad y batri gyda dril mini DREMEL 3000 wedi'i osod ar stand dril DREMEL 220. Cafodd tyllau ar gyfer vias interlayer eu drilio â dril 0,4mm, tyllau ar gyfer deiliad y batri gyda dril 1,1mm . Gwnaethpwyd trimio ar hyd ffiniau'r bwrdd gyda'r un dril mini gydag atodiad DREMEL 540 (Cylch torri d = 32.0mm). Gwnaed y tocio mewn anadlydd.
Roedd tunio'r bwrdd ysgythru yn cael ei wneud gan ddefnyddio aloi Rose mewn hydoddiant dyfrllyd (1 llwy de o asid citrig wedi'i grisialu fesul 300 ml o ddŵr).

Cymerodd y broses sodro tua awr, treuliwyd y rhan fwyaf o'r amser yn sodro gwifren (tun, 0.4 mm mewn diamedr) yn y tyllau ar gyfer vias interlayer.

Golchwyd y bwrdd gyda glanhawr aerosol FLUX OFF.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Cynhaliwyd dyluniad corff y ddyfais mewn golygydd dylunio tri dimensiwn â chymorth cyfrifiadur. Dimensiynau achos 78,5mm X 78,5mm X 12mm.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Arbedwyd model gorffenedig yr achos a gorchudd adran batri ar ffurf STL, yna roedd angen paratoi'r modelau hyn i'w hargraffu ar argraffydd CLG (ychwanegu cynhalwyr, cyfeiriadedd). Ar y cam hwn, cododd problem fach, gan fod ardal argraffu argraffwyr CLG cartref yn fach. Nid oedd model yr achos dyfais yn y sefyllfa fwyaf optimaidd o'i gymharu â'r amser argraffu yn ffitio i ddimensiynau'r ardal argraffu. Wrth osod y model ar 45 gradd, roedd hefyd yn rhoi canlyniad siomedig; roedd pwysau'r gefnogaeth yn hafal i bwysau'r model corff. Penderfynwyd argraffu'r model yn fertigol, gan wneud cefnogaeth ar un o'r ochrau blaen, ar ôl cytuno ymlaen llaw â'r ffaith ôl-brosesu. Cymerodd argraffu'r corff 5 awr gyda gosodiad haen o 50 micron. Nesaf, cynhaliwyd y prosesu gan ddefnyddio papur tywod mân iawn (ni fyddaf yn ysgrifennu'r rhif oherwydd nid wyf yn gwybod :)). Cymerodd y clawr batri 40 munud i'w argraffu.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Mae paneli gwydr o Aliexpress yn cael eu gwerthu gyda ffrâm blastig eisoes wedi'i gludo; nid oedd unrhyw broblemau gyda thynnu'r ffrâm. Tynnais y panel gwydr ar ôl ei gynhesu â sychwr gwallt arferol.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Roedd y tryledwr ar gyfer y backlight LED wedi'i wneud o dâp dwy ochr gyda gludiog acrylig 3M 9088-200. Ar gyfer goleuadau fflwroleuol roedd nifer o ddeunyddiau i ddewis ohonynt, tâp gludiog Tsieineaidd a phapur gludiog wedi'i dorri'n dapiau gan y cwmni domestig Luminofor. Gwnaethpwyd y dewis o blaid gwneuthurwr domestig; yn ôl fy nheimladau, roedd yn disgleirio'n fwy disglair ac yn hirach. Gludwyd sgwâr o bapur gyda pigment fflwroleuol ar ei ben gyda thâp dwyochrog 3M 9088-200.

Cafodd y gwydr ei gludo i'r corff switsh gan ddefnyddio tâp dwy ochr gyda gludiog acrylig 3M VHB 4910.
Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Gosodwyd y clawr gyda sgriw M 1,4 X 5 mm.

Cost y ddyfais oedd 890 rubles.

Nesaf daeth rhan y rhaglen. Roedd rhai problemau. Mae'n ymddangos bod sglodion synhwyrydd TTP223 yn gweithio'n wych gyda chyflenwad pŵer 3.3V sefydlog ac nid yn dda iawn pan gaiff ei bweru'n uniongyrchol o fatri sydd wedi'i ryddhau'n dda. Wrth gychwyn y ddyfais gyda chyflenwad pŵer o gwmpas 2.5v, ac ar ôl “tynnu i lawr” ychwanegol wrth weithio allan y cyflwyniad Mysensors, achosodd y microcircuit TTP223 (yn syth ar ôl graddnodi) ymyrraeth i'r MK ers iddo fod â sbardun gweithredol.

Newidiwyd y cylched cyflenwad pŵer i'r microcircuit (rheoli pŵer TTP223 gyda gpio MK), darparwyd tir ychwanegol, a disodlwyd gwrthyddion â gwrthiant uwch ar y llinellau dan arweiniad rgb (sy'n rhedeg ar ochr arall y bwrdd synhwyrydd capacitive). Fe'i ychwanegwyd hefyd at y feddalwedd: actifadu pŵer ar gyfer y microcircuit capacitive ar ôl dechrau'r fframwaith Mysensors a gweithio allan y cyflwyniad. Mae'r oedi ar gyfer graddnodi'r sglodyn TTP223 yn awtomatig pan fydd pŵer yn cael ei gymhwyso wedi'i ddyblu. Roedd yr holl newidiadau hyn wedi dileu'r broblem hon yn llwyr.

Cyn edrych ar god y rhaglen, rwy'n argymell eich bod yn ymgyfarwyddo â strwythur sylfaenol brasluniau yn Mysensors.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}

void setup()
{

}

void presentation()
{
//Тут происходит презентация ноды и ее сенсоров на контролере через маршрутизатор
sendSketchInfo("Name of my sensor node", "1.0"); // презентация названия ноды, версии ПО
present(CHILD_ID, S_WHATEVER, "Description"); // презентация сенсоров ноды, описания сенсоров
}

void loop()
{

}

Cod prawf rhaglen switsh cyffwrdd:prawf_sens.ino
/**
ТЕСТОВЫЙ СКЕТЧ СЕНСОРНОГО ВЫКЛЮЧАТЕЛЯ С ПРЕРЫВАНИЯМИ НА NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

Mae gan y switsh fotwm cyffwrdd a botwm tact ar gefn y ddyfais. Bydd y botwm tact hwn yn cael ei ddefnyddio ar gyfer dulliau gwasanaeth, modd rhwymo dros yr awyr, ac ailosod dyfais. Mae gan y botwm nodwedd gwrth-bownsio haearn. Mae llinell y synhwyrydd capacitive a llinell y botwm tact wedi'u cysylltu trwy deuodau Schottky ac wedi'u cysylltu â'r pin analog p0.05, a hefyd o'r synhwyrydd capacitive a'r botwm tact mae llinellau i'r pinnau MK p0.25 a p0.27 .0.05 ar gyfer cyflyrau darllen ar ôl actifadu'r ymyriad ar pin t0.05. XNUMX. Ar pin pXNUMX, mae ymyriad trwy'r cymharydd (NRF_LPCOMP) trwy EVENTS_UP yn cael ei weithredu. Cefais ysbrydoliaeth i ddatrys y broblem yma и yma.

Ychwanegwyd y switsh at y rhwydwaith Mysensors, a reolir gan y rheolwr cartref craff Majordomo (gwefan y prosiect)

Cod PHP ar gyfer ychwanegu switsh at y dull statusUpdate

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

Gweler y canlyniad yn y fideo

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Yn ddiweddarach, gwnaed opsiwn gyda thrawsnewidydd hwb, ond nid yw hyn yn gysylltiedig â gweithrediad microcircuit capacitive TTP223; mae mwy o awydd am olau da ac unffurf wrth wasgu'r allweddi trwy gydol oes y batri.

GweldSwitsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Prosiect Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Siarad Rwsiaidd safle cymunedol Mysynwyr

Telegram sgwrs Mysensors — ateb cyflym i broblemau gyda Mysensors, awgrymiadau, triciau, gosod byrddau, gweithio gyda microreolwyr atmega 328, stm32, nRF5 yn yr Arduino IDE - @mysensors_rus

Rhai lluniauSwitsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Switsh cyffwrdd di-wifr gyda backlight fflwroleuol ychwanegol

Ffynhonnell: hab.com

Ychwanegu sylw