Aloha mai e ka poʻe heluhelu a pau o ka ʻāpana "DIY or Do It Yourself" ma Habr! ʻO ka ʻatikala o kēia lā e pili ana i ka hoʻololi paʻi ma ka chip TTP223 |
E like me nā papahana mua, he papahana Arduino kēia, ua kākau ʻia ka papahana ma ka Arduino IDE. Hoʻokumu ʻia ka hoʻokō polokalamu o ka hāmeʻa ma ka protocol Mysensors |
(No ka poʻe makemake e aʻo -
Hoʻokumu ʻia ka papa hoʻololi paʻi ma ka papahana Deeptrace, me ka noʻonoʻo ʻana i ka hana ʻana ma hope o ka hoʻohana ʻana i ke ʻano Laser Ironing Technology (LUT). Ua hoʻomohala ʻia ka papa ma nā ana o 60x60mm (he 80x80mm ka nui o ka panel aniani maʻamau). Ua paʻi ʻia ke kaapuni ma nā ʻaoʻao o ka makasina Antenna a ua hoʻoili ʻia me kahi hao Bosch me ka hoʻonohonoho "Len" (ka mana kiʻekiʻe) ma luna o kahi papa fiberglass foil ʻelua ʻaoʻao 1.5mm, 35µm (i ka nele o kekahi).
Ua hana ʻia ka etching me kahi hopena o ka ferric chloride, i hoʻomākaukau mua ʻia ma nā ʻāpana o 1.5 teaspoons no 250 ml o ka wai mahana. He 15 mau minuke ke kaʻina hana.
ʻO ka wili ʻana i nā lua no ka interlayer vias a no ka hoʻopaʻa ʻana i ka mea paʻa pākaukau i hana ʻia me kahi DREMEL 3000 mini-drill i kau ʻia ma kahi DREMEL 220 drill stand. . ʻO ka ʻoki ʻana ma nā palena o ka papa i hana ʻia me ka mini-drill like me kahi mea hoʻopili DREMEL 0,4 (Cutting circle d=1,1mm). Ua hana ʻia ka ʻoki ʻana i loko o kahi respirator.
Hoʻohana ʻia ka hana ʻana o ka papa i kālai ʻia me ka hoʻohana ʻana i ka hui Rose i loko o kahi wai wai (1 teaspoon o ka waikawa citric crystallized no 300 ml o ka wai).
ʻO ke kaʻina hana kūʻai i lawe ʻia ma kahi o hoʻokahi hola, ʻo ka hapa nui o ka manawa i hoʻopau ʻia i ka uea kūʻai (tinned, 0.4 mm ke anawaena) i loko o nā lua no ka interlayer vias.
Ua holoi ʻia ka papa me FLUX OFF aerosol cleaner.
Ua hoʻokō ʻia ka hoʻolālā ʻana o ke kino o ka mīkini i loko o kahi hoʻoponopono hoʻolālā kōkua kamepiula ʻekolu. Ka nui o ka pahu 78,5mm X 78,5mm X 12mm.
Ua mālama ʻia ke kumu hoʻohālike i hoʻopau ʻia o ka pahu pahu a me ka uhi o ka puʻupuʻu pākaukau ma ke ʻano STL, a laila pono e hoʻomākaukau i kēia mau hiʻohiʻona no ka paʻi ʻana ma kahi paʻi SLA (hoʻohui i nā kākoʻo, orientation). I kēia manawa, ua kū mai kahi pilikia liʻiliʻi, no ka mea liʻiliʻi ka wahi paʻi o nā mea paʻi SLA hale. ʻAʻole i kūpono ke kumu hoʻohālike o ka pahu hāmeʻa i ke kūlana maikaʻi loa e pili ana i ka manawa paʻi i nā ana o ka wahi paʻi. I ka hoʻokomo ʻana i ke kumu hoʻohālike ma 45 degere, ua hāʻawi pū ʻia i kahi hopena hoʻohaʻahaʻa; ua like ke kaumaha o ke kākoʻo me ke kaumaha o ke kumu hoʻohālike kino. Ua hoʻoholo ʻia e paʻi i ke kŘkohu me ka vertically, e hana ana i ke kākoʻo ma kekahi o nā ʻaoʻao mua, i ʻae mua ʻia me ka ʻoiaʻiʻo o ka hoʻoponopono hope. ʻO ka paʻi ʻana i ke kino he 5 mau hola me kahi hoʻonohonoho papa o 50 microns. Ma hope aʻe, ua hana ʻia ka hana ʻana me ka hoʻohana ʻana i ka pepa ʻeleʻele maikaʻi loa (ʻaʻole wau e kākau i ka helu no ka mea ʻaʻole wau ʻike :)). He 40 mau minuke ka paʻi ʻana o ka uhi pākaukau.
Ke kūʻai ʻia aku nei nā panela aniani mai Aliexpress me kahi pahu plastik i hoʻopili ʻia; ʻaʻohe pilikia me ka wehe ʻana i ke kiʻi. Wehe au i ka papa aniani ma hope o ka hoʻomaʻamaʻa ʻana me kahi hairdryer maʻamau.
ʻO ka diffuser no ke kukui LED i hana ʻia me ka lipine ʻaoʻao ʻelua me ka acrylic adhesive 3M 9088-200. No nā kukui uila he nui nā mea e koho ai, ʻo ka lipine adhesive Kina a me ka pepa adhesive i ʻoki ʻia i lipine mai ka hui kūloko ʻo Luminofor. Ua koho ʻia ke koho i kahi mea hana hale; e like me koʻu mau manaʻo, ua ʻoi aku ka mālamalama a lōʻihi. Hoʻopili ʻia kahi ʻāpana pepa me ka puaʻa fluorescent ma luna me ka lipine ʻaoʻao ʻelua 3M 9088-200.
Hoʻopili ʻia ke aniani i ke kino hoʻololi e hoʻohana ana i ka lipine ʻaoʻao ʻelua me 3M VHB 4910 acrylic adhesive.
Ua hoʻopaʻa ʻia ka uhi me kahi wili M 1,4 X 5 mm.
ʻO ke kumukūʻai o ka mea hana he 890 rubles.
A laila hele mai ka māhele papahana. Aia kekahi mau pilikia. ʻIke ʻia he hana maikaʻi nā ʻāpana sensor TTP223 me kahi lako mana 3.3V i hoʻopaʻa ʻia a ʻaʻole maikaʻi loa ke hoʻohana pololei ʻia mai kahi pākaukau i hoʻokuʻu ʻia. I ka hoʻomaka ʻana i ka hāmeʻa me kahi lako mana a puni 2.5v, a ma hope o ka "drawdown" hou i ka wā e hana ana i ka hōʻike Mysensors, ʻo ka TTP223 microcircuit (ma hope koke o ka calibration) ua hoʻopau i ka MK no ka mea me ka hoʻoikaika ikaika.
Ua hoʻololi ʻia ke kaapuni mana i ka microcircuit (mana mana TTP223 me gpio MK), ua hoʻolako ʻia kahi ʻāina hou, a ua hoʻololi ʻia nā mea pale me ke kūpaʻa kiʻekiʻe ma nā laina alakaʻi rgb (e holo ana ma kēlā ʻaoʻao o ka papa sensor capacitive). Ua hoʻohui pū ʻia i ka polokalamu: ka hoʻāla ʻana o ka mana no ka microcircuit capacitive ma hope o ka hoʻomaka ʻana i ka Mysensors framework a hana i ka hōʻike. ʻO ka lohi no ka calibration auto o ka chip TTP223 ke hoʻohana ʻia ka mana ua pālua ʻia. Ua hoopau loa keia mau hoololi a pau i keia pilikia.
Ma mua o ka nānā ʻana i ka code program, makemake wau e hoʻomaʻamaʻa ʻoe iā ʻoe iho me ke ʻano kumu o nā sketches ma 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()
{
}
Pākuʻi hoʻololi polokalamu hoʻāʻo code:test_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
MyPapaNRF5.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
Loaʻa i ka hoʻololi ke pihi hoʻopā a me ka pihi ma ke kua o ka hāmeʻa. E hoʻohana ʻia kēia pihi no nā ʻano lawelawe, ke ʻano hoʻopaʻa ʻana ma luna o ka lewa, a me ka hoʻonohonoho hou ʻana i ka hāmeʻa. Loaʻa i ke pihi kahi hiʻona anti-bounce. Hoʻopili ʻia ka laina o ka sensor capacitive a me ka laina o ka pihi tact ma o Schottky diodes a pili i ka analog pin p0.05, a mai ka capacitive sensor a me ka tact pihi aia nā laina i nā pine MK p0.25 a me p0.27. .0.05 no ka heluhelu ʻana i nā mokuʻāina ma hope o ka hoʻāla ʻana i ka hoʻopau ʻana ma ka pine p0.05. XNUMX. Ma ka pine pXNUMX, ua ho'ā 'ia kahi ho'opau ma o ka mea ho'ohālikelike (NRF_LPCOMP) ma o EVENTS_UP. Ua loaʻa iaʻu ka hoʻoikaika ʻana e hoʻoponopono i ka pilikia
Hoʻohui ʻia ka hoʻololi i ka pūnaewele Mysensors, mālama ʻia e ka mea hoʻokele home akamai ʻo Majordomo (
PHP code no ka hoʻohui ʻana i kahi hoʻololi i ke ala 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');
}
}
E ʻike i ka hopena ma ka wikiō
Ma hope mai, ua hana ʻia kahi koho me kahi mea hoʻololi hoʻoikaika, akā ʻaʻole pili kēia i ka hana o ka TTP223 capacitive microcircuit; ʻoi aku ka makemake o ka hoʻomālamalama maikaʻi a me ka hoʻomālamalama ʻana i ke kaomi ʻana i nā kī i ke ola pākaukau holoʻokoʻa.
Nānā
Papahana Github -
ʻōlelo Lūkini
ʻO kekahi mau kiʻi
Source: www.habr.com