Das mit den Millis usw.(ganz unten in meinem Code ab " // Vorwärts/Rückwärts -Steuerung und Erkennung der Wischrichtung")habe ich schon probiert aber es funktioniert nicht. Irgend was klappt nicht...Die "Play/Pause" Funktion klappt soweit.
//* +V connection of the Sensor attached to +5V
//* GND connection of the Sensor attached to ground
//* triggeer2 connection of the Sensor attached to digital pin 5
//* echo2 connection of the Sensor attached to digital pin 6
//* trigger1 connection of the Sensor2 attached to digital pin 7
//* echo1 connection of the Sensor2 attached to digital pin 8
//* Relais SIG on digital pin 9
//* Poti SIG on digital pin 10
#include <Wire.h> // DigitalPoti
const int ug = 10; // UNTERGRENZE in cm
const int og = 11; // OBERGRENZE in cm
const int potiPin = 10;
unsigned long interval = 1000;
unsigned long previousmillis = 0;
unsigned long previousmillis2 = 0;
// Sensor 2
const int trigger2 = 5;
const int echo2 = 6;
//sensor 1
const int trigger1 = 7;
const int echo1= 8;
long duration, cm;
long duration2, cm2;
long duration3, cm3;
long duration4, cm4;
const int relais = 9;
int protzentsensor = 0;
int schrittepoti = 0;
boolean sensor1hand = false;
boolean sensor2hand = false;
boolean pause = false;
boolean pause2 = false;
boolean play = false;
boolean play2 = false;
boolean next = false;
boolean last = false;
boolean isplaying = false;
boolean isplaying2 = false;
int maxhoehe;
int maxhoehe2;
byte val = 50; //DigitalPoti
void setup() {
pinMode(trigger1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trigger2, OUTPUT);
pinMode(echo2, INPUT);
pinMode(relais,OUTPUT);
Wire.begin(); //DigitalPoti
//Kalibrierung am Start zur Ermittlung der Maximalen höhe
//(falls man direkt unter der Decke ist oder so, schließlich sind viele Decken keine 4m hoch ;D )
Serial.begin(9600);
digitalWrite(trigger1, LOW);
delayMicroseconds(2);
digitalWrite(trigger1, HIGH);
delayMicroseconds(10);
digitalWrite(trigger1, LOW);
duration3 = pulseIn(echo1, HIGH);
cm3 = duration3/58.2;
digitalWrite(trigger2, LOW);
delayMicroseconds(2);
digitalWrite(trigger2, HIGH);
delayMicroseconds(10);
digitalWrite(trigger2, LOW);
duration4 = pulseIn(echo2, HIGH);
cm4 = duration4/58.2;
maxhoehe = cm3-20;
maxhoehe2 = cm4-20;
}
void loop()
{
// DigitalPoti
Wire.beginTransmission(44); // transmit to device #44 (0x2c)---> Datasheet
Wire.write(byte(0x00));
Wire.write(val);
Wire.endTransmission();
//SonarSensor1
digitalWrite(trigger1, LOW);
delayMicroseconds(2);
digitalWrite(trigger1, HIGH);
delayMicroseconds(10);
digitalWrite(trigger1, LOW);
duration = pulseIn(echo1, HIGH);
cm = duration/58.2;
//SonarSensor2
digitalWrite(trigger2, LOW);
delayMicroseconds(2);
digitalWrite(trigger2, HIGH);
delayMicroseconds(10);
digitalWrite(trigger2, LOW);
duration2 = pulseIn(echo2, HIGH);
cm2 = duration2/58.2;
// Serial.println(cm2);
Serial.println(maxhoehe);
Serial.println(maxhoehe2);
// Reaktion auf Entfernung: Lautstärkeregulierung
if ( cm||cm2 > ug && cm||cm2 < og ){
int protzentsensor1 = 100/(og-ug)*(cm-ug);
int protzentsensor2 = 100/(og-ug)*(cm2-ug);
// Die Kleinere Entfernung wird genommen.
if (protzentsensor1 < protzentsensor2){
protzentsensor = protzentsensor1;
}
if (protzentsensor2 < protzentsensor1){
protzentsensor = protzentsensor2;
}
}
schrittepoti = 2,56*protzentsensor;
val = schrittepoti;
// Pause / Play Steuerung
if (cm < ug && isplaying == true){
pause = true;
}
if (cm2 < ug && isplaying2 == true){
pause2 = true;
}
if (cm2 > ug && isplaying2 == false){
play2 = true;
}
if (cm > ug && isplaying == false){
play = true;
}
// Relais Befehle zur Klinkenschaltung
if (pause == true ) {
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
pause = false;
isplaying = false;
delay(100);
}
if (play == true ) {
delay(1000);
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
play = false;
isplaying = true;
}
if (pause2 == true ) {
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
pause2 = false;
isplaying2 = false;
delay(100);
}
if (play2 == true ) {
delay(1000);
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
play2 = false;
isplaying2 = true;
}
if (next == true ) {
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
next = false;
}
if (last == true ) {
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
digitalWrite(relais, HIGH);
delay(50);
digitalWrite(relais, LOW);
delay(50);
last = false;
}
// Vorwärts/Rückwärts -Steuerung und Erkennung der Wischrichtung
if (cm < maxhoehe && cm > og){
sensor1hand = true;
}
else{
sensor1hand = false;
}
if (cm2 < maxhoehe2 && cm2 > og){
sensor2hand = true;
}
else{
sensor2hand = false;
}
if (sensor2hand == true ){
previousmillis2=millis();
if (millis() < previousmillis2 + interval && sensor1hand == true) {
previousmillis2 = millis();
if (millis() < previousmillis2 + interval && sensor1hand == true && sensor2hand == false){
previousmillis2 = millis();
if (millis() < previousmillis2 + interval && sensor1hand == false && sensor2hand == false ) {
next = true;
}
}}
}
}