Nuovi aggiornamenti..
byte pwm_1 = 3; //Pin Velocità motore 1
byte pwm_2 = 11; //Pin Velocità motore 2
byte pwm_3 = 5; //Pin Velocità motore 3
byte pwm_4 = 6; //Pin Velocità motore 3
byte pwm_5 = 10; //Pin Velocità motore 4
byte dir_1 = 12; //Pin Direzione motore 1
byte dir_2 = 13; //Pin Direzione motore 2
byte dir_3 = 8; //Pin Direzione motore 3
byte dir_4 = 9; //Pin Direzione motore 4
byte dir_5a = 2; //Pin Direzione moore 5
byte dir_5b = 7; //Pin Direzione motore 5
byte stato_1 = 0; //Stato direzione morore 1
byte stato_2 = 0; //Stato direzione morore 2
byte stato_3 = 0; //Stato direzione morore 3
byte stato_4 = 0; //Stato direzione morore 4
byte stato_5 = 0; //Stato direzione morore 5
byte command = 0; //Comando per movimento
byte pwm_speed = 255; // Velocità motori
unsigned long time_pause = 0; //parametro per pausa
boolean esci = false; //uscita da ciclo while
void setup()
{
// Inizio comunicazione seriale a 9600
Serial.begin(9600);
pinMode(pwm_1, OUTPUT);
pinMode(pwm_2, OUTPUT);
pinMode(pwm_3, OUTPUT);
pinMode(pwm_4, OUTPUT);
pinMode(dir_1, OUTPUT);
pinMode(dir_2, OUTPUT);
pinMode(dir_3, OUTPUT);
pinMode(dir_4, OUTPUT);
}
void loop()
{
if (Serial.available() > 0) { //Se sono presenti dati nel buffer
leggi_seriale(); //li leggo con la funzione
}
switch (command) { //Switch sul comando
case 'q':
clear_command();
if (stato_1 == 0)
{
pausa();
analogWrite(pwm_1, pwm_speed);
digitalWrite(dir_1, LOW);
Serial.println("Chiude pinza");
stato_1 = 1;
break;
}
else if (stato_1 == 1)
{
pausa();
analogWrite(pwm_1, pwm_speed);
digitalWrite(dir_1, HIGH);
Serial.println("Apre pinza");
stato_1 = 0;
break;
}
case 'w':
clear_command();
if (stato_2 == 0)
{
pausa();
analogWrite(pwm_2, pwm_speed);
digitalWrite(dir_2, LOW);
Serial.println("Scende braccio 1");
stato_2 = 1;
break;
}
else if (stato_2 == 1)
{
pausa();
analogWrite(pwm_2, pwm_speed);
digitalWrite(dir_2, HIGH);
Serial.println("Sale braccio 1");
stato_2 = 0;
break;
}
case 'e':
clear_command();
if (stato_3 == 0)
{
pausa();
analogWrite(pwm_3, pwm_speed);
digitalWrite(dir_3, LOW);
Serial.println("Sale braccio 2");
stato_3 = 1;
break;
}
else if (stato_3 == 1)
{
pausa();
analogWrite(pwm_3, pwm_speed);
digitalWrite(dir_3, HIGH);
Serial.println("Scende braccio 2");
stato_3 = 0;
break;
}
case 'r':
clear_command();
if (stato_4 == 0)
{
pausa();
analogWrite(pwm_4, pwm_speed);
digitalWrite(dir_4, LOW);
Serial.println("Scende braccio 3");
stato_4 = 1;
break;
}
else if (stato_4 == 1)
{
pausa();
analogWrite(pwm_4, pwm_speed);
digitalWrite(dir_4, HIGH);
Serial.println("Sale braccio 3");
stato_4 = 0;
break;
}
case 't':
clear_command();
if (stato_5 == 0)
{
pausa();
analogWrite(pwm_5, pwm_speed);
digitalWrite(dir_5a, LOW);
digitalWrite(dir_5b, HIGH);
Serial.println("Gira a destra");
stato_5 = 1;
break;
}
else if (stato_5 == 1)
{
pausa();
analogWrite(pwm_5, pwm_speed);
digitalWrite(dir_5a, HIGH);
digitalWrite(dir_5b, LOW);
Serial.println("Gira a sinistra");
stato_5 = 0;
break;
}
case '1':
pausa();
clear_command();
analogWrite(pwm_1, 0);
analogWrite(pwm_2, 0);
analogWrite(pwm_3, 0);
analogWrite(pwm_4, 0);
analogWrite(pwm_5, 0);
Serial.println("Stop!");
break;
case 's':
clear_command();
Serial.print ("Pwm impostato a: ");
Serial.println (pwm_speed, DEC);
break;
case 'a':
clear_command();
delay(250);
break;
}
}
void leggi_seriale(){
byte cont = 0;
char char_in[10];
esci = false;
if (Serial.available()>0) {
command = Serial.read();
delay(2);
}
while (esci == false) {
if (Serial.available()>0) {
char_in[cont] = Serial.read();
if (char_in[cont] != ';') {
cont ++;
}
else {
char_in[cont] == '/0';
esci = true;
//break;
}
delay(2);
}
}
if (command == 'p') {
clear_command();
if (cont <= 3 ) {
pwm_speed = atoi(char_in);
Serial.print("Velocità pwm impostata a: ");
Serial.println(pwm_speed, DEC);
}
else if (cont > 3 ) {
Serial.println("Parametri accettati 0-255");
cont = 0;
}
else {
time_pause = atoi(char_in);
}
}
cont = 0;
}
void pausa(){
delay(time_pause);
time_pause=0;
}
void clear_command(){
command = 0;
}
Ho corretto la parte riguardante la lettura dalla seriale. In questo modo è stato raggruppato il comando per l'impostazione del pwm perchè usava la stessa identica procedura! Ho portato la pulizia del comando ricevuto in una funzione, cos' da scriverlo una sola volta! In questo modo sono passato da circa 6,8k del primo sketch a 4.1k di questo!!