Go Down

Topic: Programmare Digispark Attiny85 con progetto Clapper (Read 47 times) previous topic - next topic

brunosso

Mar 27, 2015, 04:46 pm Last Edit: Mar 27, 2015, 04:47 pm by brunosso
Salve a tutti! Ho un piccolo problema a cui non riesco a venire a capo!
Ho finalmente sistemato il progettino del Clapper, con lo script seguente. Utilizzo un microfono adafruit per leggere il rumore (http://www.adafruit.com/products/1063), ed una schedina relè per attivare o meno la luce!

Premetto che su Arduino UNO tutto funziona a meraviglia, volevo riportare il progetto su una scheda attiny85 della digispark questa:


Ho modificato il codice per adattarlo alla nomenclatura della digispark (https://digistump.com/wiki/digispark/tutorials/basics), ma quando collego l'alimentazione si accende solamente un led rosso e stop. Non accade nulla!

Penso che sia un problema di codice, nel senso che avrà qualche limitazione l'attiny85 per cui questo script non è in grado di eseguirlo.
Ho caricato un semplice script per accendere un led ogni secondo, e funziona!

Potete aiutarmi?

Code: [Select]
const int soglia = 550; // soglia: valore oltre al quale considerare l'impulso sonoro
float valoreSensore = 0;
double elenco[2]; // Sette battiti sono la sequenza che attiva il LED (0-2)
double lastSound; // Dopo alcuni secondi di silenzio, cancella la sequenza

void setup()
{
  pinMode(1, OUTPUT); // Dichiaro ledPin come OUTPUT
  pinMode(5, INPUT);
}

void loop()
{
  float valoreSensore = analogRead(0);
  if (valoreSensore >= soglia)
  {
    registraBattito(); // Registro in elenco il momento in cui viene avvertito il battito
    valutaSequenza(); // Controllo se la sequenza e' completa
    delay(100);  // Aspetto per non sovraccaricare il buffer della porta seriale
  }
  // Sequenza cominciata ma oltre 2 secondi di silenzio: resetto
  if ( elenco[0] && millis() - lastSound > 2000 ) {
    resetta();
  }
}

// Registro il momento in cui viene avvertito il colpo
void registraBattito()
{
  double time = millis();
  lastSound = millis();
  if ( elenco[0] == 0 ) {
    elenco[0] = time;
    return;
  }
  if ( elenco[1] == 0 ) {
    elenco[1] = time;
    return;
  }
}

void valutaSequenza()
{
  // Se c'e' il numero corretto di battiti registrati
  if ( elenco[1] > 0 )
  {
    // Verifica il "ritmo" della sequenza di battiTO
    if ( elenco[1] - elenco[0] >= 200 && elenco[1] - elenco[0] <= 450 ) // 250
      success();

    // Resetto l'elenco ogni volta che ha registrato 2 battiti
    resetta();
  }
}

void resetta()
{
  for ( int n = 0; n <= 1; n++ ) {
    elenco[n] = 0;
  }
}

// Sequenza corretta: il LED si accende
void success()
{
  if (digitalRead(1) == HIGH) {
    digitalWrite(1, LOW);
  }
  else {
    digitalWrite(1, HIGH);
  }
}

nid69ita

#1
Mar 27, 2015, 06:56 pm Last Edit: Mar 27, 2015, 07:06 pm by nid69ita
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili

La Digispark richiede un IDE con delle aggiunte. Qui nel loro wiki una spiegazione dei pin:
http://digistump.com/wiki/digispark/tutorials/connecting

Purtroppo non viene detto cosa usare per la analogRead.  Non è detto che con 0 come parametro sia giusto.
Il prodotto NON è Arduino, secondo me troverai più informazioni sul loro wiki e sul loro forum.

EDIT: qui un esempio chiarificatore (vedi sezione relativa ad analogRead):
https://digistump.com/wiki/digispark/tutorials/basics
my name is IGOR, not AIGOR

brunosso

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili

La Digispark richiede un IDE con delle aggiunte. Qui nel loro wiki una spiegazione dei pin:
http://digistump.com/wiki/digispark/tutorials/connecting

Purtroppo non viene detto cosa usare per la analogRead.  Non è detto che con 0 come parametro sia giusto.
Il prodotto NON è Arduino, secondo me troverai più informazioni sul loro wiki e sul loro forum.

EDIT: qui un esempio chiarificatore (vedi sezione relativa ad analogRead):
https://digistump.com/wiki/digispark/tutorials/basics
Grazie mille della risposta, e mi spiace se non l'ho fatto prima! Mi sono presentato!

Cmq per l'IDE non è necessario ormai, in quanto hanno sviluppato un pacchetto aggiuntivo, che va ad aggiungere il supporto hardware all'IDE di default di Arduino. (con l'aggiunta di una nuova cartella nella sottocartella "hardware").

Per escludere eventuali problemi di questa schedina, volevo sapere se prendo un semplice attiny85 a 8 piedini, gli carico lo schetch e funziona o meno. Ci sono accortezze sul codice quando si carica lo stesso su un attiny85? (a parte l'impossibilità di usare il monitor seriale che già so)

nid69ita

Per l'IDE mi sono espresso male, intendevo l'aggiunta di digispark. 
E quell'aggiunta all'hardware NON è il core per gli attiny che trovi qui:
https://code.google.com/p/arduino-tiny/
Per programmare gli attiny devi aggiungere quel core dal link. Quindi mi paiono core diversi rispetto a quelli digispark.
Di più non ti saprei dire però. Sorry
my name is IGOR, not AIGOR

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy