Go Down

Topic: Geschwindigkeitsmessanlage uno  (Read 1 time) previous topic - next topic

Moritz2808

Jan 25, 2018, 11:40 pm Last Edit: Jan 26, 2018, 12:39 am by uwefed Reason: add CODE TAGs </>
Hallo ,
Muss für die schule ein projekt machen kenn mich leider nicht sehr gut mit programmieren aus ich habe von dommenik lokschuppen einen code für eine geschwindigkeitsmessanlage und wollte fragen woran es liegt das dieser nicht mit meinem board kompatibel ist obwohl er genau das gleiche board benutzt?
Ich beutze das arduino uno ,2TCRT5000 Infrarot Lichtschranken und ein LC Display HD44780 mit 2 X 16 Zeichen
Der code:
Code: [Select]
#include
#include "TimerOne.h"

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int Sensor_A = A0;
int Sensor_B = A1;
int Sensor_1 = 900;
int Sensor_2 = 900;
int Zeitmesser = 0;
int Loeschen = 0;
int Start = 0;
int Stop = 0;
int Geschwindigkeit = 0;

void setup()
{
 lcd.begin(16,2);
 lcd.setCursor(3,0);
 lcd.print("Bereit f");
 lcd.setCursor(11,0);
 lcd.print(char(245));
 lcd.setCursor(12,0);
 lcd.print("r");
 lcd.setCursor(2,1);
 lcd.print("eine Messung");

 Timer1.initialize(50000);
 Timer1.attachInterrupt(Zeitkonstante);

 Serial.begin(9600);
}

void Zeitkonstante()
{
 // Start der Zeit
 if (Start == 1 || Start == 2 && Stop == 0)
 {
 Zeitmesser++;
 }

 // Zeit zum Löschen des Displays auf Grundstellung
 if (Loeschen > 0)
 {
 Loeschen++;
 }
/*
 // Ausgabe der Sensorwerte
 Serial.println("Sensor_1");
 Serial.println(Sensor_1);
 Serial.println("Sensor_2");
 Serial.println(Sensor_2);
*/
}

