ciao, sto provando a realizzare un comando per l'accensione e lo spegnimento di un led... il punto è, che il led deve accendersi e spegnersi gradualmente dalla pwm controllato da un sensore crepuscolare
(potenziometro collegato all'analog 0). il circuito crepuscolare però deve poter essere bypassato da un pulsante che prende ''priorità'' e accende e spegne il led normalmente... sto provando da ore ma niente... qualche aiuto??? grazie mille
posta quello il codice che hai scritto fino ad ora cosi ti diamo una mano a modificarlo
grazie mille
ecco:
const int sensoreLucePin = 0;
const int buttonCortilePin = 9;
const int ledPinA = 3;
const int ledPinB = 5;
const int ledPinC = 6;
int buttonCortilePin = 9;
int sensoreLuceValue = 0;
int sensoreLuceMin = 0;
int sensoreLuceMax = 1023;
int buttonCortileCounter = 1;
int buttonCortileState = 0;
int lastButtonCortileState = 0;
void setup() {
pinMode(buttonCortilePin, INPUT);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
pinMode(5, OUTPUT);
digitalWrite(5, HIGH);
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
sensoreLuceValue = analogRead(sensoreLucePin);
if (sensoreLuceValue > sensoreLuceMax) {
sensoreLuceMax = sensoreLuceValue;
}
if (sensoreLuceValue < sensoreLuceMin) {
sensoreLuceMin = sensoreLuceValue;
}
digitalWrite (3, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
}
void loop() {
sensoreLuceValue = analogRead(sensoreLucePin);
sensoreLuceValue = map(sensoreLuceValue, sensoreLuceMin, sensoreLuceMax, 0, 255);
sensoreLuceValue = constrain(sensoreLuceValue, 0, 255);
analogWrite(ledPinA, sensoreLuceValue);
analogWrite(ledPinB, sensoreLuceValue);
analogWrite(ledPinC, sensoreLuceValue);
buttonCortileState = digitalRead(buttonCortilePin);
if (buttonCortileState != lastButtonCortileState) {
if (buttonCortileState == HIGH) {
buttonCortileCounter++;
}
lastButtonCortileState = buttonCortileState;
}
if (buttonCortileCounter % 2 == 0) {
}
else {
analogWrite(sensoreLuceValue,0);
}
}
prova con questo e dimmi magari ce qualche errorino dato che l'ho scritto al volo
int sensoreLucePin = 0;
int buttonCortilePin = 9;// normalmente a 0
int ledPinA = 3;
int ledPinB = 5;
int ledPinC = 6;
void setup() {
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinC, OUTPUT);
}
void loop() {
if(digitalRead(buttonCortilePin)==0){
analogWrite(ledPinA, (analogRead(sensoreLucePin)/4))
analogWrite(ledPinB, (analogRead(sensoreLucePin)/4))
analogWrite(ledPinC, (analogRead(sensoreLucePin)/4))}
else{
analogWrite(ledPinA, 255)
analogWrite(ledPinB, 255)
analogWrite(ledPinC, 255)
}
}
sensoreLuceValue = analogRead(sensoreLucePin);
if (sensoreLuceValue > sensoreLuceMax) {
sensoreLuceMax = sensoreLuceValue;
}
if (sensoreLuceValue < sensoreLuceMin) {
sensoreLuceMin = sensoreLuceValue;
}
questo è inutile perche il valore minimo non verrà m ai settato in quanto non puo scendere sotto 0 e il valore massimo aumneta solo di 1 (1024>1023 per farti capire)
per il resto ve bene anche se potresti provare a leggere il valore mapparlo con map() e controllare il tasto mettendolo a 1 o 0 senza fare tanti incrementi e poi accendere con analogwrite() il led.
tra 30 minuti poso il codice tempo di cambiare pc ed arrivare a casa
vi ringrazio per le risposte... allora per quanto riguarda quello che dice milionario ci ho già provato, ma niente... (forse sbaglio qualche passaggio)
ho provato il programma di camba e il crepuscolare è ok, solo che il pulsante non mantiene accese le luci, ma le accende solo durante la pressione... a me servirebbero fisse quando premi il pulsante...
tnks
allora dovrai modificare il codice per memorizzare l'ultimo stato del pulsante ed implementare un flip flop software.
P.S.
Per rimuovere l'overdrive manuale sarà necessario ripremere il tasto
emh :-?..... e come lo faccio un flip flop software? (scusate)
con una logica del tipo
se ultimostatopulsante = 0 allora statopulsante = 1
se ultimostatopulsante = 1 allora statopulsante = 0
prova cosi .. nn avevo capito come lo velevi
int sensoreLucePin = 0;
int buttonCortilePin = 9;// normalmente a 0
int ledPinA = 3;
int ledPinB = 5;
int ledPinC = 6;
int i=0;
void setup() {
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinC, OUTPUT);
}
void loop() {
if(i==0){
if(digitalRead(buttonCortilePin)==0){
analogWrite(ledPinA, (analogRead(sensoreLucePin)/4));
analogWrite(ledPinB, (analogRead(sensoreLucePin)/4));
analogWrite(ledPinC, (analogRead(sensoreLucePin)/4));}
else {
i=1;
}}
else{
analogWrite(ledPinA, 255);
analogWrite(ledPinB, 255);
analogWrite(ledPinC, 255);
if(if(digitalRead(buttonCortilePin)==0){
i=0;}
}
}
ok ragazzi tra una cosa e l'altra mi avete aiutato tantissimo.... ho solo un ultimo problema... avete presente il programma tra gli esempi ''tone melody'' ???
ecco, dovrei far partire la melodia premendo un pulsante (non interruttore) quindi forse bisogna fare un flip flop come diceva brain, e farla fermare ripremendo quel pulsante... qualche idea ???