Salve a tutti... Ho fatto un programmino stupido per esercitarmi...
E' la prima volta che mi cimento in un programma del genere (con la funzione switch), quindi non sò se ho usato la forma "corretta".
Vi chiedo cosa posso migliorare, per avere meno problemi e un programma più "bello"
Inoltre la logica che ho usato per far stampare a schermo una sola volta i vari messaggi mi fà orrore, e mi chiedo se c'è qualcosa di meglio che possa fare.
void setup() {
Serial.begin (9600);
pinMode( 13, OUTPUT );
pinMode( 12, OUTPUT );
}
char caso;
int statoled = 0;
int richiestatit = 0;
int a = 0;
int b = 0;
int c = 0;
int o = 0;
unsigned long int curtime;
unsigned long int ledtimea =0;
unsigned long int ledtimeb =0;
unsigned long int ledtimec =0;
unsigned long int interleda = 50;
unsigned long int interledb = 500;
unsigned long int interledc = 1000;
void loop()
{
delay(50);
curtime = millis();
if ( richiestatit == 0)
{
Serial.println("Inserisci a, b oppure c.\nDigita 'o' per spegnere il sistema.\n");
richiestatit++;
}
if ( Serial.available() )
{
caso = Serial.read();
if ( caso != 'a' && caso != 'b' && caso != 'c' && caso != 0 && caso != 'o')
{
Serial.println("Il valore non e' stato riconosciuto.\n");
digitalWrite( 13, HIGH);
digitalWrite( 12, LOW);
richiestatit=0;
a=0;
b=0;
c=0;
o=0;
}
}
switch (caso)
{
case 'a':
Funzionea();
break;
case 'b':
Funzioneb();
break;
case 'c':
Funzionec();
break;
}
if ( caso == 'o')
{
digitalWrite( 13, LOW);
digitalWrite( 12, LOW);
if ( o == 0 )
{
Serial.println ( "Il sistena e' spento\n" );
o++;
c=0;
a=0;
b=0;
}
}
}
void Funzionea()
{
if ( a == 0)
Serial.println( "Sei nella funzione a\n" );
if ( curtime > ledtimea + interleda)
{
statoled = 1 - statoled;
digitalWrite( 12, statoled);
digitalWrite( 13, LOW);
ledtimea = millis();
}
a++;
b=0;
c=0;
o=0;
}
void Funzioneb()
{
if (b == 0)
Serial.println( "Sei nella funzione b\n" );
if ( curtime > ledtimeb + interledb)
{
statoled = 1 - statoled;
digitalWrite( 12, statoled);
digitalWrite( 13, LOW);
ledtimeb = millis();
}
b++;
a=0;
c=0;
o=0;
}
void Funzionec()
{
if ( c==0 )
Serial.println( "Sei nella funzione c\n" );
if ( curtime > ledtimec + interledc)
{
statoled = 1 - statoled;
digitalWrite( 12, statoled);
digitalWrite( 13, LOW);
ledtimec = millis();
}
c++;
a=0;
b=0;
o=0;
}
Inoltre ho un paio di domande:
Perchè se metto "case 1" al posto di "case '1' " non funziona? (è un esempio, per aggirare questo problema ho messo i caratteri...)
Perchè se metto un println(caso) subito dopo il serialread mi stampa quello che penso sia il corrispettivo in ascii?
E perchè se metto un serialwrite melo stampa direttamente? Ero abbastanza sicuro che fosse il contrario
Grazie