Jag gör sånt ganska mycket. Och det har inget med ATmega eller annan gammal grunka att göra, det är bara programmering.
Jag har dock tagit steget längre och gjort så att man skriver texten "set time hh:mm:ss"<Enter> (utan citationstecken) och programmet klurar sedan ut att det är "set" och att nästa ord är "time" och sedan skipper programmet alla whitespaces till siffrorna.
Kod: Markera allt
case Command_Set_Time:
Work[0] = Value; // Hour
while((*Source >= '0') && (*Source <= '9') && *Source) Source++; // Skip to ':'
if(*Source == ':')
{
Source++;
Work[1] = atoi(Source); // Minute
while((*Source >= '0') && (*Source <= '9') && *Source) Source++; // Skip to ':'
if(*Source == ':')
{
Source++;
if((*Source >= '0') && (*Source <= '9'))
{
Work[2] = atoi(Source); // Second
Local_Time.Year = Date_Time.Year;
Local_Time.Month = Date_Time.Month;
Local_Time.Date = Date_Time.Date;
Local_Time.Hour = Work[0];
Local_Time.Minute = Work[1];
Local_Time.Second = Work[2];
Date_Time_Make_UTC(&Local_Time, Config.Timezone);
Date_Time_Convert2UNIX(&Local_Time, &Check);
Date_Time_Make_Local_Time(&Local_Time, Config.Timezone);
Clock = Check; // Set clock
RTC_Write_Time(&Check);
sprintf(Buffer, "%s %s: %u:%02u:%02u\r\n", Comm_Text_Set, Comm_Text_Time, Local_Time.Hour, Local_Time.Minute, Local_Time.Second); Printout(Buffer);
}
}
}
break; // Command_Set_Time
Lite förklaring:
char* Source pekar på första tecken i timmarna.
unsigned char Work[3] är arbetsvariabler som timmar, minuter och sekunder sparas i till att börja med under omvandlingen.
Value är en variabel som redan håller värdet på första parameter som Source pekar på. Detta då det rör sig om många kommandon och många behöver ett värde och då kan man likaväl göra den omvandling direkt.
Och detta fungerar och är en del av programmet i min kontorsklocka.