smart watch fan
Tags: javascript, beginners, tutorial, devops
Published: 2023-12-25 07:24:23

This is code to my project smart watch fan.




настройка аннулирования () {

}

#включить <OneWire.h>

#включить <DallasTemperature.h>

#определение ONE_WIRE_BUS 10

OneWire OneWire (ONE_WIRE_BUS);

Датчики температуры Dallast (и OneWire);

int tempPin = ONE_WIRE_BUS; // выход LM35

int fan = 11; // вывод на вентилятор

int temp;

int tempMin = 28; // температура начала вращения вентилятора

int tempMax = 35; // максимальная температура, когда вентилятор вращается на 100%

int fanSpeed;

настройка аннулирования () {

pinMode (вентилятор, ВЫХОД);

Serial.begin (9600);

sensors.begin();

pinMode (настройка температуры, ВВОД);

}

void loop () {

temp = readTemp(); // получаем температуру

if(temp < tempMin) { // если temp меньше минимума

fanSpeed = 0; // кулер не вращается

Цифровая запись (вентилятор, НИЗКИЙ УРОВЕНЬ);

}

if((temp >= tempMin) && (temp <= tempMax)) { // если temp больше минимума

fanSpeed = map(temp, tempMin, tempMax, 0, 255); // текущая скорость вентилятора

analogWrite(fan, fanSpeed); // вращаем кулер со скоростью fanSpeed

}

Серийный номер.печать ("TEMP:");

Serial.print(temp); // отображение температуры

жк-дисплей.печать ("C");

задержка (1000);

}

int readTemp() { // получить температуру и переконвертировать ее в цельсии

датчики.requestTemperatures();

temp = sensors.getTempCByIndex(0);

температура возврата * 0.48828125;

}void loop () {

}

/].

*/

/*

Ретро-часы Arduino версии v1.0 - u8g (поддерживает u8glib)

Получите последнюю версию приложения для Android host по адресу

------> https://github.com/godstale/retrowatch

------> или http://www.hardcopyworld.com

Автор: Су Ен Бэ (godstale@hotmail.com)

Весь приведенный выше текст должен быть включен в любое распространение

*/

#включить <avr/pgmspace.h>

#включить <SoftwareSerial.h>

#включает <math.h>

# включить "bitmap.h"

# включить "U8glib.h"

///////////////////////////////////////////////////////////////////

//----- Экземпляр OLED

// ВАЖНОЕ ПРИМЕЧАНИЕ: Полный список поддерживаемых устройств

// со всеми вызовами конструктора здесь: http://code.google.com/p/u8glib/wiki/device

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI

///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

//----- BT instance

SoftwareSerial BTSerial(2, 3); //Connect HC-06, RX, TX

///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

//----- Протокол

//----- Анализ транзакций Bluetooth

#определение TR_MODE_IDLE 1

#определение TR_MODE_WAIT_CMD 11

#определение TR_MODE_WAIT_MESSAGE 101

#определение TR_MODE_WAIT_TIME 111

#определение TR_MODE_WAIT_ID 121

#определение TR_MODE_WAIT_COMPLETE 201

#определение ТРАНЗАКЦИИ_START_BYTE 0xfc

#определение ТРАНЗАКЦИИ_END_BYTE 0xfd

#определить CMD_TYPE_NONE 0x00

#определение CMD_TYPE_RESET_EMERGENCY_OBJ 0x05

#определение CMD_TYPE_RESET_NORMAL_OBJ 0x02

#определение CMD_TYPE_RESET_USER_MESSAGE 0x03

#определение CMD_TYPE_ADD_EMERGENCY_OBJ 0x11

#define CMD_TYPE_ADD_NORMAL_OBJ 0x12

#define CMD_TYPE_ADD_USER_MESSAGE 0x13

#define CMD_TYPE_DELETE_EMERGENCY_OBJ 0x21

#define CMD_TYPE_DELETE_NORMAL_OBJ 0x22

#define CMD_TYPE_DELETE_USER_MESSAGE 0x23

#определение CMD_TYPE_SET_TIME 0x31

