Distanz-/Tiefenmesser mit JSN-SR40T
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

EchoLot.ino 3.3KB

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