Distanz-/Tiefenmesser mit JSN-SR40T
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "Arduino.h"
  2. #include <LCDWIKI_GUI.h> // core graphics library
  3. //#include <LCDWIKI_SPI.h> // hardware-specific library
  4. #include <SSD1283A.h>
  5. #include "RotaryControler.h"
  6. //#include <U8g2_for_Adafruit_GFX.h>
  7. #include <Fonts/FreeMonoOblique9pt7b.h>
  8. const int trigPin = 12;
  9. const int echoPin = 10;
  10. #define BLACK 0x0000
  11. #define BLUE 0x001F
  12. #define RED 0xF800
  13. #define GREEN 0x07E0
  14. #define WHITE 0xFFFF
  15. //#define MODEL SSD1283A
  16. #define LED -1 // to +5v
  17. #define SCK 13//A1 with SCK on 13 and SDA on 11 it is 10x faster!!!
  18. #define SDA 11//A2
  19. #define MISO -1
  20. #define MOSI SDA
  21. #define CD A3
  22. #define RST A4
  23. #define CS A5
  24. static const int RotEnc_Switch_Pin = 2;
  25. static const int RotEnc_Clk_Pin = 3;
  26. static const int RotEnc_Dta_Pin = 4;
  27. static const int Measure_Pin = 8;
  28. String lastDistance = "";
  29. SSD1283A mylcd( CS, CD, RST, LED); //software spi,model,cs,cd,miso,mosi,reset,clk,led
  30. //U8G2_FOR_ADAFRUIT_GFX u8g2_gfx;
  31. RotaryControler RotaryControler(RotEnc_Dta_Pin, RotEnc_Clk_Pin, RotEnc_Switch_Pin);
  32. ExEzButton MeasureBtn(Measure_Pin, false, 2000);
  33. void setup()
  34. {
  35. Serial.begin(115200);
  36. pinMode(trigPin, OUTPUT);
  37. pinMode(echoPin, INPUT);
  38. // u8g2_gfx.begin(mylcd);
  39. mylcd.init();
  40. mylcd.fillScreen(BLACK);
  41. mylcd.setFont(&FreeMonoOblique9pt7b);
  42. pinMode(Measure_Pin, INPUT);
  43. pinMode(RotEnc_Switch_Pin, INPUT);
  44. MeasureBtn.setDebounceTime(50);
  45. RotaryControler.setDebounceTime(50);
  46. }
  47. void loop()
  48. {
  49. // mylcd.Fill_Screen(BLACK);
  50. // mylcd.Fill_Screen(WHITE);
  51. // mylcd.Fill_Screen(255, 0, 0);
  52. // mylcd.Fill_Screen(0, 255, 0);
  53. // mylcd.Fill_Screen(0, 0, 255);
  54. // delay(3000);
  55. // mylcd.Fill_Screen(0, 0, 0);
  56. // delay(1000);
  57. // mylcd.Fill_Screen(255, 255, 255);
  58. // delay(1000);
  59. // mylcd.Fill_Screen(0xF800);
  60. // delay(1000);
  61. // mylcd.Fill_Screen(0x07E0);
  62. // delay(1000);
  63. // mylcd.Fill_Screen(0x001F);
  64. // delay(3000);
  65. MeasureBtn.loop();
  66. RotaryControler.loop();
  67. // mylcd.Set_Text_Mode(1);
  68. mylcd.setTextColor(WHITE);
  69. // mylcd.Set_Text_Back_colour(RED);
  70. mylcd.setTextSize(1);
  71. if (RotaryControler.isSwitchPressed()) {
  72. Serial.println("RotaryEnc SwitchPressed");
  73. }
  74. if (MeasureBtn.isPressing()) {
  75. digitalWrite(trigPin, LOW);
  76. delayMicroseconds(5);
  77. digitalWrite(trigPin, HIGH);
  78. delayMicroseconds(20);
  79. digitalWrite(trigPin, LOW);
  80. long duration = pulseIn(echoPin, HIGH);
  81. long distance = duration * 0.03432 / 2;
  82. // Serial.print("duration:");
  83. // Serial.println(duration);
  84. // Serial.print("Distance:");
  85. Serial.println(distance);
  86. char buf[50];
  87. sprintf(buf, "%lu cm", distance);
  88. // if (!lastDistance.equals(buf)) {
  89. mylcd.fillRect(0, 48, 130, 20, RED);
  90. // char *s = &String(buf)[0];
  91. // int16_t w = 0, h = 0;
  92. // u8g2_gfx.setFont(u8g2_font_helvB12_tf);
  93. // w = u8g2_gfx.getUTF8Width(s);
  94. // h = u8g2_gfx.getFontAscent() - u8g2_gfx.getFontDescent();
  95. // u8g2_gfx.setForegroundColor(WHITE);
  96. // u8g2_gfx.setCursor(30, 50);
  97. // mylcd.println(s);
  98. mylcd.setTextColor(WHITE);
  99. mylcd.setCursor(30, 50);
  100. mylcd.println(buf);
  101. delay(100);
  102. // lastDistance = buf;
  103. // }
  104. delay(200);
  105. } else {
  106. mylcd.fillScreen(BLACK);
  107. }
  108. }
  109. //void setup() {
  110. // Serial.begin(115200);
  111. // pinMode(trigPin, OUTPUT);
  112. // pinMode(echoPin, INPUT);
  113. //}
  114. //void loop() {
  115. // mylcd.Set_Text_Mode(0);
  116. // mylcd.Fill_Screen(0x0000);
  117. // mylcd.Set_Text_colour(RED);
  118. // mylcd.Set_Text_Back_colour(BLACK);
  119. // mylcd.Set_Text_Size(2);
  120. // mylcd.Print_String("Hello World!", 0, 0);
  121. // digitalWrite(trigPin, LOW);
  122. // delayMicroseconds(5);
  123. //
  124. // digitalWrite(trigPin, HIGH);
  125. // delayMicroseconds(20);
  126. // digitalWrite(trigPin, LOW);
  127. //
  128. // long duration = pulseIn(echoPin, HIGH);
  129. // long distance = duration * 0.03432 / 2;
  130. //
  131. // Serial.print("duration:");
  132. // Serial.println(duration);;
  133. //
  134. // Serial.print("Distance:");
  135. // Serial.println(distance);
  136. // delay(100);
  137. //}