Go Down

Topic: Hilfe bei millis stat delay (Read 4560 times) previous topic - next topic

xGDNAx

Hy statemaschime finde ich keine Anleitung die mir weiter hilft.

Endloser Automat/ Nachtwächter meine ich passend umgesetzt zu haben so weit ich die Anleitung verstanden habe, die Anleitung finde ich dazu auch sehr lückenhaft.

Das habe ich auch schon mehrmals erwähnt.

Habe das MP3 Modul erstmal verband und solange ich im eingestelten bereich bin wird auch gemacht was ich möchte ohne zeit unterwall, da ich nicht drauf komme wie ich das umsetzen soll. Tema unvollständige/keine passende Anleitung.

Im FHEM würde ich ein Doif schreiben
([Wenn Distanz]eq "<x" and [Playtime ] eq "no")(set script on-for-timer)

Distanz = mein HC-SR04
Playtime = mein MP3 modul
script = was die LED's und der servo machen sollen.
on-for-timer = zeit wie lange die MP3 Spielzeit ist.


xGDNAx

Hy so habe es erstmal per Delay zum laufen gebracht, was ich eigentlich nicht wollte.

die MP3 wird abgespielt solange Leuchten die LED´s und der Servo für den Kiefer bewegt sich (ohne neu Erkennung bis Laufzeit ende), ist zwar die Holzhammer Methode aber das beste was ich bis jetzt hinbekommen habe.

Ich hoffe irgendwann das zu verstehen was ihr mir verständlich machen wolltet.

xGDNAx

Hy so nach einigem lesen und fragen in anderen Foren bin ich, meiner Meinung etwas weiter gekommen.

Code: [Select]

oid loop() {
  tasterstatus = digitalRead(taster); //Hier wird der Pin ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
  if (tasterstatus == HIGH)   {
    tasterZeit = millis();      // aktualisiere tasterZeit
    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }
  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1)
  {
    Laufzeitmodus++;             // wird um +1 erhöht
    tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
  }
  if (Laufzeitmodus == 1)
  {
    //Serial.println("taster_HIGH");
    sensorValue = analogRead (soundIn);

    Serial.println (sensorValue, DEC);

    servoFunction(); // control Kiefer

    // lighting up

    analogWrite(Led1, flicker[x]);

    analogWrite(Led2, flicker[x]);

    x = x + 1;

    if (x > 12 ) x = 0;

    Augen.write(AugenPos[z]);

    if (x == 0); z = z + 1;

    if (z > 23) z = 0;

    //Serial.println(" playing......");

  }

  else if (Laufzeitmodus == 0) {

    analogWrite(Led1, 0);

    analogWrite(Led2, 0);

    Augen.write(90);

    Kiefer.write(KieferCloseMin);
  }
  else
  {
    Laufzeitmodus = 0;
  }

delay(50);

{
  tasterstatus1 = digitalRead(taster1); //Hier wird der Pin ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
  if (tasterstatus1 == HIGH) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0203);//play the third song of the second folder == HIGH)
  }
}
}


per Taster kann ich meine MP3 Starten und meine Aktionen auch und die Aktionen per Taster wieder beenden.

eine zeitliche Steuerung habe ich noch nicht geschafft da ich noch nix passendes gefunden habe.

postmaster-ino

Hi

Mit Deinem Snipped kann ich Nichts anfangen - ABER:
Wenn Du beim START von - egal was - die Zeit (aka millis() ) mithältst, kannst Du bei JEDER nachfolgenden Aktion die zeitliche Entfernung der letzten Aktion berechnen (eben den aktuellen millis()-Wert minus den 'Alten').

Ich sehe Dein Problem nicht.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

xGDNAx

Hy da ich mir nicht sicher bin wie das aufgebaut wird.

Code: [Select]

{
  tasterstatus = digitalRead(taster); //Hier wird der Pin ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
  if (tasterstatus == HIGH)   {
    tasterZeit = millis();      // aktualisiere tasterZeit
    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }
  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1)
  {
    Laufzeitmodus++;             // wird um +1 erhöht
    tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
  }


da eine zeit einzusetzen die mir den nach Abgelaufener Zeit aus tasterGedrueckt = 1; tasterGedrueckt = 0; macht.

xGDNAx

Hy so hab es den nun auch mit dem Timer hinbekommen.

wenn ich jetzt noch verstehen würde wie ich den Code von noiasca passend für mich umsetzen kann wäre alles perfekt.

Andere Möglichkeit wäre noch mit dem Demo Code die static uint8_t ansbuf[10] = {0}; // Buffer for the answers.    // BETTER LOCALLY nutzbar zu machen, aber auch da steige ich noch nicht wirklich durch.


