1 | // --------------------------------------------------------------------------- |
---|
2 | // Ultraschall mit TM1637-Anzeige, |
---|
3 | // beachte: Bei Verwendung von "NewPing" und "tone()" kommt es zum Konflikt. |
---|
4 | // Daher wird hier "NewPing" nicht verwendet sondern unser selbst gebastelter Sketch |
---|
5 | // --------------------------------------------------------------------------- |
---|
6 | |
---|
7 | #include "SevenSegmentTM1637.h" // inkludieren der Display-Library |
---|
8 | |
---|
9 | int TRIGGER_PIN = 12; // Pin-Definition |
---|
10 | #define ECHO_PIN 11 // alternative Pin-Definition, benoetigt weniger Speicherplatz |
---|
11 | |
---|
12 | #define PIN_CLK 4 // wie oben |
---|
13 | #define PIN_DIO 5 // wie oben |
---|
14 | |
---|
15 | SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); // Einbinden des 4x7-Segment-Displays |
---|
16 | |
---|
17 | void setup() { |
---|
18 | |
---|
19 | display.begin(); // initialisieren des Displays |
---|
20 | |
---|
21 | pinMode(TRIGGER_PIN, OUTPUT); |
---|
22 | pinMode(ECHO_PIN, INPUT); |
---|
23 | |
---|
24 | } |
---|
25 | |
---|
26 | void loop() { |
---|
27 | |
---|
28 | delay(100); |
---|
29 | noTone(8); // der Lautsprecher muss an Pin 8 angeschlossen werden |
---|
30 | |
---|
31 | digitalWrite(TRIGGER_PIN, LOW); // Erzeugen des Triggerimpulses (Ultraschall) |
---|
32 | delayMicroseconds(10); |
---|
33 | digitalWrite(TRIGGER_PIN, HIGH); |
---|
34 | delayMicroseconds(15); |
---|
35 | digitalWrite(TRIGGER_PIN, LOW); |
---|
36 | |
---|
37 | long zeit = pulseIn(ECHO_PIN, HIGH); // misst die Impulsdauer, beginnend mit High bis Low in micro-Sekunden |
---|
38 | long d = zeit*0.0343/2; // berechnet die Distanz (wurde besprochen!) |
---|
39 | display.clear(); // alte Anzeige loeschen |
---|
40 | display.print(d); // aktuelle Distanz anzeigen |
---|
41 | |
---|
42 | if (d>=60) { |
---|
43 | display.setBacklight(20); // Display soll schwach leuchten (20) |
---|
44 | } |
---|
45 | |
---|
46 | if (d<60) { |
---|
47 | display.setBacklight(100); // Display "volle Pulle" (100) |
---|
48 | tone(8,map(d,15,60,2000,150)); // die map-Anweisung berechnet die Frequenz (Tonhoehe) |
---|
49 | |
---|
50 | if (d<15) { |
---|
51 | tone(8,800); delay(100); tone(8,400,100); display.blink(); // Intervall-Ton zuerst (Gefahr), dann das Blinken. |
---|
52 | // anstelle des Intervalltones kann man auch eine Ansage ueber das Ton-Modul erzeugen |
---|
53 | } // drittes "if" Ende |
---|
54 | } // zweites "if" Ende |
---|
55 | |
---|
56 | } // Loop Ende |
---|