void loop()
{
 Sensor_1 = analogRead(Sensor_A);
 Sensor_2 = analogRead(Sensor_B);

 // Messung wenn Zug aus Richtung 1 kommt
 if (Sensor_1 < 500 && Sensor_2 > 500 && Start == 0)
 {
 Start = 1;
 lcd.begin(16,2);
 lcd.setCursor(4,0);
 lcd.print("Messung");
 lcd.setCursor(3,1);
 lcd.print("gestartet");
 }
 // Messung gestoppt
 if (Sensor_2 < 500 && Start == 1)
 {
 Stop = 1;
 }

 // Messung wenn Zug aus Richtung 2 kommt
 if (Sensor_2 < 500 && Sensor_1 > 500 && Start == 0)
 {
 Start = 2;
 lcd.begin(16,2);
 lcd.setCursor(4,0);
 lcd.print("Messung");
 lcd.setCursor(3,1);
 lcd.print("gestartet");
 }
 // Messung gestoppt
 if (Sensor_1 < 500 && Start == 2)
 {
 Stop = 1;
 }

 // Ausgabe der Geschwindigkeit
 if (Stop == 1 && Loeschen == 0)
 {
 // v = s / t; s = Streckenlänge (in cm) / 100 * Maßstab * 3,6 * 20 (Auflösung des Interrupts)
 Geschwindigkeit = 3182 / Zeitmesser;
 Zeitmesser = 0;
 Loeschen = 1;
 lcd.begin(16,2);
 lcd.setCursor(0,0);
 lcd.print("Geschwindigkeit:");
 if (Geschwindigkeit < 100)
 {
 lcd.setCursor(4,1);
 lcd.print(Geschwindigkeit);
 lcd.setCursor(7,1);
 lcd.print("km/h");
 }
 else
 {
 lcd.setCursor(4,1);
 lcd.print(Geschwindigkeit);
 lcd.setCursor(8,1);
 lcd.print("km/h");
 }
 }

 // Displays löschen, Grundstellung
 if (Loeschen > 150)
 {
 Start = 0;
 Stop = 0;
 Zeitmesser = 0;
 Loeschen = 0;
 lcd.begin(16,2);
 lcd.setCursor(3,0);
 lcd.print("Bereit f");
 lcd.setCursor(11,0);
 lcd.print(char(245));
 lcd.setCursor(12,0);
 lcd.print("r");
 lcd.setCursor(2,1);
 lcd.print("eine Messung");
 }

 // Ausgabe wenn beide Sensoren auslösen = Gleis ist belegt
 if (Sensor_1 < 500 && Sensor_2 < 500 && Start == 0)
 {
 Start = 3;
 lcd.begin(16,2);
 lcd.setCursor(0,0);
 lcd.print("Gleis ist belegt");
 }

 // beide Sensoren wieder in Grundstellung = Gleis ist nicht mehr belegt
 if (Sensor_1 > 500 && Sensor_2 > 500 && Start == 3)
 {
 Start = 0;
 Zeitmesser = 0;
 lcd.begin(16,2);
 lcd.setCursor(3,0);
 lcd.print("Bereit f");
 lcd.setCursor(11,0);
 lcd.print(char(245));
 lcd.setCursor(12,0);
 lcd.print("r");
 lcd.setCursor(2,1);
 lcd.print("eine Messung");
 }

 // wenn nach dem Auslösen des ersten Sensors eine Zeit von 40 Sekunden überschritten wird: Grundstellung und Ausgabe "Messung ungültig"
 if (Zeitmesser > 800)
 {
 Zeitmesser = 0;
 Loeschen = 1;
 lcd.begin(16,2);
 lcd.setCursor(3,0);
 lcd.print("Ung");
 lcd.setCursor(6,0);
 lcd.print(char(245));
 lcd.setCursor(7,0);
 lcd.print("ltige");
 lcd.setCursor(4,1);
 lcd.print("Messung");
 }

uwefed

Versuch uns mal einige Links zur Hardware und zum Sketch zu geben.
Grüeß Uwe

wno158

In dieser Zeile
Code: [Select]
if (Start == 1 || Start == 2 && Stop == 0)
hast Du m.E. ein Problem. Lt. Operator Precedence ist das && höher priorisiert als das ||. Wenn das so gewollt ist, gut. Anderenfalls würde ich lieber einen Satz Klammern zuviel als zuwenig spendieren:
Code: [Select]
if ( ((Start == 1) || (Start == 2)) && (Stop == 0))

Gruß Walter

HotSystems

Zusätzlich solltest du genau beschreiben, was bei deinem Aufbau nicht funktioniert.
Auch hilft ein Schaltbild ungemein bei der Fehlersuche.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Moritz2808

Mein problem ist das wenn ich den sketch überprüfen will das jedes mal eine fehlermeldung erscheint

HotSystems

#5
Jan 26, 2018, 10:00 am Last Edit: Jan 26, 2018, 11:45 am by HotSystems
Mein problem ist das wenn ich den sketch überprüfen will das jedes mal eine fehlermeldung erscheint
Diese Fehlermeldung können wir nicht sehen....warum postest du die nicht ?

Am obigen Sketch kann ich schon mal sehen, dass das erste "#include" zu viel ist und andere fehlen.
Z.B. "#include <LiquidCrystal.h>"
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

meister_q

Zusätzlich solltest du mal über Groß und Kleinschreibung, sowie Punkte und Kommas nachdenken.

Poste doch bitte deine Fehlermeldungen hier ins Forum. Wir sind keine Hellseher.

agmue

Ich habe den Sketch an mein LCD angepaßt und an ein paar Stellen geändert. Der Compiler ist nun zufrieden und zu fubktionieren scheint es auch:

Code: [Select]
#include <Wire.h>
#include <hd44780.h> // include hd44780 library header file
#include <hd44780ioClass/hd44780_I2Cexp.h> // i/o expander/backpack class
hd44780_I2Cexp lcd; // auto detect backpack and pin mappings

#include "TimerOne.h"

int Sensor_A = A0;
int Sensor_B = A1;
int Sensor_1 = 900;
int Sensor_2 = 900;
int Zeitmesser = 0;
int Loeschen = 0;
int Start = 0;
int Stop = 0;
int Geschwindigkeit = 0;

void setup()
{
  lcd.begin(16, 2);
  lcd.setCursor(3, 0);
  lcd.print("Bereit f\xF5r");
  lcd.setCursor(2, 1);
  lcd.print("eine Messung");

  Timer1.initialize(50000);
  Timer1.attachInterrupt(Zeitkonstante);

  //Serial.begin(9600);
}

void Zeitkonstante()
{
  // Start der Zeit
  if ((Start == 1 || Start == 2) && Stop == 0)
  {
    Zeitmesser++;
  }

  // Zeit zum Löschen des Displays auf Grundstellung
  if (Loeschen > 0)
  {
    Loeschen++;
  }
  /*
  // Ausgabe der Sensorwerte
  Serial.print("Sensor_1: ");
  Serial.println(Sensor_1);
  Serial.print("Sensor_2: ");
  Serial.println(Sensor_2);
  Serial.println();
  */
}

void loop()
{
  Sensor_1 = analogRead(Sensor_A);
  Sensor_2 = analogRead(Sensor_B);

  // Messung wenn Zug aus Richtung 1 kommt
  if (Sensor_1 < 500 && Sensor_2 > 500 && Start == 0)
  {
    Start = 1;
    lcd.begin(16, 2);
    lcd.setCursor(4, 0);
    lcd.print("Messung");
    lcd.setCursor(3, 1);
    lcd.print("gestartet");
  }
  // Messung gestoppt
  if (Sensor_2 < 500 && Start == 1)
  {
    Stop = 1;
  }

  // Messung wenn Zug aus Richtung 2 kommt
  if (Sensor_2 < 500 && Sensor_1 > 500 && Start == 0)
  {
    Start = 2;
    lcd.begin(16, 2);
    lcd.setCursor(4, 0);
    lcd.print("Messung");
    lcd.setCursor(3, 1);
    lcd.print("gestartet");
  }
  // Messung gestoppt
  if (Sensor_1 < 500 && Start == 2)
  {
    Stop = 1;
  }

  // Ausgabe der Geschwindigkeit
  if (Stop == 1 && Loeschen == 0)
  {
    // v = s / t; s = Streckenlänge (in cm) / 100 * Maßstab * 3,6 * 20 (Auflösung des Interrupts)
    Geschwindigkeit = 3182 / Zeitmesser;
    Zeitmesser = 0;
    Loeschen = 1;
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Geschwindigkeit:");
    if (Geschwindigkeit < 100)
    {
      lcd.setCursor(4, 1);
      lcd.print(Geschwindigkeit);
      lcd.setCursor(7, 1);
      lcd.print("km/h");
    }
    else
    {
      lcd.setCursor(4, 1);
      lcd.print(Geschwindigkeit);
      lcd.setCursor(8, 1);
      lcd.print("km/h");
    }
  }

  // Displays löschen, Grundstellung
  if (Loeschen > 150)
  {
    Start = 0;
    Stop = 0;
    Zeitmesser = 0;
    Loeschen = 0;
    lcd.begin(16, 2);
    lcd.setCursor(3, 0);
    lcd.print("Bereit f\xF5r");
    lcd.setCursor(2, 1);
    lcd.print("eine Messung");
  }

  // Ausgabe wenn beide Sensoren auslösen = Gleis ist belegt
  if (Sensor_1 < 500 && Sensor_2 < 500 && Start == 0)
  {
    Start = 3;
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Gleis ist belegt");
  }

  // beide Sensoren wieder in Grundstellung = Gleis ist nicht mehr belegt
  if (Sensor_1 > 500 && Sensor_2 > 500 && Start == 3)
  {
    Start = 0;
    Zeitmesser = 0;
    lcd.begin(16, 2);
    lcd.setCursor(3, 0);
    lcd.print("Bereit f\xF5r");
    lcd.setCursor(2, 1);
    lcd.print("eine Messung");
  }

  // wenn nach dem Auslösen des ersten Sensors eine Zeit von 40 Sekunden überschritten wird: Grundstellung und Ausgabe "Messung ungültig"
  if (Zeitmesser > 800)
  {
    Zeitmesser = 0;
    Loeschen = 1;
    lcd.begin(16, 2);
    lcd.setCursor(3, 0);
    lcd.print("Ung\xF5ltige");
    lcd.setCursor(4, 1);
    lcd.print("Messung");
  }
}

Richtig glücklich macht mich dieser Sketch allerdings nicht, da wäre noch Luft nach oben :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

HotSystems

Richtig glücklich macht mich dieser Sketch allerdings nicht, da wäre noch Luft nach oben :)