#определение CMD_TYPE_REQUEST_MOVEMENT_HISTORY 0x32

#определение CMD_TYPE_SET_CLOCK_STYLE 0x33

#определить CMD_TYPE_SET_INDICATOR 0x34

#определение CMD_TYPE_PING 0x51

#определение CMD_TYPE_AWAKE 0x52

#определение CMD_TYPE_SLEEP 0x53

#определение CMD_TYPE_REBOOT 0x54

Указатель байтовой ТРАНЗАКЦИИ = TR_MODE_IDLE;

байт TR_COMMAND = CMD_TYPE_NONE;

///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

//----- Буфер, параметры

//----- Буфер элементов сообщения

#определение MSG_COUNT_MAX 7

#определение MSG_BUFFER_MAX 19

символ без знака msgBuffer[MSG_COUNT_MAX][MSG_BUFFER_MAX];

char msgParsingLine = 0;

char msgParsingChar = 0;

символ msgCurDisp = 0;

//----- Буфер аварийных предметов

#определение EMG_COUNT_MAX 3

#определение EMG_BUFFER_MAX 19

символ emgBuffer[EMG_COUNT_MAX][EMG_BUFFER_MAX];

char emgParsingLine = 0;

char emgParsingChar = 0;

char emgCurDisp = 0;

//----- Время

#определение ВРЕМЕНИ ОБНОВЛЕНИЯ_ИНТЕРВАЛА 60000

время в байте = 1;

идентификатор байта = 1;

byte iWeek = 1; // 1: ВС, ПН, ВТ, СР, ЧТ, ПТ, СБ

байт iAmPm = 0; // 0:00, 1:00

количество байтов iHour = 0;

иминуты байтов = 0;

байт - это секунда = 0;

#определение TIME_BUFFER_MAX 6

char timeParsingIndex = 0;

char timeBuffer[6] = {-1, -1, -1, -1, -1, -1};

PROGRMEM const char* const weekString[] = {"", "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"};

PROGMEM const char* const ampmString[] = {"AM", "PM"};

///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

//----- Функции дисплея

#определить DISPLAY_MODE_START_UP 0

#определение DISPLAY_MODE_CLOCK 1

#определение РЕЖИМА ОТОБРАЖЕНИЯ_ЭМГЕНСЫ_МСГ 2

#define DISPLAY_MODE_NORMAL_MSG 3

#define DISPLAY_MODE_IDLE 11

byte displayMode = DISPLAY_MODE_START_UP;

#define CLOCK_STYLE_SIMPLE_ANALOG 0x01

#define CLOCK_STYLE_SIMPLE_DIGIT 0x02

#define CLOCK_STYLE_SIMPLE_MIX 0x03

byte clockStyle = CLOCK_STYLE_SIMPLE_MIX;

#define INDICATOR_ENABLE 0x01

логический индикатор обновления = true;

byte centerX = 64;

центр байта = 32;

байт iRadius = 28;

#определение IDLE_DISP_INTERVAL 60000

#определение CLOCK_DISP_INTERVAL 60000

#определение АВАРИЙНОЙ СИТУАЦИИ_ДИСП_ИНТЕРВАЛ 5000

#define MESSAGE_DISP_INTERVAL 3000

неподписанное длительное время ожидания = 0;

unsigned long prevDisplayTime = 0;

unsigned long next_display_interval = 0;

unsigned long mode_change_timer = 0;

#определение CLOCK_DISPLAY_TIME 300000

#определение EMER_DISPLAY_TIME 10000

#определение MSG_DISPLAY_TIME 5000

PROGMEM const char* const strIntro[] = {"Ретро", "Часы", "Arduino v1.0"};

///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

//----- Кнопочное управление

int buttonPin = 5;

логическое значение isClicked = ВЫСОКОЕ;

///////////////////////////////////////////////////////////////////

