Ecco il terzo post in neanche mezz'ora ;D
Allora, ho il seguente codice da me codato:
// Modello a due motori e tre sensori di ostacoli
// Utilizza una funzione random per scegliere se girare a destra o sinistra
#define MOTORED 3
#define MOTORES 2
#define LEDFUNZIONAMENTO 4
#define LEDMANUALE 5
#define LEDAUTOMATICO 6
#define LEDBUIO 7
int ostacolod = 0;
int ostacolos = 0;
int ostacolocentro = 0;
int buio = 0;
int manuale = 0;
void setup()
{
pinMode(MOTORED, OUTPUT);
pinMode(MOTORES, OUTPUT);
pinMode(LEDFUNZIONAMENTO, OUTPUT); //Led verde
pinMode(LEDMANUALE, OUTPUT); // Led giallo
pinMode(LEDAUTOMATICO, OUTPUT); // Led rosso
pinMode(LEDBUIO, OUTPUT);
Serial.begin(9600);
}
void loop()
{
ostacolod = analogRead(0);
ostacolos = analogRead(1);
ostacolocentro = analogRead(2);
buio = analogRead(3);
// controlla se deve essere autonomo
// o essere controllato tramite Wi-Fi
manuale = Serial.read();
if (manuale = 0) // Se il robot usa il suo cervello
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDAUTOMATICO, HIGH);
digitalWrite(LEDMANUALE, LOW);
digitalWrite(MOTORED, HIGH);
digitalWrite(MOTORES, HIGH);
Serial.println("Modalita' automatica attivata");
delay(50); // Anti-bouncing
if (ostacolocentro > 70)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDAUTOMATICO, HIGH);
digitalWrite(LEDMANUALE, LOW);
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, HIGH);
delay(1000);
}
/* Per ora non serve perchè ho un solo sensore posto davanti al robot
if (ostacolod > 70)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDAUTOMATICO, HIGH);
digitalWrite(LEDMANUALE, LOW);
digitalWrite(MOTORED, HIGH);
digitalWrite(MOTORES, LOW);
delay(1000);
}
if (ostacolos > 70)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDAUTOMATICO, HIGH);
digitalWrite(LEDMANUALE, LOW);
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, HIGH);
delay(1000);
}
if ((ostacolod > 70) && (ostacolos > 70))
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDAUTOMATICO, HIGH);
digitalWrite(LEDMANUALE, LOW);
randomSeed(analogRead(5));
rand = long random(0, 2);
if (rand = 0)
{
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, HIGH);
delay(1000);
}
if (rand = 1)
{
digitalWrite(MOTORED, HIGH);
digitalWrite(MOTORES, LOW);
delay(1000);
}
} */
}
if (manuale = 1) //Se il robot è controllato dall'esterno
{
Serial.println("Controllo manuale inserito, attendere la conferma");
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, LOW);
digitalWrite(LEDBUIO, LOW);
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDMANUALE, HIGH);
digitalWrite(LEDAUTOMATICO, LOW);
Serial.println("Motori arrestati. Adesso e' possibile controllare il robot manualmente");
}
if (manuale = 2)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDMANUALE, HIGH);
digitalWrite(LEDAUTOMATICO, LOW);
digitalWrite(MOTORED, HIGH);
digitalWrite(MOTORES, HIGH);
Serial.println("Motori inseriti manualmente");
}
if (manuale = 3)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDMANUALE, HIGH);
digitalWrite(LEDAUTOMATICO, LOW);
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, LOW);
Serial.println("Motori arrestati manualmente");
}
if (manuale = 4)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDMANUALE, HIGH);
digitalWrite(LEDAUTOMATICO, LOW);
digitalWrite(MOTORED, LOW);
digitalWrite(MOTORES, HIGH);
Serial.println("Il robot sta girando versa destra. Per fermarlo inserire il comando 'fermo' ");
}
if (manuale = 5)
{
digitalWrite(LEDFUNZIONAMENTO, HIGH);
digitalWrite(LEDMANUALE, HIGH);
digitalWrite(LEDAUTOMATICO, LOW);
digitalWrite(MOTORED, HIGH);
digitalWrite(MOTORES, LOW);
Serial.println("MIl robot sta girando versa sinistra. Per fermarlo inserire il comando 'fermo'");
}
}
Ma il led chiamato LEDFUNZIONAMENTO non vuol accendersi!!!! Come mai? L'ho anche sostituito, i fili sono ben inseriti, ma niente!!! Eppure è OUTPUT e va in HIGH quando necessario (cioè sempre, perchè mi deve indicare che il robot è acceso).