Der komplette Thread macht mich nicht glücklich.
Wieder einmal werden unsere Antworten komplett ignoriert.

Aber schön, dass du dir die Mühe gemacht hast, im den Sketch fertig zu schreiben.
Hoffen wir, er versteht es.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

agmue

Der komplette Thread macht mich nicht glücklich.
Mich auch nicht.

Wieder einmal werden unsere Antworten komplett ignoriert.
Oder aber, wir sind zu schnell :)

Aber schön, dass du dir die Mühe gemacht hast, im den Sketch fertig zu schreiben.
War aus meiner Sicht Kleinkram ;)

Hoffen wir, er versteht es.
Ja oder ein stiller Mitleser :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Moritz2808

#10
Jan 29, 2018, 05:58 pm Last Edit: Jan 29, 2018, 06:03 pm by Moritz2808
Schonmal Entschuldigung das ich mich nichtmehr gemeldet habe habe deinen neuen Code probiert mir wird dennoch ein fehler angezeigt:

Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"

C:\Users\moppe\Documents\Arduino\1_a\1_a.ino:2:60: fatal error: hd44780.h: No such file or directory

 #include <hd44780.h> // include hd44780 library header file

                                                            ^

compilation terminated.

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

und danke für eure mühe

HotSystems

#11
Jan 29, 2018, 06:00 pm Last Edit: Jan 29, 2018, 06:02 pm by HotSystems
.....habe deinen neuen Code probiert mir wird dennoch ein fehler angezeigt:

Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"