xGDNAx

Code: [Select]

//taster test
int taster = 2; //Das Wort „taster" steht jetzt für den Wert 7.
int tasterstatus = 0; //Das Wort „tasterstatus" steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster gedrückt ist oder nicht.
int taster1 = 7; //Das Wort „taster" steht jetzt für den Wert 7.
int tasterGedrueckt = 0;
int Laufzeitmodus = 0;
int entprellZeit = 200;
unsigned long tasterZeit = 0;     // Zeit beim drücken des Tasters
unsigned long ledMillis = 0;
#define DELAYTIME  33000 // sec
int tasterstatus1 = 0; //Das Wort „tasterstatus" steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster gedrückt ist oder nicht.
int playState = 0;
int timeCount = 0;
int time_period = 15; //  seconds
int tp = time_period * 20;
int sensorValue = 0; // variable to store the value coming from the sensor

//Augen LED´S
int Led1 = 3;

int Led2 = 11;
byte flicker[] = {180, 20, 79, 23, 245, 200, 80, 150, 40, 230, 180, 45, 90}; // Led intensity

//MP3 CATALEX
#include <SoftwareSerial.h>
#define ARDUINO_RX 5//should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX
////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
//0X7E FF 06 command 00 00 00 EF;(if command =01 next song order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)
#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
#define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED
#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)
#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close
#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////

#include <Servo.h> //Die Servobibliothek wird aufgerufen. Sie wird benötigt, damit die Ansteuerung des Servos vereinfacht wird.


//Servo Kiefer
// set sensitive

int activateMin = 150; // min value

int activateMax = 160; // max value

Servo Kiefer; //Erstellt für das Programm ein Servo mit dem Namen „Kiefer"
int Kiefer_state;

int KieferOpenMax = 65;

int KieferCloseMin = 46;

//Servo Augen
Servo Augen; //Erstellt für das Programm ein Servo mit dem Namen „Augen"
int AugenPos[] = { 20, 25, 50, 55, 90, 95, 70, 75, 90, 95, 100, 90, 95, };

int x;

int z;

//Soundin
#define soundIn A0
int sound_state;

// HC-SR04
#define trigPin 13//for the distance module
#define echoPin 12
long dauer = 10; // Das Wort dauer ist jetzt eine Variable, unter der die Zeit gespeichert wird, die eine Schallwelle bis zur Reflektion und zurück benötigt. Startwert ist hier 0.
long entfernung = 0; // Das Wort „entfernung" ist jetzt die variable, unter der die berechnete Entfernung gespeichert wird. Info: Anstelle von „int" steht hier vor den beiden Variablen „long". Das hat den Vorteil, dass eine größere Zahl gespeichert werden kann. Nachteil: Die Variable benötigt mehr Platz im Speicher.

void setup()
{
  //MP3
  Serial.begin(9600);//Start our Serial coms for serial monitor in our pc
  mySerial.begin(9600);//Start our Serial coms for THE MP3
  delay(500);//Wait chip initialization is complete
  sendCommand(CMD_SEL_DEV, DEV_TF);//select the TF card
  delay(200);//wait for 200ms

  //LED
  pinMode(Led1, OUTPUT); // Pin 3 (Pin „LED") ist ein Ausgang.
  pinMode(Led2, OUTPUT); // Pin 4 (Pin „LED") ist ein Ausgang.

  // HC-SR04
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  //Servo Kiefer
  Kiefer.attach(4);
  Kiefer.write(KieferCloseMin);

  //Servo Augen
  Augen.attach(10);
  Augen.write(90);

  //Soundin
  pinMode(soundIn, INPUT);
}

