Hallo, ich bin neu hier, daher erstmal Hallo in die Runde! Also mein Problem ist folgendes: ich habe einen PC Speaker an einem Arduino Mega 2560 angeschlossen und er macht keinen Pieps. Konkret sieht es so aus: Ich habe mir einen Controller für mein Terrarium gebaut, gesteuert von dem erwähnten Arduino Mega mit Relaisboard, Sensoren, Schaltern etc. Und dem PC-Speaker für Warntöne. Ich habe für jede einzelne Funktion einen Unittest geschrieben (ein kleiner Sketch, der NUR die Einzelfunktion testet). Der Unittest für den PC-Speaker funktioniert wunderprächtig, er spielt eine kurze Melodie ab. Aber mit dem kompletten Produktions-Sketch macht der Speaker keinen Mucks. Ich habe schon versucht, den auf eine andere PIN zu stecken (vorher 23, jetzt 17), aber das bringt nix. Ich bin echt ratlos und könnte gut Hilfe brauchen. Der komplette Code ist bei Github einsehbar: https://github.com/TLINDEN/TerraDuino. Der Produktionssketch ist hier: https://github.com/TLINDEN/TerraDuino/blob/master/Terraduino/Terraduino.ino Dazugehörige Libraries: https://github.com/TLINDEN/TerraDuino/tree/master/libraries und der funktionierende Unittest ist hier: https://github.com/TLINDEN/TerraDuino/blob/master/unittests/UnitTestSpeaker/UnitTestSpeaker.ino Schaltplan meiner Platine (der Widerstand am PC-Speaker fehlt in dem Plan, der ist aber eingebaut!): https://github.com/TLINDEN/TerraDuino/blob/master/Images/terraduino-img.png und Erklärung dazu: https://github.com/TLINDEN/TerraDuino/blob/master/Schaltplan.txt. Ich weiss, das ist vielleicht alles ein wenig umfangreich, sorry. Aber eventuell hat ja jemand schonmal ein ähnliches Problem gehabt und kann mir weiterhelfen. Ansonsten noch zum Produktionssketch: der funktioniert vollständig, NUR der Speaker geht nicht. besten Gruss, Tom PS: ich möchte auch noch erwähnen, dass das mein erstes Elektronikprojekt ist, ich bis dato noch nie mit sowas zu tun hatte und auch eigentlich kein C/C++ Programmierer, sondern eher der Perl/Python Mensch bin. Falls sich da jemand über sicherlich kritisierbare Konstrukte in meinem Code wundern sollte :)
Tom L. schrieb: > Hallo, > > ich bin neu hier, daher erstmal Hallo in die Runde! > > Also mein Problem ist folgendes: ich habe einen PC Speaker an einem > Arduino Mega 2560 angeschlossen und er macht keinen Pieps. > > Konkret sieht es so aus: Ich habe mir einen Controller für mein > Terrarium gebaut, gesteuert von dem erwähnten Arduino Mega mit > Relaisboard, Sensoren, Schaltern etc. Und dem PC-Speaker für Warntöne. > Ich habe für jede einzelne Funktion einen Unittest geschrieben (ein > kleiner Sketch, der NUR die Einzelfunktion testet). Der Unittest für den > PC-Speaker funktioniert wunderprächtig, er spielt eine kurze Melodie ab. Schonmal gut. > Aber mit dem kompletten Produktions-Sketch macht der Speaker keinen > Mucks. Logischerweise macht das fertige Programm dann etwas anders als der Test. Entweder hast Du (oder eine der benutzten Libs) den Timer umkonfiguriert. Oder der Ton ist zu kurz um ihn hoeren zu koennen. Im fertigen Programm scheint mir der nur 4 ms lang zu sein (entgegen min. 125 ms im Test) - also das halte ich ja für etwas überoptimistisch, sind das überhaupt zwei volle Schwingungen?... ;-)
In der Tat sind 4ms arg kurz :) Also ich habs mal erhöht aber das bringt auch nix. Ich hab mal diese Funktion hier aufgerufen:
1 | void beep() { |
2 | Serial << "beep start: " << millis() << endl; |
3 | tone(speaker, NOTE_C4, 10000); |
4 | noTone(speaker); |
5 | Serial << "beep stop: " << millis() << endl; |
6 | }
|
Der sollte eigentlich für 10 Sekunden piepen. Aber die Ausgabe sieht so aus:
1 | beep start: 1863 |
2 | beep stop: 1864 |
Der hält sich in tone() also nur 1ms auf. Da muss also was anderes faul sein.
Ich hab das Problem gelöst, ich verwende jetzt nicht mehr die eingebaute tone() Funktion, sondern mache es manuell mithilfe dieser Methode: https://github.com/rynet/Arduino-Tone-Library/blob/master/toneLibrary.pde Das Problem mit tone() ist wohl, dass es die Hardware Timer benutzt, die in meinem Code auch von anderem Kram benutzt werden wie z.b. millis() etc.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.