настройка аннулирования () {

//Serial.begin (9600); // ПРЕДУПРЕЖДЕНИЕ: Не включайте это, если недостаточно памяти

//Serial.println(F("RetroWatch v1.0 u8g"));

//----- Кнопка установки

pinMode (PIN-код кнопки, ВВОД); // Определяет pin-код кнопки

//----- Инициализировать буфер сообщений

init_emg_array();

init_msg_array();

//----- Настройка функций дисплея

centerX = u8g.getWidth() / 2;

Центр = u8g.getHeight() / 2;

iRadius = centerY - 2;

//----- Настройка последовательного подключения с помощью BT

BTSerial.begin(9600); // установите скорость передачи данных для порта BT

//----- Показать логотип

drawStartUp(); // Показать логотип RetroWatch

задержка (3000);

}

void loop () {

получено логическое значение = false;

длительное текущее время без знака = 0;

// Получить ввод с помощью кнопки

if (digitalRead (buttonPin) == НИЗКИЙ) isClicked = НИЗКИЙ;

// Получать данные с пульта дистанционного управления и анализировать

isReceived = receiveBluetoothData();

// Обновить время на часах

current_time = миллис ();

Время обновления (current_time);

// Режим отображения

onDraw (current_time);

// Если данные не поступают, подождите некоторое время, чтобы сэкономить заряд батареи

если (!получено)

задержка (300);

}

///////////////////////////////////

//----- Утилиты

///////////////////////////////////

аннулирует init_msg_array() {

для(int i=0; i<MSG_COUNT_MAX; i++) {

для (int j=0; j<MSG_BUFFER_MAX; j ++) {

msgBuffer [i] [j] = 0x00;

}

}

msgParsingLine = 0;

msgParsingChar = 0;  // First 2 byte is management byte

msgCurDisp = 0;

}

void init_emg_array() {

for(int i=0; i<EMG_COUNT_MAX; i++) {

for(int j=0; j<EMG_BUFFER_MAX; j++) {

emgBuffer[i][j] = 0x00;

}

}

emgParsingLine = 0;

emgParsingChar = 0; // Первые 2 байта - это байт управления

emgCurDisp = 0;

}

///////////////////////////////////

//----- Функции определения времени

///////////////////////////////////

аннулирует значение setTimeValue() {

iMonth = буфер времени[0];

iDay = буфер времени [1];

iWeek = таймер [2]; // 1: ВС, ПН, ВТ, СР, ЧТ, ПТ, СБ

iAmPm = буфер времени [3]; // 0:00, 13:00

iHour = буфер времени [4];

iMinutes = буфер времени [5];

}

недействительное время обновления (неподписанное длительное текущее время) {

if(iMinutes >= 0) {

if(current_time - prevClockTime > UPDATE_TIME_INTERVAL) {

// Увеличьте время

Мгновенные действия++;

если (iMinutes >= 60) {

iMinutes = 0;

iHour++;

если (iHour > 12) {

iHour = 1;

(iAmPm == 0) ? iAmPm = 1 : iAmPm = 0;

if(iAmPm == 0) {

iWeek++;

если (iWeek > 7)

iWeek = 1;

iDay++;

если (iDay> 30) // Да. день не указан точно.

iDay = 1;

}

}

}

prevClockTime = current_time;

}

}

else {

displayMode = DISPLAY_MODE_START_UP;

}

}

///////////////////////////////////

//----- BT, функции анализа данных

///////////////////////////////////

// Разбор пакета в соответствии с текущим режимом

логическое значение receiveBluetoothData() {

int isTransactionEnded = false;

пока (!isTransactionEnded) {

если(BTSerial.available()) {

байт c = BTSerial.read();

//if(c == 0xFE && TRANSACTION_POINTER != TR_MODE_WAIT_MESSAGE) возвращает false;

if(TRANSACTION_POINTER == TR_MODE_IDLE) {

parseStartSignal(c);

}

else if(TRANSACTION_POINTER == TR_MODE_WAIT_CMD) {

parseCommand (c);

}

else if(TRANSACTION_POINTER == TR_MODE_WAIT_MESSAGE) {

Разбор сообщения (c);

}

else if(TRANSACTION_POINTER == TR_MODE_WAIT_TIME) {

parseTime(c);

}

else if(TRANSACTION_POINTER == TR_MODE_WAIT_ID) {

parseId(c);

}

else if(TRANSACTION_POINTER == TR_MODE_WAIT_COMPLETE) {

isTransactionEnded = parseEndSignal(c);

}

} // End of if(BTSerial.available())

еще {

isTransactionEnded = true;

}

}// Конец while()

возвращает true;

} // Завершение получения BluetoothData()

