Guten Tag Habe mir diesen Sketch ( http://www.mpmab.com/private/projects/styled-12/styled-4/index.html ) zum Vorbild genommen. Wollte aber nicht das der Ablauf einfach so losgeht, also wenn er vom Empfänger Strom bekommt, sondern über einen anderen Schalter der auch am RC-Empfänger ist // RC-Maßstab int rc_pin = 2 ; Int rc_pin = 3 ; 2 ist dann für die Sound Veränderungen zuständig 3 soll jetzt denn Sketch starten U. auch ausschalten. Wie könnte ich das umschreiben? Erst die SD einlesen lassen bis : Serial . println ( "SD ok" ); Dann vielleicht mit pinMode u. digitalread (high, low) davor einsetzen, das ich es mit rc_pin 3 starten kann (Start. wav) Dann weiter mit denn ersten Sound play init. wav O. Wie sonst?
:
Verschoben durch Moderator
Das ist aber extrem ungeschickt programmiert:
1 | 43: throttle = (duration - 700) / 16; |
2 | 44: |
3 | 45: //Set new throttle value |
4 | 46: if(throttle <= 25){ |
5 | 47: currThrottle = 1; |
6 | 48: }; |
7 | 49: if((throttle >= 25) && (throttle <= 50)){ |
8 | 50: currThrottle = 2; |
9 | 51: }; |
10 | 52: if((throttle >= 50) && (throttle <= 75)){ |
11 | 53: currThrottle = 3; |
12 | 54: }; |
13 | 55: if(throttle >= 75){ |
14 | 56: currThrottle = 4; |
15 | 57: }; |
Denn bei den Werten 25, 50 und 75 treffen jeweils zwei Bedingungen zu. Ausserdem könnte man das so verkürzen:
1 | currThrottle = 1+ (duration - 700) / 400 |
Und für den Code dahinter hätte ich switch/case verwendet, aber das ist Geschmacks-Sache. Zu deiner Frage: Ich habe sie nicht verstanden, fürchte ich. Dieser Sketch scheint vier unterschiedliche Sounds abzuspielen, je nach Einstellung des Steuerknüppels. Wenn du zusätzlich einen anderen Schalter von der Fernbedienung auswerten möchtest, musst den entsprechenden Ausgangskanal des Empfängers auswerten. Also brauchst du eine zweite Signal-Leitung zum Empfänger und einen zweiten Aufruf von pulseIn() mit der entsprechenden Pin-Nummer. Abhängig von dem Ergebnis könntest du dann den Rest des Programms ausführen. Etwa so:
1 | int rc_pin = 2; |
2 | int rc_pin_button = 3; |
3 | ...
|
4 | |
5 | void playsound() |
6 | {
|
7 | ... // hier kommt alles rein, was vorher in loop() war. |
8 | }
|
9 | |
10 | |
11 | // neue loop:
|
12 | |
13 | void loop() |
14 | {
|
15 | noInterrupts(); |
16 | duration = pulseIn(rc_pin_button, HIGH); |
17 | interrupts(); |
18 | |
19 | if (duration > 1800) |
20 | {
|
21 | playsound(); |
22 | }
|
23 | }
|
Ja, der Code spielt 4 verschiedene Sounds ab bei 4 verschiedene Stellung des Knüppels. Das wird alles über ein Kanal abgenommen Ich möchte denn Code so abspielen dass der Code nicht nach ein paar Sec. automatisch startet sondern über einen anderen Kanal/Taster startet. Der sollte ein Startsound abspielen U. Dann danach über die Knüppelstellung Sounds ausgeben. Beim beenden des Codes soll am besten ein Endsound abspielen U. ausgehen. Also soll der neue Kanal/Taster:: High : Startsound Neutral : Knüppelstellung anderer Schalter Low : Endsound
Einen Ansatz dazu hast du ja jetzt. Nun musst du nur noch die Wiederholschleifen so anordnen, wie du es haben willst.
Marcel T. schrieb: > 3 soll jetzt denn Sketch starten U. auch ausschalten. Der Code im Mikrocontroller läuft immer, solange er sich nicht im Sleep-State befindet. Das gilt damit auch für ein Programm, dass du als Arduino Sketch draufgespielt hast.
Also wenn ich das richtig verstanden habe Das es nicht automatiach Startet muss ich einsetzen:
1 | void loop() |
2 | {
|
3 | noInterrupts(); |
4 | duration = pulseIn(rc_pin_button, HIGH); |
5 | interrupts(); |
6 | |
7 | if (duration > 1800) |
8 | {
|
9 | playsound(); start.wav |
10 | }
|
11 | }
|
Das ich es über denn Schalter wieder ausschalten kann
1 | void loop() |
2 | {
|
3 | noInterrupts(); |
4 | duration = pulseIn(rc_pin_button, LOW); |
5 | interrupts(); |
6 | |
7 | if (duration > 1800) |
8 | {
|
9 | playsound(); stop.wav |
10 | }
|
11 | }
|
:
Bearbeitet durch Moderator
Ich glaube, du solltest erst die Grundlagen der Programmiersprache C anhand eines Tutorials lernen und dann dass bisschen C++ das Arduino verwendet. Sonst fehlt und hier die gemeinsame Sprache, auf der wir aufbauen können.
Naja ganz Unwissen bin ich nicht. Kann bis jetzt Licht steuern o. a einzelne Töne abspielen Aber mit Sounds abspielen die mit verschiedene Schaltstellungen funktionieren kenne ich mich net so gut aus Wo kann man so ein Tutorial anschauen?
> Wo kann man so ein Tutorial anschauen? Du hast selbst ein Beispielprogramm herausgesucht, welches mit pulseIn(pin,HIGH) die Position der Steuerknüppel ausliest und abhängig davon unterschiedliche Sound-Files mit tmrpcm.play(dateiname) abspielt. Dazu kann ich Dir noch sagen, dass die Pulse vom Fernsteuer-Empfänger normalerweise zwischen 1000 und 2000 Millisekunden lang sind. Wobei 1500 als optimaler Mittelwert festgelegt ist. In der Realität weichen die Steuerknüppel immer ein bisschen davon ab, deswegen kann man das an den meisten Fernbedienungen fein-justieren. Bei Schaltern und Tastern erzeugen die Fernbedienungen einfach kurze Impulse (<1500ms) für "aus" und lange Impulse (>1500ms) für "an". Eventuell willst du noch die Funktion millis() verwenden, um Zeiten zu messen oder um Dinge erst nach Ablauf einer gewissen Zeit zu machen. Mit Serial.println(text) kannst du Debug-Meldungen ausgeben. Damit hast du alles, was du brauchst. Der Rest ist C und ein klitze-kleines bisschen von C++. Wobei der C++ Anteil einfach und offensichtlich ist, dass du für dieses Projekt keine C++ Anleitung benötigst. ( Serial.println("Hallo") ist bereits C++ Ausdruck ). Das von Dir gesuchte Tutorial hast du somit direkt vor der Nase. Wenn du das noch nicht verstehst, dann musst du entweder die Programmiersprache erlernen (kann ich schlecht einschätzen) oder erst einmal mit einfacheren Aufgaben üben. Typischerweise fängt man damit an, eine LED blinken zu lassen. Als nächsten Schritt könntest du versuchen, die beiden Kanäle vom R/C Empfänger mit pulseIn(pin,HIGH) einzulesen und den gemessenen Wert (das sind die Millisekunden) als Debug Meldung auszugeben. Als drittes spielst du einen Sound ab, wenn ein R/C Kanal einen Wert >1700 liefert. Taste Dich langsam Schritt für Schritt bis zum Ziel vor. Es ist keine Schande, wenn man fremde Programme nicht versteht. Diese zu verändert macht vorher allerdings keinen Sinn. Da ist es oft einfacher, ein eigenes Programm aufzubauen und nur kleine Details vom fremden Programm abzugucken.
Hallo, so habe jetzt mich viel belesen u. einen Sketch geschreiben/umgearbeitet. aber leider spielt er aber es immer noch nicht richtig ab. Der abstell.wav wird richtig abgespielt, immer wenn ich dem Sender aus mache. der anlass.wav wird nur einmal abgespielt, wenn ich denn Empfänger an mache, also hat nix mit denn Sender zutun. wenn ich es zum zweiten mal anschalte spielt er sofort die 1.wav ab. wie kann ich das umschreiben das die anlass.wav auch immer beim anschalten des Senders angeht u. danach dann erst 1.wav abspielt? Mir wurde aber auch noch besser gefallen das ich anlass u. abstell.wav über einen anderen Schalter ein u. ausschalten kann. Geht das auch? Sketch:
1 | #include <SD.h> // need to include the SD library |
2 | #define SD_ChipSelectPin 4 //using digital pin 4 on arduino nano 328, can use other pins
|
3 | #include <TMRpcm.h> // also need to include this library... |
4 | #include <SPI.h> |
5 | |
6 | TMRpcm tmrpcm; // create an object for use in this sketch |
7 | |
8 | unsigned long time = 0; |
9 | int numLoop = 0; |
10 | int throttle = 0; |
11 | int prevThrottle = 0; |
12 | int currThrottle = 0; |
13 | int playingSound = 0; |
14 | |
15 | //RC scale
|
16 | int rc_pin = 2; |
17 | unsigned long duration; |
18 | unsigned long prevDuration; |
19 | |
20 | |
21 | void setup() { |
22 | tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc |
23 | Serial.begin(9600); |
24 | if (!SD.begin(SD_ChipSelectPin)) { |
25 | Serial.println("SD fail"); |
26 | return; // don't do anything more if not |
27 | }
|
28 | else { |
29 | Serial.println("SD ok"); |
30 | }
|
31 | //PLay init file to tell sound version
|
32 | Serial.println("anlass.wav"); |
33 | tmrpcm.play("anlass.wav"); |
34 | while (tmrpcm.isPlaying()) { |
35 | delay(2000); |
36 | };
|
37 | Serial.println("setup end"); |
38 | }
|
39 | |
40 | void loop() { |
41 | |
42 | //Read throttel value
|
43 | ++numLoop; |
44 | if (numLoop == 30000) { |
45 | noInterrupts(); |
46 | duration = pulseIn(rc_pin, HIGH); |
47 | interrupts(); |
48 | |
49 | numLoop = 0; |
50 | Serial.println(currThrottle); |
51 | //Set new throttle value
|
52 | |
53 | if (duration <= 990) { |
54 | currThrottle = 0; |
55 | };
|
56 | if ((duration > 990) && (duration <= 1050)) { |
57 | currThrottle = 1; |
58 | };
|
59 | if ((duration > 1050) && (duration <= 1167)) { |
60 | currThrottle = 2; |
61 | };
|
62 | if ((duration > 1167) && (duration <= 1332)) { |
63 | currThrottle = 3; |
64 | };
|
65 | if ((duration > 1332) && (duration <= 1498)) { |
66 | currThrottle = 4; |
67 | };
|
68 | if ((duration > 1498) && (duration <= 1664)) { |
69 | currThrottle = 5; |
70 | };
|
71 | if ((duration > 1664) && (duration <= 1830)) { |
72 | currThrottle = 6; |
73 | };
|
74 | if (duration > 1830) { |
75 | currThrottle = 7; |
76 | };
|
77 | |
78 | //If currThrottle != prevThrottle set start playing new file
|
79 | if (currThrottle != prevThrottle) { |
80 | |
81 | if ((currThrottle == 0) && (prevThrottle > 0)) { |
82 | tmrpcm.play("abstell.wav"); |
83 | Serial.println("abstell.wav)"); |
84 | while (tmrpcm.isPlaying()) {} |
85 | prevThrottle = currThrottle; |
86 | }
|
87 | if (currThrottle == 1) { |
88 | if (currThrottle > prevThrottle) { |
89 | tmrpcm.play("anlass.wav"); |
90 | Serial.println("anlass.wav"); |
91 | while (tmrpcm.isPlaying()) {} |
92 | }
|
93 | playingSound = 1; |
94 | prevThrottle = currThrottle; |
95 | }
|
96 | if (currThrottle == 2) { |
97 | tmrpcm.play("1.wav"); |
98 | Serial.println("1.wav"); |
99 | prevThrottle = currThrottle; |
100 | playingSound = 1; |
101 | }
|
102 | if (currThrottle == 3) { |
103 | tmrpcm.play("2.wav"); |
104 | Serial.println("2.wav"); |
105 | prevThrottle = currThrottle; |
106 | playingSound = 2; |
107 | }
|
108 | if (currThrottle == 4) { |
109 | tmrpcm.play("3.wav"); |
110 | Serial.println("3.wav"); |
111 | prevThrottle = currThrottle; |
112 | playingSound = 3; |
113 | }
|
114 | if (currThrottle == 5) { |
115 | tmrpcm.play("4.wav"); |
116 | Serial.println("4.wav"); |
117 | prevThrottle = currThrottle; |
118 | playingSound = 4; |
119 | }
|
120 | if (currThrottle == 6) { |
121 | tmrpcm.play("5.wav"); |
122 | Serial.println("5.wav"); |
123 | prevThrottle = currThrottle; |
124 | playingSound = 5; |
125 | }
|
126 | if (currThrottle == 7) { |
127 | tmrpcm.play("6.wav"); |
128 | Serial.println("6.wav"); |
129 | prevThrottle = currThrottle; |
130 | playingSound = 6; |
131 | }
|
132 | }
|
133 | |
134 | if ((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)) { |
135 | |
136 | if (playingSound == 1) { |
137 | tmrpcm.play("1.wav"); |
138 | Serial.println("again 1.wav"); |
139 | prevThrottle = currThrottle; |
140 | }
|
141 | if (playingSound == 2) { |
142 | tmrpcm.play("2.wav"); |
143 | Serial.println("again 2.wav"); |
144 | prevThrottle = currThrottle; |
145 | }
|
146 | if (playingSound == 3) { |
147 | tmrpcm.play("3.wav"); |
148 | Serial.println("again 3.wav"); |
149 | prevThrottle = currThrottle; |
150 | }
|
151 | if (playingSound == 4) { |
152 | tmrpcm.play("4.wav"); |
153 | Serial.println("again 4.wav"); |
154 | prevThrottle = currThrottle; |
155 | }
|
156 | if (playingSound == 5) { |
157 | tmrpcm.play("5.wav"); |
158 | Serial.println("again 5.wav"); |
159 | prevThrottle = currThrottle; |
160 | }
|
161 | if (playingSound == 6) { |
162 | tmrpcm.play("6.wav"); |
163 | Serial.println("again 6.wav"); |
164 | prevThrottle = currThrottle; |
165 | }
|
166 | }
|
167 | }
|
168 | }
|
[Mod: bitte nachfolgenden Post beachten!]
:
Bearbeitet durch Moderator
Marcel T. schrieb: > Sketch: Jetzt geht das wieder los! Kannst du lesen? Dann bitte handle danach was du hier zu lesen bekommst.
Marcel T. schrieb: > so habe jetzt mich viel belesen u. einen Sketch > geschreiben/umgearbeitet In der kurzen Zeit: kann nicht sein. "viel" ist für mich was anderes. Finde heraus, welches Signal der Empfänger beim Einschalten des Senders liefert. Dafür wirst du wohl einen Logic Analyzer benötiegn. Aber wundere dich nicht, wenn ein anderer Sender oder Empfänger sich an diesem Punkt ganz anders verhält. Beim Modellbau soll man immer zuerst den Sender und dann den Empfänger einschalten. Die umgekehrte Reihenfolge führt in der regel zu undefiniertem Verhalten.
Endschuldigung das ich denn Sketch nicht so eingefügt habe. Würde denn Sketch jetzt so gerne beibehalten. Aber würde nur gerne um einen zweiten Schalter erweitern der: HIGH Hupe 1 LOW Hupe 2 abpielt Wie muss ich das schreiben das beide am gleichen Lautsprecher funktionieren? Muss dass dann so glöst werden wie hier beschreiben: https://funduino.de/25-der-interrupt-befehl-attachinterrupt mit denn void playsound funktioniert es bei mir nicht (wird auch nicht farbig) muss ich da erst was runter laden?
:
Bearbeitet durch User
Hier wird Dir niemand ein fertiges Programm liefern. Die Funktion attachInterrupt() ist der völlig falsche Weg. Ich dachte es sei längst klar, dass du die Signale der Fernsteuerung mit pulseIn(pin,HIGH) erfassen kannst. Alles, was du brauchst, hast du bereits vorliegen. Du musst die Befehle nur wie gewünscht kombinieren. Das playsound() nicht mehr funktioniert finde ich gelinde gesagt überraschend. Da frage ich mich schon, was du die ganze zeit vorher gemacht hast. Auf meine Hilfestellungen bis du soweit ich das sehen kann gar nicht eingegangen und deine wirre Aufgabenbeschreibung hast du mit jedem einzelnen Beitrag durch noch mehr verwirrenden Text weiter verwaschen. Ich denke, da ist schon die Ursache des Problems. Um Software zu entwickeln, muss man einen klaren Kopf behalten: - Die Aufgabe aus Benutzer-Sicht beschreiben, und zwar eindeutig unmissverständlich. - Die gegebenen Voraussetzungen erfassen - Ein technisches Lösungskonzept erstellen - Das Lösungskonzept in kleine überschaubare Arbeitspakete zerlegen - Die aktuellen Mittel erfassen, die zur Lösung bereit stehen. - Die fehlenden Mittel erfassen und beschaffen (kann auch Know-How betreffen) - Erst danach kann man mit der Programmierung (dem Schreiben des Quelltextes) beginnen. Ich denke, das hast du einfach (noch) nicht drauf. Ich kann es Dir im Rahmen dieses Forums nicht beibringen. So oder so bist du jetzt an der Reihe. Entweder entwickelst du das selbst oder suchst Dir ein anderes Hobby.
Wollte damit sagen das was hier oben steht nicht funktioniert. Wenn ich alles was jetzt im void loop steht in void playsound kopiere u. Dann so void loop schreibe spielt er nix mehr ab Wenn es so gehen würde könnte ich denn 2 Schalter ja gleich schreiben wie denn ersten aber nur mit andere U. weniger Sounds. Der Schalter für die Hupe hat ja nur 3 Stellungen. Ein, aus, ein c]C-Code[/c Int rc_pin = 2; int rc_pin_button = 3; ... void playsound() { ... // hier kommt alles rein, was vorher in loop() war. } // neue loop: void loop() { noInterrupts(); duration = pulseIn(rc_pin, HIGH); interrupts(); if (duration > 1800) { playsound(); } }
Kann ich überhaupt 2 Befehle über einen Ausgang schalten? Da ja jetzt 2 Schalter [PIN 2,3] eingelesen werden U. nur einen Ausgang [PIN9] gibt. O. Muss ich jetzt auch 2 Ausgänge haben, 2Signalleitungen an PIN9| Lautsprecher.
Beitrag #5687168 wurde von einem Moderator gelöscht.
Beitrag #5687188 wurde von einem Moderator gelöscht.
Nicht meinen Beitrag löschen Sondern alles hier bitte löschen. Kann ich mich auch richtig hier abmelden? Mein Namen usw. Bringt mir nix hier. c]C-Code[/c Wollte damit alles in ein Code umwandeln
Beitrag #5687237 wurde von einem Moderator gelöscht.
Marcel T. schrieb: > Bringt mir nix hier. Ja vielleicht bist du hier wirklich am falschen Ort. Zumindest zur falschen Zeit. Lerne vernünftig und wir sehen uns in zwei Jahren wieder.
Beitrag #5687244 wurde von einem Moderator gelöscht.
Beitrag #5687271 wurde von einem Moderator gelöscht.
Beitrag #5687392 wurde von einem Moderator gelöscht.
Welche Werte liefert denn pusleIn() für die möglichen Schlater-Positionen an der Fernbedienung? Davon hängt alles Weitere ab. Das habe ich weiter oben schon einmal geschrieben - mit anderen Worten. > Kann ich überhaupt 2 Befehle über einen Ausgang schalten? > Da ja jetzt 2 Schalter [PIN 2,3] eingelesen werden U. nur einen Ausgang > [PIN9] gibt. > O. Muss ich jetzt auch 2 Ausgänge haben, 2Signalleitungen an PIN9| > Lautsprecher. Wenn du mich total anhängen wolltest, ist Dir das hiermit gelungen. Das versteht kein normaler Mensch. Ich kann Dir nicht mehr helfen.
Mit denn letzten meine ich: Kann ich überhaupt 2 Befehle über einen Ausgang schalten. Habe jetzt 2 schalter die ich einlesen möchte. Heißt möchte denn Sketch um ein Schalter erweitern, (int rc_pin_horn=3:) Kann ich 2 Schalter (PIN2 und PIN3) über ein Ausgangssignal (PIN9) ausgeben? Heißt 2Töne gleichzeitig (Töne kommen von PIN2 und PIN3) auf einen LAutsprecher ausgeben (PIN9) o. muss ich da dann noch ein Kabel an denn LAutsprecher anschließen o. braucht man dann 2 Lautsprecher. Um 2 Töne von 2 verschiedenen Schalter zu erzeugen Die Werte sind die gleichen wie in denn Sketch. Brauche aber nur - - Mittelwert - 1500 - keinen Ton abspielen - oben - 1830-2000 - horn1.wav - unten - 0-500 - horn2. wav Wollte die genauen werde auch über einen seriellen Monitor auslesen mit IDE 1.8.8. kann zwar über Werkzeuge das Programm öffnen, aber weiß bis jetzt nicht weiter
aber wenn ich jetzt in denn Sketch pulseIn(rc_pin_horn) erweitere und die gleichen werde unten lassen will, gibt er nix mehr richtig aus o. geht fast nix mehr wenn ich es hoch lade. Muss ja denn Schalter einlesen mit pulseIn und dann die werte danach brauche ich auch nur andere Sounds soll jetzt der neue Schalter abspielen
1 | void loop() { |
2 | |
3 | //Read throttel value |
4 | ++numLoop; |
5 | if (numLoop == 30000) { |
6 | noInterrupts(); |
7 | duration = pulseIn(rc_pin, HIGH); |
8 | duration2 = pulseIN(rc_pin_horn, HIGH); // erweitert für Horn/Hupe |
9 | interrupts(); |
10 | |
11 | numLoop = 0; |
12 | Serial.println(currThrottle); |
13 | //Set new throttle value |
14 | |
15 | if (duration <= 990) { |
16 | currThrottle = 0; |
17 | }; |
18 | if (duration > 990) { |
19 | currThrottle = 1; |
20 | }; |
21 | if ((duration > 1050) && (duration <= 1167)) |
22 | ((duration2 > 1050) && (duration2 <= 1167)){ |
23 | currThrottle = 2; |
24 | currThrottle2 = 2; |
25 | }; |
26 | if ((duration > 1167) && (duration <= 1332)) { |
27 | currThrottle = 3; |
28 | }; |
29 | if ((duration > 1332) && (duration <= 1498)) |
30 | ((duration2> 1332) && (duration2 <=1498)) { |
31 | currThrottle = 4; |
32 | currThrottle2 = 4; |
33 | }; |
34 | if ((duration > 1498) && (duration <= 1664)) { |
35 | currThrottle = 5; |
36 | }; |
37 | if ((duration > 1664) && (duration <= 1830)) |
38 | ((duration2 >1664) && (duration2 <= 1830)){ |
39 | currThrottle = 6; |
40 | currThrottle = 6; |
41 | }; |
42 | if (duration > 1830) { |
43 | currThrottle = 7; |
44 | }; |
Auch Töne geht jetzt nicht einfach zu erweitern da ich ja trotzdem denn neuen schalter einlesen muss. (pulseIn und werte) Komme einfach nicht weiter, um denn Sketch um einen Schalter mit WAV.daten zu erweitern.
Marcel T. schrieb: > Bringt mir nix hier. Stimmt. > c]C-Code[/c > Wollte damit alles in ein Code umwandeln Bist Du Zauberer? Oder meintest Du Kot? :-) Mal im Ernst: Wage Dich langsam an die Arduino-Programmierung heran. Tutorials gibt es "ohne Ende". Dann kannst Du irgendwann Dein Projekt umsetzen. Wenn Du ein Programm sinnfrei mit einem anderen Programm mischt kommt nichts verwertbares heraus. Hier wird Dir das niemand zusammenflicken. Also: Eigne Dir die Grundlagen an und stelle dann vernünftige Fragen.
Möchte mir sowas nachbauen https://www.youtube.com/watch?v=D-_IvxzKwkg denn Sketch kann man da in einen Polnischen Forum runterladen aber, kabiere nicht wo die Soundtaten sind?
Marcel T. schrieb: > Möchte mir sowas nachbauen > Youtube-Video "RC Ship Sound module version 1.5 sounds the diesel boat > engine sound an fog horn." Und ich möchte zum Mond fliegen :-)
Marcel T. schrieb: > Read throttel value Ich sag jetzt mal besser nicht, was mir gerade durch den Kopf ging. Es war jedenfalls ein (für mich) lustiger flotter Spruch. Sag mal, hast du unsere Antworten überhaupt verstanden, oder führst du hier einen Monolog?
Dieter F. schrieb
> Und ich möchte zum Mond fliegen :-)
Klar habe ich alle Antworten gelesen
Sind alle sehr hilfreich
Marcel T. schrieb: > Klar habe ich alle Antworten gelesen, Sind alle sehr hilfreich Die Frage war, ob du sie verstanden hast. Ich habe nicht das Gefühl, denn du hast fast nichts davon umgesetzt und keine Rückfrage beantwortet.
Welche Rückfragen noch? pulsIn habe ich gelesen das man es nur einmal nutzen kann U. Sonst alles blockiert. Alles, außer das mit denn Viod soundplay das ich alles was jetzt in loop steht darein kopieren soll. Aber dann geht der Skeh nicht mehr.
Es hat keinen Sinn. Ist nicht böse gemeint, aber dieser Thread hier verläuft hoffnungslos.
Kann man nicht mit diesen Befehle einen zusätzlichen PIN auslesen und einfügen: attachInterrupt: https://funduino.de/25-der-interrupt-befehl-attachinterrupt PinChanceInderupt: Der Arduino Nano hatt doch 2 PINS (2,3) wo mann Inderupt ausfüren kann. Kann man nicht damit ein Inderupt/pulsIn kurz unterbrechen u. dann da denn Hupe/Horn Sound einfügen?? Wollte es jetzt so ungefähr lösen, aber leider spelt er jetzt nix ab Meine Idee wäre mit 2 Interrupt befehle die ich einmal für RC_PIN schreibe und eins für RC_PIN_HORN schreibe Mit attachInterrupt(digitalPinToInterrupt(rc_pin), playsound, CHANGE); wollte ich sie dann aufrufen.
1 | #define RC_PIN_INTERRUPT // INTERRUPT 0 = DIGITAL PIN 2 - use the interrupt number in attachInterrupt |
2 | #define HORN_PIN_INTERRUPT // INTERRUPT 1 = DIGITAL PIN 3 - use the interrupt number in attachInterrupt |
3 | #define RC_PIN 2 // RC Throttle input pin |
4 | #define RC_PIN_HORN 3 // RC Horn input pin |
5 | #include <SD.h> // need to include the SD library |
6 | #define SD_ChipSelectPin 4 //using digital pin 4 on arduino nano 328, can use other pins |
7 | #include <TMRpcm.h> // also need to include this library... |
8 | #include <SPI.h> |
9 | |
10 | TMRpcm tmrpcm; // create an object for use in this sketch |
11 | |
12 | unsigned long time = 0; |
13 | int numLoop = 0; |
14 | int throttle = 0; |
15 | int prevThrottle = 0; |
16 | int currThrottle = 0; |
17 | int playingSound = 0; |
18 | |
19 | //RC scale |
20 | int rc_pin = 2; |
21 | int rc_pin_horn = 3; |
22 | unsigned long duration; |
23 | unsigned long prevDuration; |
24 | |
25 | |
26 | void setup() { |
27 | tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc |
28 | Serial.begin(9600); |
29 | pinMode(rc_pin, INPUT); |
30 | pinMode(rc_pin_horn, INPUT); |
31 | attachInterrupt(digitalPinToInterrupt(rc_pin), playsound, CHANGE); |
32 | attachInterrupt(digitalPinToInterrupt(rc_pin_horn), playhorn, CHANGE); |
33 | if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized: |
34 | Serial.println("SD fail"); |
35 | return; // don't do anything more if not |
36 | } |
37 | else { |
38 | Serial.println("SD ok"); |
39 | } |
40 | //PLay init file to tell sound version |
41 | Serial.println("anlass.raw"); |
42 | tmrpcm.play("anlass.raw"); |
43 | while (tmrpcm.isPlaying()) { |
44 | delay(2000); |
45 | }; |
46 | Serial.println("setup end"); |
47 | |
48 | } |
49 | |
50 | void loop() { |
51 | |
52 | } |
53 | void playhorn () { |
54 | //Alles was dann das Horn abspielen soll |
55 | } |
56 | void playsound () { |
57 | //Alles was dann der RC_PIN abspielen soll |
58 | ++numLoop; |
59 | if (numLoop == 30000) { |
60 | noInterrupts(); |
61 | duration = pulseIn(rc_pin, HIGH); |
62 | interrupts(); |
63 | |
64 | numLoop = 0; |
65 | Serial.println(currThrottle); |
66 | //Set new throttle value |
67 | |
68 | if (duration <= 990) { |
69 | currThrottle = 0; |
70 | }; |
71 | if (duration > 990) { |
72 | currThrottle = 1; |
73 | }; |
74 | if ((duration > 1050) && (duration <= 1167)) { |
75 | currThrottle = 2; |
76 | }; |
77 | if ((duration > 1167) && (duration <= 1332)) { |
78 | currThrottle = 3; |
79 | }; |
80 | if ((duration > 1332) && (duration <= 1498)) { |
81 | currThrottle = 4; |
82 | }; |
83 | if ((duration > 1498) && (duration <= 1664)) { |
84 | currThrottle = 5; |
85 | }; |
86 | if ((duration > 1664) && (duration <= 1830)) { |
87 | currThrottle = 6; |
88 | }; |
89 | if (duration > 1830) { |
90 | currThrottle = 7; |
91 | }; |
92 | |
93 | //If currThrottle != prevThrottle set start playing new file |
94 | if (currThrottle != prevThrottle) { |
95 | |
96 | if ((currThrottle == 0) && (prevThrottle > 0)) { |
97 | tmrpcm.play("abstell.raw"); |
98 | Serial.println("abstell.raw)"); |
99 | while (tmrpcm.isPlaying()) {} |
100 | prevThrottle = currThrottle; |
101 | } |
102 | if (currThrottle == 1) { |
103 | if (currThrottle > prevThrottle) { |
104 | tmrpcm.play("anlass.raw"); |
105 | Serial.println("anlass.raw"); |
106 | while (tmrpcm.isPlaying()) {} |
107 | } |
108 | playingSound = 1; |
109 | prevThrottle = currThrottle; |
110 | } |
111 | if (currThrottle == 2) { |
112 | tmrpcm.play("1.raw"); |
113 | Serial.println("1.raw"); |
114 | prevThrottle = currThrottle; |
115 | playingSound = 1; |
116 | } |
117 | if (currThrottle == 3) { |
118 | tmrpcm.play("2.raw"); |
119 | Serial.println("2.raw"); |
120 | prevThrottle = currThrottle; |
121 | playingSound = 2; |
122 | } |
123 | if (currThrottle == 4) { |
124 | tmrpcm.play("stand.raw"); |
125 | Serial.println("stand.raw"); |
126 | prevThrottle = currThrottle; |
127 | playingSound = 3; |
128 | } |
129 | if (currThrottle == 5) { |
130 | tmrpcm.play("stand.raw"); |
131 | Serial.println("stand.raw"); |
132 | prevThrottle = currThrottle; |
133 | playingSound = 4; |
134 | } |
135 | if (currThrottle == 6) { |
136 | tmrpcm.play("5.raw"); |
137 | Serial.println("5.raw"); |
138 | prevThrottle = currThrottle; |
139 | playingSound = 5; |
140 | } |
141 | if (currThrottle == 7) { |
142 | tmrpcm.play("6.raw"); |
143 | Serial.println("6.raw"); |
144 | prevThrottle = currThrottle; |
145 | playingSound = 6; |
146 | } |
147 | } |
148 | // Serial.println(tmrpcm.isPlaying()); |
149 | if ((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)) { |
150 | |
151 | if (playingSound == 1) { |
152 | tmrpcm.play("1.raw"); |
153 | Serial.println("again 1.raw"); |
154 | prevThrottle = currThrottle; |
155 | } |
156 | if (playingSound == 2) { |
157 | tmrpcm.play("2.raw"); |
158 | Serial.println("again 2.raw"); |
159 | prevThrottle = currThrottle; |
160 | } |
161 | if (playingSound == 3) { |
162 | tmrpcm.play("stand.raw"); |
163 | Serial.println("again stand.raw"); |
164 | prevThrottle = currThrottle; |
165 | } |
166 | if (playingSound == 4) { |
167 | tmrpcm.play("stand.raw"); |
168 | Serial.println("again stand.raw"); |
169 | prevThrottle = currThrottle; |
170 | } |
171 | if (playingSound == 5) { |
172 | tmrpcm.play("5.raw"); |
173 | Serial.println("again 5.raw"); |
174 | prevThrottle = currThrottle; |
175 | } |
176 | if (playingSound == 6) { |
177 | tmrpcm.play("6.raw"); |
178 | Serial.println("again 6.raw"); |
179 | prevThrottle = currThrottle; |
180 | } |
181 | } |
182 | } |
183 | } |
Marcel T. schrieb: > Kann man nicht mit was genau hast du hier nicht verstanden? Beitrag "Re: Arduino Sketch komme nicht weiter"
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.