void loop() {
  tasterstatus = digitalRead(taster); //Hier wird der Pin7 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
  if (tasterstatus == HIGH)   {
    tasterZeit = millis();      // aktualisiere tasterZeit
    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }
    if (millis() - tasterZeit >= DELAYTIME) [b]hier die erkennung wann der Track zu ende ist[/b]
  {
    Laufzeitmodus = 0;
  }
  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1) [b]Hier soll der HC-SR04 rein also (measureDistance(trigPin, echoPin) < 20) [/b]
  {
    Laufzeitmodus++;             // wird um +1 erhöht
    tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
  }
  if (Laufzeitmodus == 1)
  {
    //Serial.println("taster_HIGH");
    sensorValue = analogRead (soundIn);

    Serial.println (sensorValue, DEC);

    servoFunction(); // control Kiefer

    // lighting up

    analogWrite(Led1, flicker[x]);

    analogWrite(Led2, flicker[x]);

    x = x + 1;

    if (x > 12 ) x = 0;

    Augen.write(AugenPos[z]);

    if (x == 0); z = z + 1;

    if (z > 23) z = 0;

    //Serial.println(" playing......");

  }

  else if (Laufzeitmodus == 0) {

    analogWrite(Led1, 0);

    analogWrite(Led2, 0);

    Augen.write(90);

    Kiefer.write(KieferCloseMin);
  }

  delay(50);

  {
    tasterstatus1 = digitalRead(taster); //Hier wird der Pin7 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
    if (tasterstatus == HIGH) {
      sendCommand(CMD_PLAY_WITHFOLDER, 0X0203);//play the third song of the second folder == HIGH)
    }
  }
}
void sendCommand(int8_t command, int16_t dat)
{
  delay(20);
  Send_buf[0] = 0x7e; //starting byte
  Send_buf[1] = 0xff; //version
  Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
  Send_buf[3] = command; //
  Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8);//datah
  Send_buf[6] = (int8_t)(dat); //datal
  Send_buf[7] = 0xef; //ending byte
  for (uint8_t i = 0; i < 8; i++) //
  {
    mySerial.write(Send_buf[i]) ;//send bit to serial mp3
    Serial.print(Send_buf[i]); //send bit to serial monitor in pc
  }
  Serial.println();
}

long measureDistance(int trigger, int echo) {
  long duration, distance;

  digitalWrite(trigger, LOW);  //PULSE ___|---|___
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);

  duration = pulseIn(echo, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.println("distance:");
  Serial.println(distance);
  return distance;
}

void servoFunction () {

  sound_state = map(analogRead(soundIn), activateMin, activateMax, KieferCloseMin, KieferOpenMax);

  Kiefer_state = sound_state;

  if ( Kiefer_state < KieferCloseMin) Kiefer_state = KieferCloseMin;

  if ( Kiefer_state > KieferOpenMax) Kiefer_state = KieferOpenMax;

  Kiefer.write(Kiefer_state);

  //Serial.println(Kiefer_state);

}


hoffe man kann erkennen wann Start und wann Ende sein soll der Rest ist fertig, mir fehlt halt nur die Start und Ende Erkennung

xGDNAx

Also der Code funktioniert soweit, bei Tasten druck gehts los und nach ablauf meines Timers hört es auf.

Ich verstehe euch nicht es steht alles im Code drin, soll ich euch noch bilder machen ??

Ihr werft mit ausdrücken um her die ein Anfänger kaum versteht, könnt selber aber nicht 2 zeilen code lesen.

Ich gebe die hoffnung auf fachkundige hilfe auf, sowas wie hier ist mir schon lange nicht mehr untergekommen.

Und dann wird sich gewundert das die Community untergeht.

Ich bin RAUS

postmaster-ino

Hi

Da Du nicht wirklich auf die Fragen der Helfer eingegangen bist, wird Das das Beste sein.
Wenn in Zukunft für Lernresistenz ein neues Wort gesucht werden sollte, befürchte ich, daß xGDNAx trotz Deiner Glanzleistung hier, keine Chance hat.

If x == 0 ;...

Macht sicher nicht was du erreichen willst. Behebe deine Fehler und formartiere den Code mit STRG-T
Darauf hast Du, natürlich, auch nicht reagiert - aber kein Problem, mach Du Mal.
Vll. hat es einen Grund, warum Dir Das noiasca geschrieben hat - ich kenne Diesen!

Dann will ich Dich aber nicht weiter aufhalten
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

noiasca

Code: [Select]

/* spielt einen Track von einem CATALEX MP3 Modul nach Tastendruck
   Während der Spielzeit werden zwei Servos bewegt und LEDs Leuchten
*/

const int taster = 2;
int tasterstatus = 0;             // Variable ob der Taster gedrückt ist oder nicht.
const int taster1 = 7;            // Das Wort „taster" steht jetzt für den Wert 7.
int tasterGedrueckt = 0;
int Laufzeitmodus = 0;
int entprellZeit = 200;
unsigned long tasterZeit = 0;      // Zeit beim drücken des Tasters
unsigned long ledMillis = 0;
const uint32_t DELAYTIME = 33000;  // sec
int tasterstatus1 = 0;             // Variable ob der Taster gedrückt ist oder nicht.
int playState = 0;
int timeCount = 0;
int time_period = 15;              //  seconds
int tp = time_period * 20;
int sensorValue = 0;               // variable to store the value coming from the sensor

