Asynchrone Function - möglich?

Hallo,
ich probiere im Moment viel mit dem DuinoCoin AVR-Miner. Mein Problem ist, das ich gerne Musik auf dem gleichen Arduino abspielen würde, solange wie dieser einen Hash ausrechnet. Mein aktueller Code:

    uint32_t startTime = micros();
    digitalWrite(motorPin, HIGH);            //Hier sollte die Musik starten   (habe als Placeholder mal einen Motor reingepackt)
    // Call DUCO-S1A hasher
    ducos1result = ducos1a(lastblockhash, newblockhash, difficulty);
    // Calculate elapsed time
    uint32_t elapsedTime = micros() - startTime;
    digitalWrite(motorPin, LOW);             //Und hier stoppen

Wie kann ich das machen? Ich dachte an eine Function welche die Musik spielt und asynchron am Start ausgeführt wird. Die Function müsste eine while Schleife beinhalten welche beim Startpunkt auf True gestellt wird und beim Stoppunkt auf False (so habe ich es bereits in einem PythonScript gemacht).
Ist das umsetzbar?
Falls es wichtig ist: Ich habe einen Uno R3 (original)

Danke schonmal im Voraus für Hilfe :smiley:

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

@enzo1

Fragen die du beantworten könntest:
Wie viele Kerne hat dein Uno um etwas parallel laufen lassen zu können?
Wenn dein UNO nur einen Kern hat:
Ist dein ducos1a asyncron fähig?
Welcher player spielt Musik ab?
Ist dein Player asyncron fähig?

Hallo
Schleife ist sicher ganz schlecht. Du könntest über die Verwendung von einem DF Miniplayer nachdenken
Heinz

Danke

Kerne: Weiß ich nicht, deshalb habe ich das Model angegeben.
Player: Songs for Arduino - Dragão sem Chama wollte ich einen hiervon nehmen und reincoden.
ducos1a:

uintDiff ducos1a(String lastblockhash, String newblockhash,
                 uintDiff difficulty) {
  newblockhash.toUpperCase();
  const char *c = newblockhash.c_str();
  uint8_t final_len = newblockhash.length() >> 1;
  for (uint8_t i = 0, j = 0; j < final_len; i += 2, j++)
    job[j] = ((((c[i] & 0x1F) + 9) % 25) << 4) + ((c[i + 1] & 0x1F) + 9) % 25;

    // Difficulty loop
  #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
    // If the difficulty is too high for AVR architecture then return 0
    if (difficulty > 655) return 0;
  #endif
  Sha1_base.init();
  Sha1_base.print(lastblockhash);
  for (uintDiff ducos1res = 0; ducos1res < difficulty * 100 + 1; ducos1res++) {
    Sha1 = Sha1_base;
    Sha1.print(String(ducos1res));
    // Get SHA1 result
    uint8_t *hash_bytes = Sha1.result();
    if (memcmp(hash_bytes, job, SHA1_HASH_LEN * sizeof(char)) == 0) {
      // If expected hash is equal to the found hash, return the result
      return ducos1res;
    }
  }
  return 0;
}

Falls noch mehr Code notwendig ist: Es handelt sich um den offiziellen Duinocoin-miner.

Habe mir mal den Link aus Post 6 angesehen ... Es geht um eine Melodie, die per Tone() abgespielt wird ...

Die Anzahl der Kerne eines Uno lässt sich ja zum Glück an einem Finger abzählen.

Man muss dann also wohl

  • In die Duinocoinminer - loop() eine Routine einbauen, die das Abspielen unter zeitlicher Berücksichtigung der Pausen und Tondauern übernimmt,
  • oder das Abspielen mit einer Timerroutine takten.

Herzlichen Glückwunsch :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.