аннулирует parseStartSignal (байт c) {

//drawLogChar(c);

if(c == TRANSACTION_START_BYTE ТРАНЗАКЦИИ) {

TRANSACTION_POINTER = TR_MODE_WAIT_CMD;

TR_COMMAND = CMD_TYPE_NONE;

}

}

аннулирует parseCommand (байт c) {

if(c == CMD_TYPE_RESET_EMERGENCY_OBJ || c == CMD_TYPE_RESET_NORMAL_OBJ || c == CMD_TYPE_RESET_USER_MESSAGE) {

TRANSACTION_POINTER = TR_MODE_WAIT_COMPLETE;

TR_COMMAND = c;

processTransaction();

}

else if(c == CMD_TYPE_ADD_EMERGENCY_OBJ || c == CMD_TYPE_ADD_NORMAL_OBJ || c == CMD_TYPE_ADD_USER_MESSAGE) {

TRANSACTION_POINTER = TR_MODE_WAIT_MESSAGE;

TR_COMMAND = c;

if(c == CMD_TYPE_ADD_EMERGENCY_OBJ) {

//Serial.println("# start - ADD_EMERGENCY_OBJ");

emgParsingChar = 0;

if(emgParsingLine >= MSG_COUNT_MAX || emgParsingLine < 0)

emgParsingLine = 0;

для (int i=3; i<EMG_BUFFER_MAX; i++)

emgBuffer[emgParsingLine] [i] = 0x00;

}

else if(c == CMD_TYPE_ADD_NORMAL_OBJ) {

//Serial.println("# start - ADD_NORMAL_OBJ");

msgParsingChar = 0;

if(msgParsingLine >= MSG_COUNT_MAX || msgParsingLine < 0)

msgParsingLine = 0;

для (int i=3; i<MSG_BUFFER_MAX; i++)

msgBuffer[msgParsingLine][i] = 0x00;

}

}

еще, если (c == CMD_TYPE_DELETE_EMERGENCY_OBJ || c == CMD_TYPE_DELETE_NORMAL_OBJ || c == CMD_TYPE_DELETE_USER_MESSAGE) {

TRANSACTION_POINTER = TR_MODE_WAIT_COMPLETE;

TR_COMMAND = c;

}

else if(c == CMD_TYPE_SET_TIME) {

TRANSACTION_POINTER = TR_MODE_WAIT_TIME;

TR_COMMAND = c;

}

еще, если (c == CMD_TYPE_SET_CLOCK_STYLE || c == CMD_TYPE_SET_INDICATOR) {

TRANSACTION_POINTER = TR_MODE_WAIT_ID;

TR_COMMAND = c;

}

еще {

TRANSACTION_POINTER = TR_MODE_IDLE;

TR_COMMAND = CMD_TYPE_NONE;

}

}

аннулирует синтаксическое сообщение (байт c) {

if(c == TRANSACTION_END_BYTE ТРАНЗАКЦИИ) {

Процесстранзакции ();

TRANSACTION_POINTER = TR_MODE_IDLE;

}

if(TR_COMMAND == CMD_TYPE_ADD_EMERGENCY_OBJ) {

if(emgParsingChar < EMG_BUFFER_MAX - 1) {

if(emgParsingChar > 1) {

emgBuffer[emgParsingLine][emgParsingChar] = c;

}

emgParsingChar++;

}

еще {

TRANSACTION_POINTER = TR_MODE_IDLE;

Процесстранзакции ();

}

}

else if(TR_COMMAND == CMD_TYPE_ADD_NORMAL_OBJ) {

if(msgParsingChar < MSG_BUFFER_MAX - 1) {

if(msgParsingChar > 1) {

msgBuffer[msgParsingLine][msgParsingChar] = c;

}

msgParsingChar++;

}

else {

TRANSACTION_POINTER = TR_MODE_IDLE;

processTransaction();

}

}

else if(TR_COMMAND == CMD_TYPE_ADD_USER_MESSAGE) {

// Not available yet.

TRANSACTION_POINTER = TR_MODE_WAIT_COMPLETE;

}

}

