เชเชเชจเชพ เชฒเซเชเชฎเชพเช เชนเซเช เชคเชฎเชพเชฐเซ เชธเชพเชฅเซ เชเช เชจเชตเซ เชชเซเชฐเซเชเซเชเซเช เชถเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช. เช เชตเชเชคเซ เชคเซ เชเชพเชเชจเซ เชชเซเชจเชฒ เชธเชพเชฅเซ เชเช เชธเซเชตเชฟเช เชเซ. เชเชชเชเชฐเชฃ เชเซเชฎเซเชชเซเชเซเช เชเซ, 42x42mm เชฎเชพเชชเซ เชเซ (เชธเซเชเชพเชจเซเชกเชฐเซเชก เชเซเชฒเชพเชธ เชชเซเชจเชฒเซเชธเชฎเชพเช 80x80mm เชชเชฐเชฟเชฎเชพเชฃเซ เชนเซเชฏ เชเซ). เช เชเชชเชเชฐเชฃเชจเซ เชเชคเชฟเชนเชพเชธ เชฒเชพเชเชฌเชพ เชธเชฎเชฏ เชชเชนเซเชฒเชพ, เชฒเชเชญเช เชเช เชตเชฐเซเชท เชชเชนเซเชฒเชพ เชถเชฐเซ เชฅเชฏเซ เชนเชคเซ.
เชชเซเชฐเชฅเชฎ เชตเชฟเชเชฒเซเชชเซ atmega328 เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐ เชชเชฐ เชนเชคเชพ, เชชเชฐเชเชคเซ เช เชเชคเซ เชคเซ เชฌเชงเชพ nRF52832 เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐ เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชฅเชฏเชพ.
เชเชชเชเชฐเชฃเชจเซ เชเช เชญเชพเช TTP223 เชเชฟเชชเซเชธ เชชเชฐ เชเชพเชฒเซ เชเซ. เชฌเชเชจเซ เชธเซเชจเซเชธเชฐ เชเช เชตเชฟเชเซเชทเซเชช เชฆเซเชตเชพเชฐเชพ เชธเซเชตเชพ เชเชชเซ เชเซ. CR2477 เชฌเซเชเชฐเซ เชฆเซเชตเชพเชฐเชพ เชธเชเชเชพเชฒเชฟเชค, TPS610981 เชเชฟเชช เชชเชฐ เชฌเซเชธเซเช เชเชจเซเชตเชฐเซเชเชฐ เชฆเซเชตเชพเชฐเชพ |
เชเชชเชเชฐเชฃ เชซเซเชฒเซเชก-เชเชซเซเชเซเช เชเซเชฐเชพเชจเซเชเชฟเชธเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชพเชตเชฐ-เชเชซ เชธเชฐเซเชเชฟเช เชฒเชพเชเซ เชเชฐเซ เชเซ. เชฌเชเชจ เชฆเชฌเชพเชตเซเชฏเชพ เชชเชเซ, เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐ เชชเซเชคเซ เชชเชพเชตเชฐ เชเชเชเซเชฐเซเชฒเชจเซ เช เชเชเชพเชตเซ เชเซ เช เชจเซ เชชเชเซ เชฌเชเชจเชจเซ เชเชชเชฏเซเช เชธเชฐเซเชตเชฟเชธ เชฎเซเชกเซเชธ เชฎเชพเชเซ เชฅเช เชถเชเซ เชเซ (เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เช เชจเซเชฏ เชเชชเชเชฐเชฃเซ เชธเชพเชฅเซ เชเซเชกเซ เชฌเชจเชพเชตเซ เชฐเชนเซเชฏเซเช เชเซ, เชชเชพเชตเชฐ เชฌเชเชง เชเชฐเซ เชเซ เช เชจเซ เชซเซเชเซเชเชฐเซ เชธเซเชเชฟเชเชเซเชธ เชชเชฐ เชซเชฐเซเชฅเซ เชธเซเช เชเชฐเซ เชเซ).
เชธเซเชเซเชเซเชธ เช
เชจเซ เชธเชฐเซเชตเชฟเชธ เชฎเซเชกเซเชธ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชเซ 2 rgb LEDs เชเซ. เชเช เชฌเชเชจเซ เช
เชจเซ เชธเชฐเซเชตเชฟเชธ เชฎเซเชกเซเชธเชจเชพ เชงเซเชตเชจเชฟ เชธเชเชเซเชคเชจเซ เชธเซเชชเชฐเซเชถ เชเชฐเชคเซ เชตเชเชคเซ เชเซเชฒเชฟเชเชจเซเช เช
เชจเซเชเชฐเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชเซ เชเชฎเชฟเชเชฐ เชชเชฃ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ. LEDs เช
เชจเซ piezo emitter เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชตเชฟเชตเซเชเชฌเซเชฆเซเชงเชฟเชฅเซ เชเชพเชฒเซ เช
เชจเซ เชฌเชเชง เชเชฐเซ เชถเชเชพเชฏ เชเซ. เช เชธเซเชฎเชพเชฐเซเช เชนเซเชฎ เชเชเชเซเชฐเซเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชเซเชเซเชจเชฟเชเชฒ เชธเซเชจเซเชธเชฐเซเชธเชจเซ เชเชฆเซเชถเซ เชฎเซเชเชฒเซเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ; เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชฎเชพเชฐเซเช เชนเซเชฎ เชเชเชเซเชฐเซเชฒเชฐ เชฆเซเชตเชพเชฐเชพ เชฌเซเชเชฐเซ เชเชพเชฐเซเช เช
เชจเซ เชธเชฟเชเซเชจเชฒ เชฒเซเชตเชฒ เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซเชจเชพ เช
เชเชคเชฐเชพเชฒเซเชจเซ เชชเชฃ เชฌเชฆเชฒเซ เชถเชเซ เชเซ. เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชคเซ เชเซ
เชเซเชฐเชพเชจเซเชธเชฎเชฟเช เชฎเซเชกเชฎเชพเช เชตเชชเชฐเชพเชถ 7mA (250kbit, 10ms), เชธเซเชฒเซเชชเชฎเชพเช เชตเชชเชฐเชพเชถ 40ยตA เชเซ, เชฌเชเชง เชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชตเชชเชฐเชพเชถ 1ยตA (= โเชจเชฟเชทเซเชเซเชฐเชฟเชฏโ เชฎเซเชกเชฎเชพเช เชฌเซเชธเซเช เชเชจเซเชตเชฐเซเชเชฐเชจเซ เชตเชชเชฐเชพเชถ) เชเชฐเชคเชพเช เชเชเซ เชเซ. เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชฎเชพเชเซ Rx, tx, swd เชเชจเซเชเซเชเชฐ เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ. 2 เชจเซ เชชเชฟเช เชธเชพเชฅเซ เชฒเชเซเชเชฟเชคเซเชฐ 3x1.27p เชเชจเซเชเซเชเชฐเชจเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ. เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชฎเชพเชเซ เชเชพเชธ เชเชกเซเชชเซเชเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชนเชเชฎเซเชถเชจเซ เชเซเชฎ, เชเชชเชเชฐเชฃเชจเซเช เชธเชเชเชพเชฒเชจ เชชเซเชฐเซเชเซเชเซเชฒ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ
เชเซเชธ เชชเชฐเชเชชเชฐเชพเชเชค เชฐเซเชคเซ SLA เชชเซเชฐเชฟเชจเซเชเชฐ เชชเชฐ เชเชพเชชเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ, เชเชชเชเชฐเชฃ เชฒเชเซเชเชฟเชคเซเชฐ เชเซ, เชเซเชธ เชจเชพเชจเซ เชนเซเชตเชพเชจเซเช เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ, เช เชชเซเชฐเชฟเชจเซเชเซเชเช เชคเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชตเชพเชเชฌเซ เชเซ.
เชชเซเชฐเชฟเชจเซเชเซเชก เชฎเซเชกเชฒ เชเซเช
เชเซเชเชฌเช เชเซเชธ เช เชจเซ เชฌเซเชเชฐเซ เชเชฎเซเชชเชพเชฐเซเชเชฎเซเชจเซเช เชเชตเชฐเชฎเชพเช เชเซเชเชฆเชฐ เชงเชฐเชพเชตเชคเชพ เชนเซเชฏ เชเซ.
เช เชเชชเชเชฐเชฃเชจเชพ เชชเชฐเซเชเซเชทเชฃเซ เชธเชพเชฅเซ เชตเชฟเชกเชฟเชเช:
เชเซเช เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ เชคเซเชฎเชจเชพ เชฎเชพเชเซ:
Arduino IDE เชฎเชพเชเซ เชฐเซเชฒเชฐ เชฌเซเชฒเชพเชเชจเซเชก เชเชเชเซเชฐเซเชฒ เชธเชฟเชธเซเชเชฎเชฎเชพเช เชธเซเชตเชฟเช เชฎเชพเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซเชกเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซ
Arduino เชตเชพเชฏเชฐเชฟเชเช
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 เชฎเชพเช -
เชเซเชฐเซเชฌเชฐ เชชเซเชธเซเชฌเซ เชซเชพเชเชฒเซ -
เช เชตเชฟเชเชพเชธ เชตเชฟเชถเซเชจเชพ เชชเซเชฐเชถเซเชจเซ เชฎเชพเชเซ, Arduinos เช
เชจเซ Mysensors เชชเชฐเชจเชพ เชคเชฎเชพเชฐเชพ เชตเชฟเชเชพเชธเชฎเชพเช เชฎเซเชถเซเชเซเชฒเซเช เชตเชฟเชถเซ เช
เชฎเชพเชฐเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชเซเชเชฎเชพเช เชนเชเชฎเซเชถเชพ เชฌเชเชพเชตเชฎเชพเช เชเชตเชถเซ -
เชธเซเชฐเซเชธ: www.habr.com