#define LOOP for(int i=0; i<360; i+=5)
#define FLUSH Serial.end();Serial.begin(9600);
const int CosPhase=90;
const int Rad2Deg=180/PI;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int Elec;
Elec = menu();
Serial.println("Eleccion : "+String(Elec));
switch(Elec)
{
case 1:{ Ej1();
break;}
case 2: { Ej2();
break;}
case 3: { Ej3();
break;}
case 4:{ Ej4();
break;}
case 5:{ Ej5();
break;}
case 6:{ Ej6();
break;}
}
}
int menu()
{
int Choice;
Serial.println("\nMenu de Ejercicios:");
Serial.println("1) Ejercicio 1");
Serial.println("2) Ejercicio 4");
Serial.println("3) Ejercicio 8");
Serial.println("4) Ejercicio 12");
Serial.println("5) Ejercicio 16");
Serial.println("6) Ejercicio 22");
while(!Serial.available()){}
Choice=Serial.readString().toInt();
Serial.println(Choice);
return Choice;
}
float Sine_Wave(float Ampl, int Esc, int T, float Phase, float Shift)
{
return(Ampl*sin((Esc*T*PI/180)+Phase)+Shift);
}
void Ej1()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
Serial.println(Sine_Wave(3,1,i,0,0));
delay(125);
if(Serial.available())
break;
}
}
}
void Ej2()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
/*la funcion seno desfasada difiere ligeramente de un coseno debido a que la comunicacion
Serial inicia de manera causal a diferencia de la peridiocidad infinita de una funcion trig. netamente matematica*/
Serial.println(Sine_Wave(1,1,i,(CosPhase+(-1*Rad2Deg*PI/2)),0));
/*Serial.print(cos((i*PI/180)+(-1*Rad2Deg*PI/2)));
Serial.print("\t");
Serial.print(sin((i*PI/180)+CosPhase));
Serial.print("\t");
Serial.println(cos((i*PI/180)));*/
delay(125);
if(Serial.available())
break;
}
}
}
void Ej3()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
Serial.println(Sine_Wave(1,3,i,(CosPhase+(-1*Rad2Deg*2*PI)),4));
delay(125);
if(Serial.available())
break;
}
}
}
void Ej4()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
Serial.println(Sine_Wave(4,-1*2*PI,i,(Rad2Deg*PI),0));
delay(125);
if(Serial.available())
break;
}
}
}
void Ej5()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
Serial.println(1/(Sine_Wave(1,1,i,(CosPhase+(-1*Rad2Deg*PI/2)),0)));
delay(125);
if(Serial.available())
break;
}
}
}
void Ej6()
{
FLUSH;
while(!Serial.available())
{
LOOP
{
Serial.println(Sine_Wave(1,1,i,(CosPhase+(Rad2Deg*PI/6)),0)/Sine_Wave(1,1,i,(Rad2Deg*PI/6),0));
delay(125);
if(Serial.available())
break;
}
}
}