Sensore di colore con Arduino: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
spiegazione del codice e descrizione del progetto |
codice |
||
Riga 84:
|}
<syntaxhighlight lang="arduino">
#define LED 2
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define R 11
#define B 9
#define G 10
#define Y 12
#define W 3
#define sensorOut 8
</syntaxhighlight>Dichiariamo gli OUTPUT e gli INPUT. Impostiamo nel setup sia S0 che S1 come "HIGH", per avere un segnale con frequenza non scalata e per avere una lettura al 100%.<syntaxhighlight lang="arduino">
void setup() {
Serial.begin(9600);
Line 109 ⟶ 110:
}
</syntaxhighlight>Impostiamo le tre variabili r, g, b, in cui andiamo a salvare i tempi di lettura. Per misurare l'onda quadra in uscita, invece di misurare la frequenza, teniamo conto del tempo e della lunghezza in cui il segnale di uscita è alto. Quindi imposto i pin S2 e S3, di volta in volta, per leggere un colore:
</syntaxhighlight><syntaxhighlight lang="arduino">▼
* Rosso (r): S2 LOW, S3 LOW;
* Verde (g): S2 HIGH, S3 LOW;
* Blue (b): S2 LOW, S3 HIGH;
unsigned long r, g, b;
void loop() {
Line 122 ⟶ 128:
digitalWrite(S3, HIGH);
b = pulseIn(sensorOut, LOW);
Serial.print("R=");▼
▲Serial.print("R=");
Serial.print(r);
Serial.print("\tGT=");
Line 131 ⟶ 135:
Serial.print(b);
</syntaxhighlight>Sottoponiamo al sensore dei colori campioni (rosso, verde, blu...) e vediamo i valori delle variabili, che vengono registrati sul monitor seriale. Impostiamo quindi con delle "if{}" e delle "else {}" i valori delle variabili per riconoscere ogni variazione di colore.<syntaxhighlight lang="arduino">
delay(
Serial.print("RED");
analogWrite(11, 255);
} else if((r <= 36)&&(g <= 45)&&(b <= 36)){▼
} else if((r <= 20 && r >= 18)&&(g <= 15 && g >= 13)&&(b <= 8 && b >= 6)){
Serial.print("BLUE");
analogWrite(9, 255);
} else if((r <= 35)&&(g <= 45)&&(b <= 40)){▼
Serial.print("GREEN");
analogWrite(10, 255);
} else {▼
} else if((r <= 14 && r >= 12)&&(g <= 17 && g >= 15)&&(b <= 8 && b >= 6)){
analogWrite(9, 0);▼
Serial.print("PURPLE");
analogWrite(10, 0);▼
analogWrite(11,
analogWrite(9, 255);
} else if((r <= 4 && r >= 3)&&(g <= 7 && g >= 5)&&(b <= 10 && b >= 8)){
Serial.print("YELLOW");
analogWrite(12, 255);
Serial.print("WHITE");
analogWrite(3, 255);
} else if((r <= 9 && r >= 8)&&(g <= 21 && g >= 18)&&(b <= 21 && b >= 19)){
Serial.print("ORANGE");
analogWrite(12, 255);
analogWrite(11, 255);
▲ analogWrite(9, 0);
▲ analogWrite(10, 0);
analogWrite(11, 0);
analogWrite(3, 0);
analogWrite(12, 0);
}
}
</syntaxhighlight>
== Espansioni suggerite ==
|