mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino Sketch komme nicht weiter


Autor: Marcel T. (tauti1991)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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
Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber extrem ungeschickt programmiert:
   43:     throttle = (duration - 700) / 16;
   44:  
   45:     //Set new throttle value
   46:     if(throttle <= 25){
   47:       currThrottle = 1;
   48:     };
   49:     if((throttle >= 25) && (throttle <= 50)){
   50:       currThrottle = 2;
   51:     };
   52:     if((throttle >= 50) && (throttle <= 75)){
   53:       currThrottle = 3;
   54:     };
   55:     if(throttle >= 75){
   56:       currThrottle = 4;
   57:     };

Denn bei den Werten 25, 50 und 75 treffen jeweils zwei Bedingungen zu. 
Ausserdem könnte man das so verkürzen:
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:
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_button, HIGH);
    interrupts();

    if (duration > 1800)
    {
        playsound();
    }
}

: Bearbeitet durch User
Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen Ansatz dazu hast du ja jetzt. Nun musst du nur noch die 
Wiederholschleifen so anordnen, wie du es haben willst.

Autor: G.Rundsätzlich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn ich das richtig verstanden habe

Das es nicht automatiach Startet muss ich einsetzen:
void loop()
{  
    noInterrupts();
    duration = pulseIn(rc_pin_button, HIGH);
    interrupts();

    if (duration > 1800)
    {
        playsound(); start.wav
    }
}
Das ich es über denn Schalter wieder ausschalten kann
void loop()
{  
    noInterrupts();
    duration = pulseIn(rc_pin_button, LOW);
    interrupts();

    if (duration > 1800)
    {
        playsound(); stop.wav
    }
}

: Bearbeitet durch Moderator
Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <SD.h>                      // need to include the SD library
#define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h>           //  also need to include this library...
#include <SPI.h>

TMRpcm tmrpcm;   // create an object for use in this sketch

unsigned long time = 0;
int numLoop = 0;
int throttle = 0;
int prevThrottle = 0;
int currThrottle = 0;
int playingSound = 0;

//RC scale
int rc_pin = 2;
unsigned long duration;
unsigned long prevDuration;


void setup() {
  tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) {  
    Serial.println("SD fail");
    return;   // don't do anything more if not
  }
  else {
    Serial.println("SD ok");
  }
  //PLay init file to tell sound version
  Serial.println("anlass.wav");
  tmrpcm.play("anlass.wav");
  while (tmrpcm.isPlaying()) {
    delay(2000);
  };
  Serial.println("setup end");
}

