Ciao a tutti, forse questo post non è così importante, non ho ancora avuto problemi con arduino visto che faccio cose semplici, ma dato che non ho mai avuto a che fare con la programmazione vorrei che qualcuno critichi il mio primo progetto.
Ho fatto un banalissimo inseguitore di fonti luminose dopo aver visto un breve video su youtube di un ragazzo che aveva fatto lo stesso. Non ho guardato da nessuna parte per cercare esempi e suggerimenti (tranne per l'utilizzo della libreria servo) perchè (non è bello da dire) non ci capivo niente! Quindi a scuola invece di seguire le interminabili lezioni di latino ho buttato giù un'idea che poi a casa (invece di STUDIARE latino) si è rivelata funzionante.
La scheda è un arduino UNO r3, ho messo 2 fotoresistenze in modo che le facce non stiano sullo stesso piano ma siano inclinate con un angolo all'incirca di 90° e in fine le ho montate su di un servo (hitec hs81).
Lo sketch credo sia un miracolo, dato che è in assoluto la prima cosa che scrivo:
#include <Servo.h>
Servo hitec;
int time = 7;
int err = 30; //metà dello scarto tra il valore di un resistore e dell'altro prima che il servo si debba muovere
int stangle = 2; //passo minimo che compie il servo, in questo caso 2/180
void setup()
{
hitec.attach(3);
}
void loop()
{
int value1 = analogRead(A1);
int value2 = analogRead(A0);
int angle = hitec.read();
if (value1 > value2 + err)
{ hitec.write( angle - stangle); delay(time);}
else if (value1 < value2 - err)
{ hitec.write( angle + stangle); delay(time);}
else
{}
delay(2);
}
sicuramente non ha una grande logica e vorrei sapere come è impostato, se presenta cose inutili o passaggi azzardati. Insomma vorrei che qualcuno si dica professore e mi corregga!
Grazie, e abbiate pazienza
LApo
Cerca di non mettere più di 1 istruzione per riga, il codice si legge meglio.
Evita anche le cose inutili, ad esempio hai messo un if con un else..if ed un else finale vuoto. Toglilo, non serve a nulla nel tuo codice.
Ciao LapoSka
Non so quanto pallosa possa essere una lezione di latino (non ho mai studiato il latino) ma purtroppo per il Tuo interesse il latino é una cosa che Ti serve per passare la scuola e terminarla con la maturitá. Percui sí; arduino é interessate, ma dopo i Tuoi obblighi scolastici da buon alunno. so di essere palloso ma Tu hai chiesto un aiuto/critica.
Il tuo codice come logica é buona. Ci sono alcuni piccoli difetti. Leo Ti ha fatto vedere giá alcuni.
void loop()
{
int value1 = analogRead(A1);
int value2 = analogRead(A0);
int angle = hitec.read();
La definizione dei tipi di variabili non é opportuno ripeterla a ogni passaggio del loop(). Nel Tuo Sketcho cambia poco, ma normalmente vuoi tenere i valori tra un passaggio del loop a quello sucessivo.
Se scrivi int a ogni esecuzione del loop() crei una variabile nuova che esiste solo all' interno di quella esecuzione del loop. È un discorso dei variabili globali e variabili locali. http://www.diit.unict.it/users/michele/didattica/fondamenti/fondamenti/lingC_var.html
Metti la definizione di queste variabili fuori dal setup() e loop() e lacia nel loop()
#include <Servo.h>
Servo hitec;
int time = 7;
int err = 30; //metà dello scarto tra il valore di un resistore e dell'altro prima che il servo si debba muovere
int stangle = 2; //passo minimo che compie il servo, in questo caso 2/180
int value1 ;
int value2 ;
int angle = 90; posiziona il servo centralmente all'inizio dello sketch
void setup()
{
hitec.attach(3);
hitec.write( angle); //posizione di partenza del servo
delay(time);
}
void loop()
{
value1 = analogRead(A1);
value2 = analogRead(A0);
if (value1 > value2 + err)
{
angle -= stangle;
}
else if (value1 < value2 - err)
{
angle += stangle;
}
hitec.write( angle - stangle);
delay(time);
}
hahaha il latino è fico e puo essere interessante ma se pensi che facciamo 3 ore di matematica a settimana e ben 7 ore tra italiano e latino e nemmeno una di informatica.. è poco gradevole dato che è un liceo scientifico. Vabbè..
Ok, il fatto di scrivere un'istruzione per riga, non credevo cambiasse qualcosa.
ho letto la guida per il c che suggerisce il sito ( C (linguaggio): tutorial per imparare programmare | Guida HTML.it ) questa cosa mi è sfuggita e credevo che un if dovesse avere perforza un else al seguito. Per quanto riguarda le definizioni delle variabili, grazie uwe adesso è tutto più chiaro. Ho caricato lo sketch corretto e funziona, apparentemente come prima o forse poco piu veloce (ma probabilmente mi sbaglio).
ciao ciao, grazie davvero,
LApo
p.s. vi scoccia se in futuro posto sempre qui altri progetti che dovranno essere corretti?