пустое время синтаксического анализа (байт c) {

if(TR_COMMAND == CMD_TYPE_SET_TIME) {

if(timeParsingIndex >= 0 && timeParsingIndex < TIME_BUFFER_MAX) {

Буфер времени[timeParsingIndex] = (int)c;

timeParsingIndex++;

}

еще {

Процесстранзакции ();

TRANSACTION_POINTER = TR_MODE_WAIT_COMPLETE;

}

}

}

недействительный синтаксический идентификатор (байт c) {

if(TR_COMMAND == CMD_TYPE_SET_CLOCK_STYLE) {

clockStyle = c;

Процесстранзакции ();

}

else if(TR_COMMAND == CMD_TYPE_SET_INDICATOR) {

if(c == INDICATOR_ENABLE)

updateIndicator = true;

ещё

updateIndicator = false;

Процесстранзакции ();

}

TRANSACTION_POINTER = TR_MODE_WAIT_COMPLETE;

}

логический синтаксический сигнал (байт c) {

if(c == TRANSACTION_END_BYTE ТРАНЗАКЦИИ) {

TRANSACTION_POINTER = TR_MODE_IDLE;

возвращает true;

}

возвращает false;

}

аннулирует транзакцию процесса() {

if(TR_COMMAND == CMD_TYPE_RESET_EMERGENCY_OBJ) {

init_emg_array();//init_msg_array();

}

else if(TR_COMMAND == CMD_TYPE_RESET_NORMAL_OBJ) {

init_msg_array();//init_emg_array();

}

else if(TR_COMMAND == CMD_TYPE_RESET_USER_MESSAGE) {

// Пока недоступен.

}

else if(TR_COMMAND == CMD_TYPE_ADD_NORMAL_OBJ) {

//Serial.println("# processTransaction() - ADD_NORMAL_OBJ");

msgBuffer[msgParsingLine][0] = 0x01;

msgBuffer[msgParsingLine][MSG_BUFFER_MAX-1] = 0x00;

msgParsingChar = 0;

msgParsingLine++;

if(msgParsingLine >= MSG_COUNT_MAX)

msgParsingLine = 0;

setNextDisplayTime(millis(), 0); // update screen immediately

}

else if(TR_COMMAND == CMD_TYPE_ADD_EMERGENCY_OBJ) {

//Serial.println("# processTransaction() - ADD_EMERGENCY_OBJ");

emgBuffer[emgParsingLine][0] = 0x01;

emgBuffer[emgParsingLine][EMG_BUFFER_MAX - 1] = 0x00;

emgParsingChar = 0;

emgParsingLine++;

if(emgParsingLine >= EMG_COUNT_MAX)

emgParsingLine = 0;

startEmergencyMode();

Установите время воспроизведения (миллис (), 2000);

}

else if(TR_COMMAND == CMD_TYPE_ADD_USER_MESSAGE) {

}

еще, если(TR_COMMAND == CMD_TYPE_DELETE_EMERGENCY_OBJ || TR_COMMAND == CMD_TYPE_DELETE_NORMAL_OBJ || TR_COMMAND == CMD_TYPE_DELETE_USER_MESSAGE) {

// Пока недоступен.

}

else if(TR_COMMAND == CMD_TYPE_SET_TIME) {

Установите значение времени ();

timeParsingIndex = 0;

setNextDisplayTime(миллис (), 0); // немедленно обновите экран

}

if(TR_COMMAND == CMD_TYPE_SET_CLOCK_STYLE || CMD_TYPE_SET_INDICATOR) {

setNextDisplayTime(миллис (), 0); // немедленно обновите экран

}