wie kommst du auf die Idee den Programm als Screenshots an zu hängen?
Das Problem ist, dass "Rechts" nicht aus geht und generell nur Rechts von Anfang an leuchtet. Es soll zwar von Anfang an leuchten aber zwischen einer Distanz von 0 und 20 cm auf links umschalten und für links müssen pin 5 und 6 an sein. Es sollte außerdem eine Sekunde abstand zwischen der Umschaltung sein und links sollte 5 Sekunden laufen und dann wieder auf rechts schalten.
Entschuldigung kenne mich nicht aus.
wie stellst du dir das vor, dass wir dein Programm testen und/oder modifizieren? selbst schreiben?
#include <NewPing.h>
#define SONAR_NUM 1 //Anzahl der Sensoren
#define MAX_DISTANCE 25 //Maximale Distanz
int Rechts = 5;
int Links = 6;
int Forderung = LOW;
unsigned long ZeitLinks;
unsigned long ZeitLinksumschaltung;
int StatusLinks = LOW;
int StatusRechts = HIGH;
NewPing sonar[SONAR_NUM] = {
NewPing(4, 2, MAX_DISTANCE),
};
void setup() {
Serial.begin(115200);
pinMode(Rechts, OUTPUT);
pinMode(Links, OUTPUT);
}
void loop() {
digitalWrite (Rechts, !digitalRead(Links));
for (uint8_t i = 0; i < SONAR_NUM; i++) {
delay(30);
Serial.print(i);
Serial.print("=");
Serial.print(sonar[i].ping_cm());
Serial.print("cm");
}
Serial.println();
if (sonar[0].ping_cm() > 0 && (sonar[0].ping_cm() <=20))
{
Forderung = HIGH;
}
if (Forderung == HIGH && (StatusLinks == LOW))
{
StatusRechts = LOW;
ZeitLinksumschaltung = millis();
StatusLinks = HIGH;
StatusRechts = HIGH;
ZeitLinks = millis();
}
if (StatusRechts ==LOW &&(millis() - ZeitLinksumschaltung >=1000) &&(millis() - ZeitLinksumschaltung <=1500))
{
digitalWrite(Links, HIGH);
digitalWrite(Rechts, HIGH);
ZeitLinks = millis();
}
if (StatusLinks == HIGH && (millis() - ZeitLinks >= 5000) && (millis() - ZeitLinks <= 5500))
{
digitalWrite(Rechts, LOW);
digitalWrite(Links, LOW);
StatusRechts = LOW;
digitalWrite(Rechts, HIGH);
}
}
es gibt Code Tags, man wählt ganzen Code, klickt auf das Code Knopf und dann erscheint der Code in einem Rechteck, wo man ihn mit einem Tastendruck kopieren kann, ohne das riesige mehrere Bildschirme große zu markieren.
und wenn du schon über Schaltungen sprichst, wäre doch zu erwarten dass du sie auch zeigst.
#include <NewPing.h>
#define SONAR_NUM 1 //Anzahl der Sensoren
#define MAX_DISTANCE 25 //Maximale Distanz
int Rechts = 5;
int Links = 6;
int Forderung = LOW;
unsigned long ZeitLinks;
unsigned long ZeitLinksumschaltung;
int StatusLinks = LOW;
int StatusRechts = HIGH;
NewPing sonar[SONAR_NUM] = {
NewPing(4, 2, MAX_DISTANCE),
};
void setup() {
Serial.begin(115200);
pinMode(Rechts, OUTPUT);
pinMode(Links, OUTPUT);
}
void loop() {
digitalWrite (Rechts, !digitalRead(Links));
for (uint8_t i = 0; i < SONAR_NUM; i++) {
delay(30);
Serial.print(i);
Serial.print("=");
Serial.print(sonar[i].ping_cm());
Serial.print("cm");
}
Serial.println();
if (sonar[0].ping_cm() > 0 && (sonar[0].ping_cm() <=20))
{
Forderung = HIGH;
}
if (Forderung == HIGH && (StatusLinks == LOW))
{
StatusRechts = LOW;
ZeitLinksumschaltung = millis();
StatusLinks = HIGH;
StatusRechts = HIGH;
ZeitLinks = millis();
}
if (StatusRechts ==LOW &&(millis() - ZeitLinksumschaltung >=1000) &&(millis() - ZeitLinksumschaltung <=1500))
{
digitalWrite(Links, HIGH);
digitalWrite(Rechts, HIGH);
ZeitLinks = millis();
}
if (StatusLinks == HIGH && (millis() - ZeitLinks >= 5000) && (millis() - ZeitLinks <= 5500))
{
digitalWrite(Rechts, LOW);
digitalWrite(Links, LOW);
StatusRechts = LOW;
digitalWrite(Rechts, HIGH);
}
}
ich hoffe hab das jetzt richtig gemacht.
Gruß Dieter
noch besser wäre ersten Post zu editieren
Soweit ja, aber es fehlt noch dein Schaltbild.
Wie kann ich ein Schaltbild machen?
Papier, Handyfoto, such dir aus
if (Forderung == HIGH && (StatusLinks == LOW))
{
StatusRechts = LOW;
ZeitLinksumschaltung = millis();
StatusLinks = HIGH;
StatusRechts = HIGH;
was ist denn mit StatusRechts ?
Ich hoffe ihr könnt etwas mit den Bildern anfangen. Entschuldigen Sie für meine Unwissenheit.
Gruß Dieter
Braucht man das da auch?
Wie @kolaha schon gezeigt hat im #13, StatusRechts wird kurz LOW geschaltet danach zurück auf High, nirgend wo kommt dauerhaft auf LOW mall die Logik überdenken ![]()
Zetel, Bleistift schreiben wie es soll sein, danach im Sketch korrigieren
eigentlich schreibt man ein Program aus Befehlen die dem Ziel des ganzen entspricht und die Entscheidungslogik(Algorithm) befolgt, und nicht einfach die bekannten Wörter auflisten.
Erkläre dann einfach was dein Project machen soll.
Also ich versuche mal die Schaltung zu erklären.
Pin 6 ist für Spannungsversorgung des Motoren zuständig. Die Schaltung soll anfangen im Rechtslauf zu laufen. Bis jemand etwas vor den Ultraschallsensor hält dann soll Pin 6 öffnen heißt der Motor hört auf zu laufen und 1sekunde Pause machen dann auf Linkslauf umschalten und für 5sekunden in diese Richtung laufen anschließend wieder in rechtslauf umschalten wieder mit eine Pause von 1sekunde und dann wieder unendlich rechts rumlaufen bis wieder was vor den Ultraschallsensor kommt. Außerdem wird der Motor mit Relais angesteuert.
Gruß Dieter
const byte R_L_pin = 5;
const byte An_Aus_pin = 6;
const byte Ping_pin = 2;// bin mir nicht sicher wie du es verbunden hast.
const byte Echo_pin = 4;
void setup() {
Serial.begin(115200);
pinMode(R_L_pin, OUTPUT);
pinMode(An_Aus_pin, OUTPUT);
pinMode(Ping_pin, OUTPUT);
pinMode(Echo_pin, INPUT);
digitalWrite (An_Aus_pin, HIGH);
}
uint8_t Ping_cm() {
digitalWrite(Ping_pin, LOW);
delayMicroseconds(2);
digitalWrite(Ping_pin, HIGH);
delayMicroseconds(5);
digitalWrite(Ping_pin, LOW);
long duration = pulseIn(Echo_pin, HIGH, 720); // alles im Abstand von 720µs*343m/s=~0.247m und weiter wird als 0
int cm = duration / 58;
return uint8_t(cm);
}
void loop() {
static unsigned long ZeitLinksumschaltung;
while (Ping_cm() == 0 || Ping_cm() > 20);//unendlich nach rechts, bis Hindernis in 20cm ist
Serial.println("cm<");
digitalWrite (An_Aus_pin, LOW);
digitalWrite (R_L_pin, HIGH);
delay(1000);
digitalWrite (An_Aus_pin, HIGH);
ZeitLinksumschaltung = millis();
while (millis() - ZeitLinksumschaltung < 5000);//5 Sekunden nach links
digitalWrite (An_Aus_pin, LOW);
digitalWrite (R_L_pin, LOW);
delay(1000);
digitalWrite (An_Aus_pin, HIGH);
}