void loop() {

  //Read throttel value
  ++numLoop;
  if (numLoop == 30000) {
    noInterrupts();
    duration = pulseIn(rc_pin, HIGH);
    interrupts();

    numLoop = 0;
    Serial.println(currThrottle);
    //Set new throttle value

    if (duration <= 990) {
      currThrottle = 0;
    };
    if ((duration > 990) && (duration <= 1050)) {
      currThrottle = 1;
    };
    if ((duration > 1050) && (duration <= 1167)) {
      currThrottle = 2;
    };
    if ((duration > 1167) && (duration <= 1332)) {
      currThrottle = 3;
    };
    if ((duration > 1332) && (duration <= 1498)) {
      currThrottle = 4;
    };
    if ((duration > 1498) && (duration <= 1664)) {
      currThrottle = 5;
    };
    if ((duration > 1664) && (duration <= 1830)) {
      currThrottle = 6;
    };
    if (duration > 1830) {
      currThrottle = 7;
    };

    //If currThrottle != prevThrottle set start playing new file
    if (currThrottle != prevThrottle) {

      if ((currThrottle == 0) && (prevThrottle > 0)) {
        tmrpcm.play("abstell.wav");
        Serial.println("abstell.wav)");
        while (tmrpcm.isPlaying()) {}
        prevThrottle = currThrottle;
      }
      if (currThrottle == 1) {
        if (currThrottle > prevThrottle) {
          tmrpcm.play("anlass.wav");
          Serial.println("anlass.wav");
          while (tmrpcm.isPlaying()) {}
        }
        playingSound = 1;
        prevThrottle = currThrottle;
      }
      if (currThrottle == 2) {
        tmrpcm.play("1.wav");
        Serial.println("1.wav");
        prevThrottle = currThrottle;
        playingSound = 1;
      }
      if (currThrottle == 3) {
        tmrpcm.play("2.wav");
        Serial.println("2.wav");
        prevThrottle = currThrottle;
        playingSound = 2;
      }
      if (currThrottle == 4) {
        tmrpcm.play("3.wav");
        Serial.println("3.wav");
        prevThrottle = currThrottle;
        playingSound = 3;
      }
      if (currThrottle == 5) {
        tmrpcm.play("4.wav");
        Serial.println("4.wav");
        prevThrottle = currThrottle;
        playingSound = 4;
      }
      if (currThrottle == 6) {
        tmrpcm.play("5.wav");
        Serial.println("5.wav");
        prevThrottle = currThrottle;
        playingSound = 5;
      }
      if (currThrottle == 7) {
        tmrpcm.play("6.wav");
        Serial.println("6.wav");
        prevThrottle = currThrottle;
        playingSound = 6;
      }
    }
 
    if ((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)) {

      if (playingSound == 1) {
        tmrpcm.play("1.wav");
        Serial.println("again 1.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 2) {
        tmrpcm.play("2.wav");
        Serial.println("again 2.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 3) {
        tmrpcm.play("3.wav");
        Serial.println("again 3.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 4) {
        tmrpcm.play("4.wav");
        Serial.println("again 4.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 5) {
        tmrpcm.play("5.wav");
        Serial.println("again 5.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 6) {
        tmrpcm.play("6.wav");
        Serial.println("again 6.wav");
        prevThrottle = currThrottle;
      }
    }
  }
}

[Mod: bitte nachfolgenden Post beachten!]

: Bearbeitet durch Moderator
Autor: Erklehr Behr (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Marcel T. schrieb:
> Sketch:

Jetzt geht das wieder los!

Kannst du lesen? Dann bitte handle danach was du hier
zu lesen bekommst.

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

: Bearbeitet durch User
Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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();
    }
}

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Erklehr Behr (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Marcel T. schrieb:
> c]C-Code[/c

Da ist Hopfen und Malz verloren.

Beitrag #5687168 wurde von einem Moderator gelöscht.
Beitrag #5687188 wurde von einem Moderator gelöscht.
Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
Autor: Erklehr Behr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
void loop() {

  //Read throttel value
  ++numLoop;
  if (numLoop == 30000) {
    noInterrupts();
    duration = pulseIn(rc_pin, HIGH);
    duration2 = pulseIN(rc_pin_horn, HIGH); // erweitert für Horn/Hupe
    interrupts();

    numLoop = 0;
    Serial.println(currThrottle);
    //Set new throttle value

    if (duration <= 990) {
      currThrottle = 0;
    };
    if (duration > 990) {
    currThrottle = 1;
  };
  if ((duration > 1050) && (duration <= 1167))
     ((duration2 > 1050) && (duration2 <= 1167)){
    currThrottle = 2;
    currThrottle2 = 2;
  };
  if ((duration > 1167) && (duration <= 1332)) {
    currThrottle = 3;
  };
  if ((duration > 1332) && (duration <= 1498))
     ((duration2> 1332) && (duration2 <=1498)) {
    currThrottle = 4;
    currThrottle2 = 4;
  };
  if ((duration > 1498) && (duration <= 1664)) {
    currThrottle = 5;
  };
  if ((duration > 1664) && (duration <= 1830)) 
     ((duration2 >1664) && (duration2 <= 1830)){
    currThrottle = 6;
    currThrottle = 6;
  };
  if (duration > 1830) {
    currThrottle = 7;
  };

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.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

: Bearbeitet durch User
Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möchte mir sowas nachbauen
Youtube-Video "RC Ship Sound module version  1.5 sounds the diesel boat engine sound an fog horn."

denn Sketch kann man da in einen Polnischen Forum runterladen aber, 
kabiere nicht wo die Soundtaten sind?

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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?

: Bearbeitet durch User
Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter F. schrieb
> Und ich möchte zum Mond fliegen :-)

Klar habe ich alle Antworten gelesen
Sind alle sehr hilfreich

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es hat keinen Sinn. Ist nicht böse gemeint, aber dieser Thread hier 
verläuft hoffnungslos.

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.



#define RC_PIN_INTERRUPT // INTERRUPT 0 = DIGITAL PIN 2 - use the interrupt number in attachInterrupt
#define HORN_PIN_INTERRUPT // INTERRUPT 1 = DIGITAL PIN 3 - use the interrupt number in attachInterrupt
#define RC_PIN 2      // RC Throttle input pin
#define RC_PIN_HORN 3        // RC Horn input pin
#include <SD.h>                      // need to include the SD library
#define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h>           //  also need to include this library...
#include <SPI.h>

TMRpcm tmrpcm;   // create an object for use in this sketch

unsigned long time = 0;
int numLoop = 0;
int throttle = 0;
int prevThrottle = 0;
int currThrottle = 0;
int playingSound = 0;

//RC scale
int rc_pin = 2;
int rc_pin_horn = 3;
unsigned long duration;
unsigned long prevDuration;


void setup() {
  tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
  Serial.begin(9600);
  pinMode(rc_pin, INPUT);
  pinMode(rc_pin_horn, INPUT);
  attachInterrupt(digitalPinToInterrupt(rc_pin), playsound, CHANGE);
  attachInterrupt(digitalPinToInterrupt(rc_pin_horn), playhorn, CHANGE);
  if (!SD.begin(SD_ChipSelectPin)) {  // see if the card is present and can be initialized:
    Serial.println("SD fail");
    return;   // don't do anything more if not
  }
  else {
    Serial.println("SD ok");
  }
  //PLay init file to tell sound version
  Serial.println("anlass.raw");
  tmrpcm.play("anlass.raw");
  while (tmrpcm.isPlaying()) {
    delay(2000);
  };
  Serial.println("setup end");
  
}

void loop() {
  
}
void playhorn () {
//Alles was dann das Horn abspielen soll
}
void playsound () {
//Alles was dann der RC_PIN abspielen soll
  ++numLoop;
  if (numLoop == 30000) {
    noInterrupts();
    duration = pulseIn(rc_pin, HIGH);
    interrupts();

    numLoop = 0;
    Serial.println(currThrottle);
    //Set new throttle value

    if (duration <= 990) {
      currThrottle = 0;
    };
    if (duration > 990) {
    currThrottle = 1;
  };
  if ((duration > 1050) && (duration <= 1167)) {
    currThrottle = 2;
  };
  if ((duration > 1167) && (duration <= 1332)) {
    currThrottle = 3;
  };
  if ((duration > 1332) && (duration <= 1498)) {
    currThrottle = 4;
  };
  if ((duration > 1498) && (duration <= 1664)) {
    currThrottle = 5;
  };
  if ((duration > 1664) && (duration <= 1830)) {
    currThrottle = 6;
  };
  if (duration > 1830) {
    currThrottle = 7;
  };

  //If currThrottle != prevThrottle set start playing new file
  if (currThrottle != prevThrottle) {

    if ((currThrottle == 0) && (prevThrottle > 0)) {
        tmrpcm.play("abstell.raw");
        Serial.println("abstell.raw)");
        while (tmrpcm.isPlaying()) {}
        prevThrottle = currThrottle;
      }
      if (currThrottle == 1) {
        if (currThrottle > prevThrottle) {
          tmrpcm.play("anlass.raw");
          Serial.println("anlass.raw");
          while (tmrpcm.isPlaying()) {}
        }
        playingSound = 1;
        prevThrottle = currThrottle;
      }
      if (currThrottle == 2) {
        tmrpcm.play("1.raw");
        Serial.println("1.raw");
        prevThrottle = currThrottle;
        playingSound = 1;
      }
      if (currThrottle == 3) {
        tmrpcm.play("2.raw");
        Serial.println("2.raw");
        prevThrottle = currThrottle;
        playingSound = 2;
      }
      if (currThrottle == 4) {
        tmrpcm.play("stand.raw");
        Serial.println("stand.raw");
        prevThrottle = currThrottle;
        playingSound = 3;
      }
      if (currThrottle == 5) {
        tmrpcm.play("stand.raw");
        Serial.println("stand.raw");
        prevThrottle = currThrottle;
        playingSound = 4;
      }
      if (currThrottle == 6) {
        tmrpcm.play("5.raw");
        Serial.println("5.raw");
        prevThrottle = currThrottle;
        playingSound = 5;
      }
      if (currThrottle == 7) {
        tmrpcm.play("6.raw");
        Serial.println("6.raw");
        prevThrottle = currThrottle;
        playingSound = 6;
      }
    }
    // Serial.println(tmrpcm.isPlaying());
    if ((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)) {

    if (playingSound == 1) {
        tmrpcm.play("1.raw");
        Serial.println("again 1.raw");
        prevThrottle = currThrottle;
      }
      if (playingSound == 2) {
        tmrpcm.play("2.raw");
        Serial.println("again 2.raw");
        prevThrottle = currThrottle;
      }
      if (playingSound == 3) {
        tmrpcm.play("stand.raw");
        Serial.println("again stand.raw");
        prevThrottle = currThrottle;
      }
      if (playingSound == 4) {
        tmrpcm.play("stand.raw");
        Serial.println("again stand.raw");
        prevThrottle = currThrottle;
      }
      if (playingSound == 5) {
        tmrpcm.play("5.raw");
        Serial.println("again 5.raw");
        prevThrottle = currThrottle;
      }
      if (playingSound == 6) {
        tmrpcm.play("6.raw");
        Serial.println("again 6.raw");
        prevThrottle = currThrottle;
      }
    }
  }
}

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel T. schrieb:
> Kann man nicht mit

was genau hast du hier nicht verstanden?
Beitrag "Re: Arduino Sketch komme nicht weiter"

Autor: Marcel T. (tauti1991)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, kann ich das noch ändern?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.