Casino Totale

...si, casino totale (...e non intendo il film parodia di casino royale!)
bensì il mio sketch che posto qui da voi:

 int valoretarato;

  for(int i = 0; i<=255; i++) 
  {
    spwm(i, Led_IR);
    delay(1);
    int sensorValue = digitalRead(Foto_TR);
    if (sensorValue == 1)
    {
      valoretarato = i;
    }
    digitalWrite(Led_IR, 0);
  }
  delay(500);
 Persistentspwm(i, Led_IR); //richiama funzione per pwm simulato 


//  setup_watchdog(9);
}


void loop() 
{ 
  if (f_wdt==1) 
  {  // wait for timed out watchdog / flag is set when a watchdog timeout occurs
    f_wdt=0;       // reset flag
    
    //CODE HERE
    
    unsigned long currentMillis = millis();
    int sensorValue = digitalRead(Foto_TR);
    sensorValue = !sensorValue;
      if (sensorValue == 1)
  {
    DOA++;
   if(DOA > 5)
  {
    analogWrite(Led_1, 64);
    analogWrite(Led_2, 255);
    delay(800);
    
    analogWrite(Led_1, 0);
    analogWrite(Led_2, 0); 
    }
  }

  if (DOA >= 5) 
  {
 //do something


  }
system_sleep(); //addormento il Tiny.

Il problema che devo risolvere è il seguente:

Allora: una volta calibrato il sensore come faccio nel setup(), devo leggerlo (e in questo caso invertire la sua uscita), ma proprio qui ci casca l'asino, ho collegato l'output del fotosensore al pin 3 (ovvero il 2) del mio attiny, e nel setup lo leggo come input...ecco lo schema usato:

Poi però una volta programmato l'attiny funziona in maniera "anomala"...sembra che il pin 2 (ovvero il 3) non riesca a leggere il mio input digitale...ho provato a cambiare tiny, ma nulla da fare, il problema persiste...

Avete idee?
...magari è una stupidata...ma ci ho perso l'intero pomeriggio...
Grazie.

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm.............mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm......................mmmmmmmmmmmmmmmmmmmmmmmmm

Basta.

Il codice dello scketch non è completo.

Leggi in digitale sul pin analogico, ma le tue intenzioni sono di leggere lo stato digitale o la variazioni analogiche sul pin A0 che si vengono a creare dovute al fatto che piloti il led in PWM. Il PWM a cosa ti serve, vuoi variare la luminosità del led interno a quel componente schematizzato in foto che sembra un accoppiatore ottico. No non penso perchè quel led è alimentato in modo fisso, quindi non ci sarà cambio di stato in uscita su A0, dove troverai sempre un livello LOW.

Spiega quali sono i tuoi obbiettivi.

Ciao.

Allora:

1.) piloto in pwm il pin del led ir del sensore finché il sensore non visualizzare dopo di che setto il led con la luminosità trovata.
2.) poi dal pin 3 di attiny leggo lo stato digitale del sensore...ma qui ho dei problemi

help!!! :roll_eyes:

Quel codice è incompleto.
Le info che dai sono inaccurate: parli di un "attiny" generico, quale? Parli di pin 3 poi però dici che è il 2 poi parli di A0.

http://arduino.cc/forum/index.php/topic,91560.0.html

Ecco la pedinatura del Tiny85:

Il pin2 è di fatto il PB3...ecco cosa intendevo dire.

hai qualche idea su come risolvere?

fardox:
1.) piloto in pwm il pin del led ir del sensore finché il sensore non visualizzare dopo di che setto il led con la luminosità trovata.

chi ci capisce è bravo ]:slight_smile:

Ripeto: lo sketch è incompleto.
Inoltre i dettagli che ci hai dato sul problema sono insufficienti. Ad esempio: come hai collegato il tutto?

Per favore, sii più preciso.

...è l'autocorrettore del telefono che ogni tanto scrive degli strafalcioni :smiley:

Allora, ecco lo sketch di prova completo, modificato e senza alcuni pezzi superflui:

const int Foto_TR = 3; //Pin Fototransistor
int UltimoStato_TR = LOW;
int StatoTR;
  int Number;
long lastDebounceTime = 0;
long debounceDelay = 100;
const int Led_1 = 0; //Pin PWM Attiny 
void setup() {
  // put your setup code here, to run once:
 pinMode(Foto_TR, INPUT); 
}

void loop() {

  
  
      int reading_Tr = digitalRead(Foto_TR);
    if (reading_Tr != UltimoStato_TR)
    {
      lastDebounceTime = millis();
      if (reading_Tr == LOW)
      {
        Number++;
      }
    }
    if ((millis() - lastDebounceTime) > debounceDelay)
    {
      StatoTR = reading_Tr;

    }  
    UltimoStato_TR = reading_Tr;

    for(int i = 0; i< Number; i++)
    {
      analogWrite(Led_1, 255);
      delay(300);
      analogWrite(Led_1, 0);
      
    
  }
 // delay(1000);
}

Il tutto è collegato in questo modo:
Ma invece che mandare l'output del sensore al pin A0 di arduino lo mando al pin PB3 del mio Tiny. nulla di complicato...

E quel sensore che cosa dà in output? Perché se nello schema lo collegano ad un pin analogico, tu quel pin lo leggi in digitale? Non è che forse la tensione che fornisce resta nel campo indefinito dei valori per cui l'Attiny non riesce a leggerlo come stato HIGH?

No, con arduino lo leggo correttamente in digitale, senza avere problemi...non so che fare

Sembra tutto giusto. D3 è il pin PB3. Hai provato a collegare direttamente il pin a VCC per vedere se il pin legge correttamente?

Si, lo legge correttamente!

fardox:
Si, lo legge correttamente!

Allora è il sensore.

io non capisco un paio di cose

  1. Nello schema il led e' collegato a +5V , ma forse e' connesso al pin0
  2. Non e' dichiarato il Pin0 come output
  3. Leggi il valore su pin3, che a occhio e' sempre HIGH
  4. accendi e spegni il LED
  5. Rileggi il valore sul pin3 ... che sara' sempre HIGH

Se invece il Led e' collegato a +5V
Leggi sempre LOW

...Ho risolto, il problema era dovuto dal fatto che nell'immagine il pin sul collettore del fototransistor non andava collegato ai 5V,

Gli altri problemi a livello di codice li sto piano piano risolvendo...Scusate se nelle spiegazioni sono stato "ambiguo" :smiley:

Grazie!

Per fortuna ha risolto da solo, perché sembrava "Mission Impossible". :grin:

PaoloP:
Per fortuna ha risolto da solo, perché sembrava "Mission Impossible". :grin:

Sí perché ha mantenuto in tutto il suo testo veritiero il titolo: "Casino Totale". :wink: :wink: :wink:
Ciao Uwe