//Augen LED´S
const int Led1 = 3;
const int Led2 = 11;
byte flicker[] = {180, 20, 79, 23, 245, 200, 80, 150, 40, 230, 180, 45, 90}; // Led intensity

//MP3 CATALEX
#include <SoftwareSerial.h>
const int ARDUINO_RX = 5;                            //should connect to TX of the Serial MP3 Player module
const int ARDUINO_TX = 6;                            //connect to RX of the module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX
////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
//0X7E FF 06 command 00 00 00 EF;(if command =01 next song order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)
#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
#define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED
#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)
#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close
#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////

//Servos
#include <Servo.h>
int activateMin = 150; // min value
int activateMax = 160; // max value
Servo Kiefer; //Erstellt ein Objekt der Klasse Servoe mit dem Namen „Kiefer"
int Kiefer_state;
const int KieferOpenMax = 65;
const int KieferCloseMin = 46;
//Servo Augen
Servo Augen;
int AugenPos[] = { 20, 25, 50, 55, 90, 95, 70, 75, 90, 95, 100, 90, 95}; // noiasca hat abschließendes Komma entfernt
int x;           // noiasca ... magic x ... für was das wohl noch verwendet wird  aaaah vermutlich für die Augen - aber eigentlich für die LEDs um den aktiven Index zu speichern
int z;           // noiasca ... magic y ... für was das wohl noch verwendet wird ... das scheint für die Servos wichtig zu sein

//Soundin
const int soundIn = A0; // noiaca ... ziehen wir doch mal const durch stat #define
int sound_state;

// HC-SR04
const int trigPin = 13; // for the distance module - noiaca ... ziehen wir doch mal const durch stat #define
const int echoPin = 12;
long dauer = 10; // Das Wort dauer ist jetzt eine Variable, unter der die Zeit gespeichert wird, die eine Schallwelle bis zur Reflektion und zurück benötigt.
long entfernung = 0; // Das Wort „entfernung" ist jetzt die variable, unter der die berechnete Entfernung gespeichert wird. Info: Anstelle von „int" steht hier vor den beiden Variablen „long". Das hat den Vorteil, dass eine größere Zahl gespeichert werden kann. Nachteil: Die Variable benötigt mehr Platz im Speicher.

void setup()
{
  //MP3
  Serial.begin(115200);                    // Start our Serial coms for serial monitor in our pc; noiasca lebt 2018 - ergo schrauben wir die BAUD hoch.
  mySerial.begin(9600);                    // Start our Serial coms for THE MP3
  delay(500);                              // Wait chip initialization is complete
  sendCommand(CMD_SEL_DEV, DEV_TF);        // select the TF card
  delay(200);                              // wait for 200ms

  //LED
  pinMode(Led1, OUTPUT); // LED ist ein Ausgang.
  pinMode(Led2, OUTPUT);

  // HC-SR04
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  //Servo Kiefer
  Kiefer.attach(4);
  Kiefer.write(KieferCloseMin);

  //Servo Augen
  Augen.attach(10);
  Augen.write(90);

  //Soundin
  pinMode(soundIn, INPUT);
}

void loop() {
  tasterstatus = digitalRead(taster);
  if (tasterstatus == HIGH)
  {
    tasterZeit = millis();      // aktualisiere tasterZeit
    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
  }
  if (millis() - tasterZeit >= DELAYTIME || mySerial.available()) //noiasca diese verdammte Stelle habe ich gefunden, weil der Sketch  hier einen Kompilier-Fehler geworfen hat ... super kommentar!
  {
    Laufzeitmodus = 0;
  }
  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1) //[b]Hier soll der HC - SR04 rein also (measureDistance(trigPin, echoPin) < 20) [ / b]
  {
    Laufzeitmodus++;             // wird um +1 erhöht
    tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
  }
  if (Laufzeitmodus == 1)
  {
    //Serial.println("taster_HIGH");
    sensorValue = analogRead (soundIn);
    Serial.println (sensorValue, DEC);
    servoFunction(); // control Kiefer
    // lighting up
    analogWrite(Led1, flicker[x]);              // da ist nun dieses x
    analogWrite(Led2, flicker[x]);
    x = x + 1;                                  // das geht schöner
    if (x > 12 ) x = 0;                         // magic 12
    Augen.write(AugenPos[z]);
    if (x == 0); z = z + 1;                     // noiasca: dieses pseudo if macht nichts. der ; ist zu viel. z = z + 1 wird immer ausgeführt werden, was aber vermutlich eh gewollt ist.
    if (z > 23) z = 0;
    //Serial.println(" playing......");
  }
  else if (Laufzeitmodus == 0)
  {
    analogWrite(Led1, 0);
    analogWrite(Led2, 0);
    Augen.write(90);
    Kiefer.write(KieferCloseMin);
  }
  delay(50);
  {
    tasterstatus1 = digitalRead(taster);          // Hier wird der Pin7 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
    if (tasterstatus == HIGH)
    {
      // Bevor der Track gestartet wird, empfiehlt noiasca den (soft)-Serial Buffer zu löschen)
      Serial.print(F("D179 lösche Buffer ms=")); Serial.println(millis());
      while (mySerial.available())
      {
        mySerial.read(); // Buffer Löschen
      }
      sendCommand(CMD_PLAY_WITHFOLDER, 0X0203);   // play the third song of the second folder == HIGH)
    }
  }
}

