Я ищу, как разработать функцию, аналогичную функции Millis Arduino на языке Fore C (это специальный язык и использовать тот же синтаксис C). Он не поддерживает библиотеку time.h, поэтому я нашел этот метод для разработки функции millis:
int clock;
int millis(){
while(1){
clock++;
return clo
}
}
, но когда я вызываю эту функцию в этой функции:
void drive_buzzer()
{
typedef enum { e_sys_wait_buz, e_play_buz, e_end_buz, e_silence_buz} buz_state_t;
static unsigned char buz_state = e_sys_wait_buz;
static unsigned long timer = 0;
switch ( buz_state ) {
// Waiting for a sound to emit...
case e_sys_wait_buz:
if ( g_snd.snd_evt )
{
g_snd.repeat--;
timer = millis()+g_snd.duration;
//tone(BUZZER_PIN,g_snd.freq);
// pwm(g_snd.freq,0.5);
printf("%s\n","bbbbbbbbbbbbbbbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepppp" );
buz_state = e_play_buz;
printf("%d\n",millis() );
printf("%ld\n",timer );
}
break;
// Play the sound
case e_play_buz:
if ( millis() > timer ) {
//noTone(BUZZER_PIN);
//printf("%s\n","e_play_buz" );
buz_state = e_end_buz;
}
break;
// Stop the sound
case e_end_buz:
if ( g_snd.repeat != 0 ) {
g_snd.repeat--;
//printf("%s\n","e_end_buz" );
timer = millis()+g_snd.interval;
buz_state = e_silence_buz;
}
else
buz_state = e_sys_wait_buz;
break;
// Silence interval between two sounds
case e_silence_buz:
if ( millis() > timer ) {
//tone(BUZZER_PIN,g_snd.freq);
//printf("%s\n","e_silence_buz" );
timer = millis()+g_snd.duration;
buz_state = e_play_buz;
}
break;
default:
break;
}
}
Это работает только в первом случае :( Любая идея или полезные ссылки, как я могу имитировать поведение часов (без использования какой-либо библиотеки) Спасибо!