Buonasera a tutti, chiedo innanzitutto scusa se ho commesso errori palesi nel programma ma sono alle prime armi e ho cercato di confrontare varie fonti per capire come scriverlo; l'intenzione è quella di far accendere il led rosso di arduino collegato al pc quando il sensore di flessione raggiunge un certo valore e di tenerlo spento prima di quel valore...potreste dirmi cosa sbaglio perché il sensore o c'è o non c'è praticamente mi da lo stesso risultato, infatti il led non si accende nemmeno piegandolo...vi allego una foto per controllare se anche i contatti sono apposto...grazie per l'aiuto
int SensorPin = A0;
const int ledPin = 13;
int SensorValue = 0;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
SensorValue = map(analogRead(SensorPin),350,520,0,90);
if ((SensorValue == 0-SensorValue)) {
digitalWrite(ledPin, LOW);
}
if ((SensorValue == 90-SensorValue)) {
digitalWrite(ledPin, HIGH);
}
}
Per primo usa la seriale e il terminale del IDe per vedere che valori da il sensore.
int SensorPin = A0;
void setup() {
Serial.begin(9600); // open the serial port at 9600 bps:
}
void loop() {
Serial.println(analogRead(SensorPin));
}
Poi una condizione
if ((SensorValue == 0-SensorValue)) {
è molto pericolosa perché la condizione si avvera solo con un valore letto dal sensore (un valore su 1024 possibili).
È meglio usare le condizioni >, <, >= e <= . lascia via il Map che non Ti serve.
SensorValue = analogRead(SensorPin);
if ((SensorValue <= minimo)) {
digitalWrite(ledPin, LOW);
}
if ((SensorValue >= massimo)) {
digitalWrite(ledPin, HIGH);
}
I valori minimo e massimo sono i valori dove accendere/spegnere il LED.
Scegli dei valori non troppo vicini ai valori minimi/massimi che leggi sul sensore per avere un po di tolleranza/sicurezza.
Per esempio se leggi per esempio valori tra 300 e 600 usa come liniti 350 e 550.
grazie mille per la risposta, in effetti avevo sbagliato qualcosina con i contatti, inoltre ho aggiustato qualcosa nel programma come mi hai consigliato tu, anche se ho lasciato la funzione map perché per ora miro a capire le varie funzioni base...questo è il nuovo programma, adesso ho impostato che dopo i 30° il led si accende, inoltre controllando perfettamente i valori dal monitor seriale mi trovo...volevo chiederti un'altra informazione...prima di comprare questo sensore avevo letto che per farlo funzionare andava piegato solo in un determinato lato, ma testandolo ho constatato che piegandolo dall'altro lato mi restituisce valori negativi ma piuttosto imprecisi, quindi funziona alla fine dei conti??...inoltre non è che potrebbe danneggiarsi piegandolo da una parte piuttosto che dall'altra??
int SensorPin = A0;
const int ledPin = 13;
void setup() {
Serial.begin(9600); // open the serial port at 9600 bps:
pinMode(ledPin, OUTPUT);
}
void loop() {
int sensor, degrees;
sensor = analogRead(0); // read the voltage from the voltage divider (sensor plus resistor)
degrees = map(sensor, 768, 853, 0, 90); // convert the voltage reading to inches
// the first two numbers are the sensor values for straight (768) and bent (853)
// the second two numbers are the degree readings we'll map that to (0 to 90 degrees)
// print out the result
Serial.println(" analog input: ");
Serial.print(sensor,DEC);
Serial.print(" degrees: ");
Serial.println(degrees,DEC);
if ((degrees <= 30)) {
digitalWrite(ledPin, LOW);
}
if ((degrees > 30)) {
digitalWrite(ledPin, HIGH);
}
delay(500); // pause before taking the next reading
}