Buonasera a tutti,
ho un problema con il programma e un consiglio da chiedere,
praticamente il led "led3R", nello schetch che metto, mi fa dei lampeggi strani, lampeggia velocemente per circa mezzo secondo per poi fermarsi per un altro mezzo secondo e per poi ripartire, in piu ha una luce fiacca come se avesse il triplo di resistenza, se invece nello schetch elimino tutte le parti interessate al comando dei led mi rimane acceso ma sempre con la luce fiacca, se invece su un altro schetch accendo tutti led normalmente si accendono tutti senza problemi con la luce giusta quindi ho escluso il problema del collegamento elettrico, non riesco a venirne fuori aiutoo
Poi dovrei utilizzare un pulsante come interruttore, nello schetch non l'ho ancora messo ma dovrei "creare" due stati in cui uno fa tutto quello che c'é nello schetch mentre l'altro stato deve portarmi tutto in "standby" portando in una posizione definita i servo e spegnendo tutti i led, ho provato piu volte ma non funziona, secondo me sbagliavo qualcosa con il ritardo per il debounce, se potete aiutarmi a creare i due stati vi sarei grato
Ecco lo schetch, non insultatemi è il mio primo programma che faccio diverso dal "accendi spegni led", grazie
#include <Servo.h>
Servo servo1;
Servo servo2;
int val1=0;
int val2=0;
int val3=0;
int val4=0;
int toll1;
int toll2;
int toll3;
int toll4;
int grado1=90;
int maxGrado1=150;
int minGrado1=15;
int grado2=90;
int maxGrado2=180;
int minGrado2=0;
int pausa=12;
int T=50;
int TT=55;
int TTT=120;
int led3G=9;
int led3R=8;
int led3B=7;
int led2G=6;
int led2R=5;
int led2B=4;
int led1G=3;
int led1R=2;
int led1B=1;
int button=0;
long timeled=500;
long timeledbatt=200;
long tim;
int letturabatteria=5;
int batt;
long timbatt;
void setup() {
servo1.attach(10);
servo2.attach(11);
pinMode(led1B, OUTPUT);
pinMode(led1G, OUTPUT);
pinMode(led1R, OUTPUT);
pinMode(led2B, OUTPUT);
pinMode(led2G, OUTPUT);
pinMode(led2R, OUTPUT);
pinMode(led3B, OUTPUT);
pinMode(led3G, OUTPUT);
pinMode(led3R, OUTPUT);
pinMode(button, INPUT);
tim=millis();
timbatt=millis();
}
void loop() {
//gestione servo
val1=analogRead(A0);
val2=analogRead(A2);
val3=analogRead(A3);
val4=analogRead(A4);
toll1=abs(val1-val4);
toll2=abs(val3-val2);
toll3=abs(val1-val2);
toll4=abs(val4-val3);
if((toll1<T) && (toll2<T)) servo1.detach(); else servo1.attach(8);
if((toll3<T) && (toll4<T)) servo2.detach(); else servo2.attach(10);
if((val1>val4) && (toll1>TT)){
grado1++;
delay(pausa);
}
if((val2>val3) && (toll2>TT)){
grado1++;
delay(pausa);
}
if((val4>val1) && (toll1>TT)){
grado1--;
delay(pausa);
}
if((val3>val2) && (toll2>TT)){
grado1--;
delay(pausa);
}
if((val1>val2) && (toll3>TT)){
grado2--;
delay(pausa);
}
if((val4>val3) && (toll4>TT)){
grado2--;
delay(pausa);
}
if((val2>val1) && (toll3>TT)){
grado2++;
delay(pausa);
}
if((val3>val4) && (toll4>TT)){
grado2++;
delay(pausa);
}
//gestione led
if((toll1>TTT)||(toll2>TTT)||(toll3>TTT)||(toll4>TTT)){
if((millis() - tim)>=timeled){
digitalWrite(led2R, !digitalRead(led2R));
digitalWrite(led2G, LOW);
tim=millis();
}
}
else{
digitalWrite(led2G, HIGH);
digitalWrite(led2R, LOW);
}
if(grado1>maxGrado1) {grado1=maxGrado1;}
if(grado1<minGrado1) {grado1=minGrado1;}
if(grado2>maxGrado2) {grado2=maxGrado2;}
if(grado2<minGrado2) {grado2=minGrado2;}
servo1.write(grado1);
delay(pausa);
servo2.write(grado2);
delay(pausa);
//gestione led livello batteria
batt=analogRead(letturabatteria);
if((batt<=860) && (batt>=818)){
digitalWrite(led3B, HIGH);
digitalWrite(led3G, LOW);
digitalWrite(led3R, LOW);
}
if((batt<=847) && (batt>=777)){
digitalWrite(led3B, LOW);
digitalWrite(led3G, HIGH);
digitalWrite(led3R, LOW);
}
if((batt<=776) && (batt>=737)){
digitalWrite(led3B, LOW);
digitalWrite(led3G, HIGH);
digitalWrite(led3R, HIGH);
}
if((batt<=736) && (batt>=696)){
digitalWrite(led3B, LOW);
digitalWrite(led3G, LOW);
digitalWrite(led3R, HIGH);
}
if((batt<=695) && (batt>=10)){
if((millis() - timbatt)>=timeledbatt){
digitalWrite(led3R, !digitalRead(led3R));
digitalWrite(led3G, LOW);
digitalWrite(led3B, LOW);
timbatt=millis();
}
else{
digitalWrite(led3G, LOW);
digitalWrite(led3B, LOW);
digitalWrite(led3R, LOW);
}
}
if((batt<=9) && (batt>=0)){
digitalWrite(led3G, HIGH);
digitalWrite(led3B, HIGH);
digitalWrite(led3R, HIGH);
}
}