Arduino If Abfrage?
Hey Leute ich will mit meinem Arduino einen Lautsprecher so schalten dass der Lautsprecher so lange an ist wie ich den Knopf drücke ich wollt noch fragen wie ich eine If abfrage stellen kann damit ich meinem Arduino sagen kann dass wenn der Knopf gedrückt ist der Lautsprecher angehen soll. wie mache ich das?
Bitte wenn möglich in Form von einem Code und den dann erklären
Freundliche Grüsse Luegu
3 Antworten
Irgendwie erschließt sich mir der Sinn eines Arduinos in deinem Vorhaben nicht ganz, du willst das High-Signal eines Tasters dazu nutzen um ein exakt identisches High-Signal am Arduino auszugeben.
Am besten ist immer erst mal den bisherigen Code hier zu posten.
Die Referenz des Arduino ist eigendlich selbsterklären und es gibt genug beispiele dabei. Wie erzeugst Du den Ton denn, den du ausgeben willst? Es ist ja nicht nur damit getan, einen Ausgang auf HIGH zu schalten, damit ein Lautsprecher was macht, sondern du musst eine Frequenz erzeugen. Machst Du das mit "Tone"?
If (Taster == High){
"Befehl für Tonausgabe hier einfügen"
}
else
{
"Tonausschaltbefehl"
}
wäre die ungefähre Schreibweise, was Du suchst...
Erst mal, hast Du überhaupt schon einen Code geschrieben? Also Ein/Ausgangspins definiert ect? Dein bisheriger Code wäre dann immernoch hilfreich...
Dann weiß ich, ob Du nur den Befehl noch brauchst, oder auch die ganzen anderen Definitionen.... Also einmal den Sketch kopieren und hier einfügen, den Du schon hast. Bitte mit den Texttool für CODE, wie ich das auch gemacht habe. Ist übersichtlicher...
Bis jetzt hab ich das:
#define BEEP 12
#define BUTTON 16
void setup()
{
pinMode(12, OUTPUT);
pinMode(16, INPUT);
}
void loop()
{
}
Wenn Du Namen definierst, musst Du nicht mehr die Nummern angeben, sondern kannst auch mit den Namen arbeiten... Nur nebenbei...
#define BEEP 12
#define BUTTON 16
void setup()
{
pinMode(12, OUTPUT);
pinMode(16, INPUT);
}
void loop()
{
if (BUTTON == HIGH){
tone(BEEP, 3000);
}
else
{
noTone(BEEP);
}
}
Du kannst statt BEEP und BUTTON auch die Nummern der Pins schreiben, wenn Dir das besser gefällt...
Glaube, für tone() brauchst Du keinen Ausgang definieren, zumindest im Beispiel ist das nicht gemacht. Demnach müsstest Du nur den Eingang definieren...
Man sollte nicht paar sachen gleichzeitig machen.. Hab nen dicken Fehler im Code... (digitalRead vergessen)
#define BEEP 12
#define BUTTON 16
void setup()
{
pinMode(16, INPUT);
}
void loop()
{
if (digitalRead(BUTTON == HIGH)){
tone(BEEP, 3000);
}
else
{
noTone(BEEP);
}
}
So sollte es passen... BEEP als Output musst Du nicht im Setup festlegen... tone setzt den automatisch als Ausgang... Wenn BEEP nicht reagiert, musst Du ggf statt BEEP bei tone und noTone die Ziffer 12 eintragen... Hab mit #define noch nicht gearbeitet. Ka, ob das so auch geht... Fehler gibt es zumindest keine
Ok danke viel mal ich probiers direkt mal aus :D
So piept der "Tonerzeuger einfach ununterbrochen und der Knopf macht farnichts liegt das dann an der Verkabelung?
Das hat mit Dumm gar nichts zu tun. Es fehlen nur die Grundlagen, da DU ein paar Schritte überspringst... Meist fängt man an, und lernt erst mal die Grundlagen (Am besten mit einem Tutorial, das Schritt für Schritt die Funktionen und Besinderheiten erklärt)
Machen wir es kurz. Ein nicht beschalteter Eingang hat beim Arduino und anderen Mikrokontrollern keinen definierten Zustand. Wenn Du also einen Taster von + zum Eingang schaltest, ist der Eingang HIGH wenn Du den Taster drückst, lässt Du ihn los, ist er alles, nur nicht mehr HIGH oder LOW. Der reagiert auf alles. Deshalb nimmt man einen Widerstand und schaltet den Eingang damit auf Masse. Dann ist er immer LOW bis der Taster gedrückt wird.
Hat man keinen Widerstand, kann man sich eines Tricks bedienen (eig immer besser). Man definiert den Eingang mit "INPUT_PULLUP" als HIGH. Es wird intern ein Widerstand geschaltet, damit der Eingang immer HIGH ist, ohne das was angeschlossen ist. Den Taster schaltet man zwischen Masse und Eingang. Drückt man ihn, ist der EIngang dann LOW, lässt man ihn los, ist er wieder HIGH. Man muss nur dran denken, das man LOW abfragen muss, weil bei Betätigung eben der Eingang von 5V (3,3V je nach Typ) auf Masse gezogen wird.
Also Taster auf Minus bzw Masse legen und das andere Ende an den Eingang 16. Dann den neuen Code verwenden: (Hab Dir mal Anmerkungen mit reingeschrieben, um die Schritte besser zu verstehen)
#define BEEP 12 //Pin12 wird der Name BEEP zugewiesen
#define BUTTON 16 //Pin16 wird der Name BUTTON zugewiesen
void setup()
{
pinMode(16, INPUT_PULLUP); //Pin16 wird als Eingang definiert und der interne Widerstand aktiviert
}
void loop()
{
if (digitalRead(BUTTON == LOW)){ //prüft Eingang auf LOW-Signal (Taster wurde gedrückt und schaltet auf Masse)
tone(BEEP, 3000); // Tone wird auf BEEP (Pin12) ausgegeben, und zwar mit 3000Hz)
}
else // Wenn die Bedingung nicht erfüllt ist, wird stattdessen folgender Befehl ausgegeben
{
noTone(BEEP); //BEEP wird deaktiviert, die Tonausgabe stoppt
}
}
Welches Modell von Arduino. Es gibt viele Modelle vom Arduino (Nano, Mega, etc.)
Ich glaube nano also ich habe bei Werkzeuge das Board adafruit Feather HUZZA esp8266 ausgewählt und da kann ich meine Codes hochladen mit
Ich habs net gekauft sondern von nem Informatiker in nem Plastiksack geschenkt bekommen mit ein wenig Zubehör
Also ich hab nur so nen Piepteil das nur einen Ton erzeugen kann wie is da der Befehl um den einzuschalten?
sry für meine Unwissenheit aber ich hab erst gestern damit angefangen