void sendCommand(int8_t command, int16_t dat)
{
  delay(20);
  Send_buf[0] = 0x7e; //starting byte
  Send_buf[1] = 0xff; //version
  Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
  Send_buf[3] = command; //
  Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8);//datah
  Send_buf[6] = (int8_t)(dat); //datal
  Send_buf[7] = 0xef; //ending byte
  for (uint8_t i = 0; i < 8; i++) //
  {
    mySerial.write(Send_buf[i]) ;//send bit to serial mp3
    Serial.print(Send_buf[i]); //send bit to serial monitor in pc
  }
  Serial.println();
}

long measureDistance(int trigger, int echo) {
  long duration, distance;
  digitalWrite(trigger, LOW);  //PULSE ___|---|___
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  duration = pulseIn(echo, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.println("distance:");
  Serial.println(distance);
  return distance;
}

void servoFunction () {
  sound_state = map(analogRead(soundIn), activateMin, activateMax, KieferCloseMin, KieferOpenMax);
  Kiefer_state = sound_state;
  if ( Kiefer_state < KieferCloseMin) Kiefer_state = KieferCloseMin;
  if ( Kiefer_state > KieferOpenMax) Kiefer_state = KieferOpenMax;
  Kiefer.write(Kiefer_state);
  //Serial.println(Kiefer_state);
}


how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

postmaster-ino

Hi

Nett ;) - aber meinst Du nicht, daß Das 'Perlen vor die Säue' ist?
Wobei - wenn zukünftig Wer über diesen Sketch fällt, schadet Es ja nicht - und wenn der TO Seine Tränen getrocknet hat, kann Er ggf. mit Deinen Kommentaren etwas anfangen.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

GASMAST3R

Hallo nicht wundern ich bin xGDNAx, habe mich nur wieder angemeldet um das mal klar zu stellen.

1. Ich weis echt nicht was ihr hochtrabenden für komplexe habt, ich bin Anfänger das ist mein ersten Arduino Projekt dazu habe ich vom Programmieren so viel Ahnung wie ihr von Verständnis.

2. Nur weil ihr mehr Erfahrung habt, muss man Leute nicht so behandeln, weil die nicht alles können und wissen wie ihr.

3. ich habe eine andere Lösung gefunden, die mir weiter hilft, danke und das ohne euch.

4. Ich habe das alles schon fast, jeden 2 Beitrag geschrieben.

4.1 was ich machen möchte
4.2 wie ich das machen möchte
4.3 was ich verstanden zu haben scheine.
4.4 was ich nicht verstanden habe.
4.5 warum ich es nicht verstanden habe.

Aber das einzige was ihr könnt ist die schuld abzugeben.

Der von mir angegebene Code läuft, auch wenn da Fehler vorhanden sein können, (es ist noch kein Meister vom Himmel gefallen) das ist auf jeden Fall was ich aus eigener Arbeit gefunden habe und für meine zwecke nutzbar gemacht habe.

Es kann bestimmt nicht sein, das jemand der Hilfe braucht, nur mit unnötigen Kommentaren auf Fehler hin gewiesen wird, aber die Leute selber nix Lesen oder Besser darstellen können.

Eine sinnige Erklärung warum etwas nicht Funktionieren kann, hätte die gesamte Situation bestimmt zu einem besseren Ergebnis gebracht.


Und nur weil A die bessere Lösung ist, muss B nicht schlecht sein.



So nun muss gut sein.

Auch mit diesem Profil bin ich hier Raus, also Antworten bringt nix.

ElEspanol

Es gibt Leute, die suchen die Schuld immer bei den anderen. Das Problem ist ja, dass sie alles richtig machen, es aber halt doch nicht funktioniert. Und wer hat dann wohl Schuld?

Go Up