Mit dem Farbsensor TCS 320 Rot erkennen und einen Servo ansteuern

Hallo zusammen,

ich arbeite seit einem Monat mit Arduino und stehe gerade vor einem Problem. Ich hab Probleme mit meinem Code. Wenn ich diesen so auf meinen Arduino hochlade erkennt der Farbsensor (ohne die Farbe rot davorzuhalten) Werte von 1400 - 1600. Wenn ich eine rote Kugel davorhalte gehen die Werte sofort auf 200 - 400 runter. Wenn dies der Fall ist (also die Werte unter 500 gelangen), soll mein Servo das Programm wie im Code geschrieben, abspielen.

Allerdings bewegt sich der Servo direkt wenn das Programm startet.

Kann mir hier jemand weiterhelfen?

Den Code für den Farbsensor habe ich hierher:

Den Code für den Servo habe ich selber geschrieben.

#include <Servo.h> 

#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 3

int frequency = 0;

Servo servoblau; 

void setup()

{

pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  
  // Setting frequency-scaling to 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  Serial.begin(9600);

servoblau.attach(10);

}

 

void loop()

{

 // Setting red filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("Red= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(500);
  
if ("Red=" < 500)

servoblau.write(15); //Position 1 ansteuern

delay(1000); //Das Programm stoppt für 1 Sekunden

servoblau.write(100); //Position 2 ansteuern

delay(1000); //Das Programm stoppt für 1 Sekunden

servoblau.write(15); //Position 1 ansteuern

delay(1000); //Das Programm stoppt für 1 Sekunden

}
if ("Red=" < 500)

Du vergleichst ob das Wort "Rot=" kleiner als 500 ist. Ein etwas seltsamer Vergleich.
Ich kann es nicht testen, oder ich würde einen Vergleich mit frequency anstellen. Das ist ja das, was Du aus dem Sensor ausließt.
Den Rest habe ich mir nicht angesehen.

Linzilohan:
if ("Red=" < 500)

Die Zeichenkette "Red=" wird nie >= der Zahl 500 sein.

Selbst wenn man mal annehmen würde, das es ein erfüllbarer Vergleich wäre, dann würde bei Deiner Schreibweise nur die nächste Zeile in Abhängigkeit davon ausgeführt werden, der Rest immer.

Du solltest ein paar Schritte zurück gehen und erst mal die Grundlagen lernen.

Gruß Tommy

Hi

STRG+T in der IDE rückt den Code auf Klammer-Ebene ein.
So siehst Du (und wir) was zusammen gehört.
Nach Deiner unglücklichen IF wird - da hier keine weitere Klammerung vorhanden ist - NUR der nächste 'Befehl' ausgeführt.
Die Zeilen darunter - also schon das delay (Welches bööhöse ist !!) wird IMMER ausgeführt, wie auch das Rückstellen des Servo auf 100, Warten, Servo auf 15.

Schaue Dir Deinen Sketch an und überlege, wie der Arduino da durch läuft - Der kennt nämlich Deine Ziele überhaupt nicht und macht stur, was Du geschrieben hast!

MfG