//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