เจ เฉฑเจ เจฆเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจฎเฉเจ เจคเฉเจนเจพเจกเฉ เจจเจพเจฒ เจเฉฑเจ เจจเจตเจพเจ เจชเฉเจฐเฉเจเฉเจเจ เจธเจพเจเจเจพ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจเฅค เจเจธ เจตเจพเจฐ เจเจน เจธเจผเฉเจธเจผเฉ เจฆเฉ เจชเฉเจจเจฒ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเฉฑเจ เจธเจตเจฟเฉฑเจ เจนเฉเฅค เจกเจฟเจตเจพเจเจธ เจธเฉฐเจเฉเจช เจนเฉ, 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 เจตเจฟเฉฑเจ เจเฉเจธ เจซเจพเจเจฒเจพเจ -
Gerber PCB เจซเจพเจเจฒเจพเจ -
เจเจธ เจตเจฟเจเจพเจธ เจฌเจพเจฐเฉ เจธเจตเจพเจฒเจพเจ เจฒเจ, Arduinos เจ
เจคเฉ Mysensors 'เจคเฉ เจคเฉเจนเจพเจกเฉ เจตเจฟเจเจพเจธ เจตเจฟเฉฑเจ เจฎเฉเจธเจผเจเจฒเจพเจ เจฌเจพเจฐเฉ เจธเจพเจกเฉ เจเฉเจฒเฉเจเฉเจฐเจพเจฎ เจเฉเจ เจตเจฟเฉฑเจ เจนเจฎเฉเจธเจผเจพ เจฌเจเจพเจ
เจฒเจ เจเจตเฉเจเจพ -
เจธเจฐเฉเจค: www.habr.com