#c #esp8266 #arduino-ide #arduino-esp8266
#c #esp8266 #arduino-ide #arduino-esp8266
Вопрос:
Я пишу планировщик времени для переключения сокетов в определенное время для микропроцессорного узла NodeMCU. Я столкнулся с проблемой синтаксического анализа значений. Я извлек значения (например, ’08:30′) из базы данных и сохранил в char *. Я извлекаю текущее время с помощью NtpClient, но это значение int. Моя идея состоит в том, чтобы создать char * из hour, ‘:’ и minutes и сравнить с моим значением из базы данных, но у меня есть 2 проблемы:
- Мне нужно создать 2-значный символ * из часов и минут.
- Мне нужно соединить эти две строки
У меня нет большого опыта в c , и я могу сделать это самостоятельно, но я хочу сделать это наиболее эффективным способом, потому что я буду запускать этот скрипт по крайней мере каждые 50 секунд.
Комментарии:
1. не делайте преждевременной оптимизации, если вам нужно анализировать один
int
раз каждые 50 секунд, тогда попытка найти «наиболее эффективный» должна быть вашей последней заботой2. @largest_prime_is_463035818 Я могу делать это каждую секунду, чтобы запланированная задача выполнялась в начале определенной минуты. Но я не думаю, что это хорошая идея.
3.
I'm writing scheduler
..I fetched values (eg. '08:30') from database
Зачем вам нужно текущее время для планировщика? Ооочень, это настоящий планировщик, а не планировщик процессов .4. @KamilCuk правильно. Извините. Я отредактировал описание
5. Я бы сравнил числа, а не строки
Ответ №1:
У меня минимальный опыт работы с C . Кроме того, Arduino IDE не является полноценным C . Мое решение для этого:
int intLength( int N )
{
if ( N < 0 ) return 1 intLength( -N );
else if ( N < 10 ) return 1;
else return 1 intLength( N / 10 );
}
void setSocketsState() {
int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();
char currentHourChar[10];
char currentMinuteChar[10];
itoa(currentHour, currentHourChar, 10);
itoa(currentMinute, currentMinuteChar, 10);
char dest[24] = "";
if (intLength(currentHour) == 1) {
strcat(dest, "0");
}
strcat(dest, currentHourChar);
strcat(dest, ":");
if (intLength(currentMinute) == 1) {
strcat(dest, "0");
}
strcat(dest, currentMinuteChar);
char* dateToCompare = dest; // result: HH:MM
socket1.handleCurrentTime(dateToCompare);
socket2.handleCurrentTime(dateToCompare);
socket3.handleCurrentTime(dateToCompare);
socket4.handleCurrentTime(dateToCompare);
}
У меня еще долгий путь впереди. Если вы хотите увидеть эту часть моего проекта, вот ссылка:
https://github.com/wojtaszek171/SmartHome/blob/master/esp8266/ESP1/ESP1.ino