C:\Users\moppe\Documents\Arduino\1_a\1_a.ino:2:60: fatal error: hd44780.h: No such file or directory

 #include <hd44780.h> // include hd44780 library header file
Du musst die Library auch installieren.

Quote
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Und wenn du das machen würdest, was da steht, wüsstest du was falsch ist.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Moritz2808

Manchmal sieht man auch den wald vor lauter bäumen nicht

HotSystems

Manchmal sieht man auch den wald vor lauter bäumen nicht
Wenn es dann funktioniert, ist es ja ok.

Und eine Rückmeldung lesen wir immer gern.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Moritz2808

ich hätte mich wirklich mehr darüber informieren sollen was für ein projekt ich mir aussuche. Da ich mich viel zu wenig damit auskenne ich hoffe mir kann jemand sagen was ich bei diesem error machen soll

Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"

sketch_jan29g:6: error: stray '\240' in program

  

 ^

sketch_jan29g:8: error: stray '\240' in program

  

 ^

sketch_jan29g:18: error: stray '\240' in program

  

 ^

sketch_jan29g:30: error: stray '\240' in program

    

   ^

sketch_jan29g:33: error: stray '\240' in program

    

   ^

sketch_jan29g:36: error: stray '\240' in program

  

 ^

sketch_jan29g:44: error: stray '\240' in program

    

   ^

sketch_jan29g:58: error: stray '\240' in program

  

 ^

sketch_jan29g:63: error: stray '\240' in program

    

   ^

sketch_jan29g:79: error: stray '\240' in program

    

   ^

sketch_jan29g:95: error: stray '\240' in program

    

   ^

sketch_jan29g:121: error: stray '\240' in program

    

   ^

sketch_jan29g:139: error: stray '\240' in program

    

   ^

sketch_jan29g:148: error: stray '\240' in program

    

   ^

sketch_jan29g:164: error: stray '\240' in program

    

   ^

exit status 1
stray '\240' in program

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Go Up