Liebe Kollegen,
Ich habe zwei Ultraschall Sensoren jeweils auf ein Servo Motor. Die S-Motoren sind ständig in Bewegung. Irgendwie ist der Arduino zu langsam. Das Script sollte auf dem Display eine Warnung anzeigen wenn ein Objekt sich näher als zwei Meter nähert. Das funktioniert auch jedoch sehr langsam so das die Meldung auf dem Display immer flackert.
Hat jemand eine Idee?
Siehe weiter unten.
Danke!!!
// (c)2016 Sinan
//Velo Sensor
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
//Lesen vom Serial eingang
String SerialEingabe;
//Ultraschall Sensor 1 Pins
#define trigPin 8
#define echoPin 9
//Ultraschall Sensor 2 Pins
#define trigPin2 10
#define echoPin2 11
//Berechnung
long dauer;
int distanz;
int ausgabedistanz;
long dauer2;
int distanz2;
int ausgabedistanz2;
int distanzLinkerSensor;
int distanzRechterSensor;
//Servo Pins
#define servo1pin 2
#define servo2pin 3
//Servo Variablen
Servo myservo1;
Servo myservo2;
void setup()
{
//Bitrate Serieler Anschluss
Serial.begin(9600);
//Initiallisieren und Hinderhrundbeleuchtung einschalten
lcd.begin (16,2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
myservo1.attach(servo1pin);
myservo2.attach(servo2pin);
}
void loop()
{
SerialEingabe = Serial.read();
ausgabedistanz = berechnungSensor1();
ausgabedistanz2 = berechnungSensor2();
lcd.clear();
servos();
}
void servos()
{
for(int i=40;i<=140;i+=8) //linker und rechter servo -links bewegen
{
myservo1.write(i);
delay(15);
myservo2.write(i);
delay(15);
distanzLinkerSensor=berechnungSensor1();
distanzRechterSensor=berechnungSensor2();
Serial.print("Linker Sensor: ");
Serial.println(distanzLinkerSensor);
Serial.println("");
Serial.print("Rechter Sensor: ");
Serial.println(distanzRechterSensor);
if(distanzLinkerSensor<200)
{
lcd.setCursor(0,0);
lcd.print("Gefahr von Links");
}
}
if(distanzRechterSensor<200)
{
lcd.setCursor(0,1);
lcd.print("Gefahr von Rechts");
}
for(int i=140;i>=40;i-=8) //linker und rechter servo - rechts bewegen
{
myservo1.write(i);
delay(15);
myservo2.write(i);
delay(15);
}
}
int berechnungSensor1()
{
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(5);
digitalWrite(trigPin,LOW);
dauer = pulseIn(echoPin,HIGH);
distanz=dauer*0.034/2; //Schallgeschwindigkeit gemäss Physik Buch (formel s=v*t*0.5 hin und retur). Bei gelegenheit google nach ultraschall gschw. suchen
ausgabedistanz=distanz;
return ausgabedistanz;
}
int berechnungSensor2()
{
digitalWrite(trigPin2,LOW);
delayMicroseconds(2);
digitalWrite(trigPin2,HIGH);
delayMicroseconds(5);
digitalWrite(trigPin2,LOW);
dauer2 = pulseIn(echoPin2,HIGH);
distanz2=dauer2*0.034/2;
ausgabedistanz2=distanz2;
return ausgabedistanz2;
}