JSN-SR04T не работают
- Войдите на сайт для отправки комментариев
Вс, 05/06/2016 - 03:19
Ночи доброй госпада, есть сей скетч, все вроде бы хорошо, но не работают УЗ датчики 3 штуки, может в скетче где ошибка, датчики рабочие. Может кто поможет найти ошибку? Суть по срабатыванию 3х УЗ датчиков, запускаються таймеры.
#include <Ethernet.h> #include <SPI.h> #include <RTC.h> #include <SD.h> #define Relay_1_pin 38 #define Relay_2_pin 40 #define Relay_3_pin 42 #define Relay_4_pin 44 #define Relay_5_pin 46 #define Relay_6_pin 48 #define ResetPin 50 #define REQ_BUF_SZ 30 char HTTP_req[REQ_BUF_SZ] = { 0}; char req_index = 0; RTC time; long dist_1; long dist_2; long dist_3; int current_minute; int start_second; byte r1; byte r2; byte r3; byte r4; byte r5; byte r6; byte minute_tick=0; byte cycle_stage=1; bool r1_state; bool r2_state; bool r3_state; bool r4_state; bool r5_state; bool r6_state; bool log_written=false; bool SD_card; bool iswork = false; int value; File myFile; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip(192, 168, 1, 10); EthernetServer server(80); void setup() { Serial.begin(9600); time.begin(RTC_DS1307); Ethernet.begin(mac, ip); server.begin(); if (SD.begin(4)) { Serial.println("SD init done"); SD_card = true; } else { Serial.println("SD init failed"); SD_card = false; } if (SD.exists("log.txt")) { Serial.println("Log file exist"); myFile = SD.open("log.txt", FILE_WRITE); if (myFile) { myFile.print("Controller ON in "); myFile.println(time.gettime("d-m-Y, H:i:s")); myFile.close(); } } else { Serial.println("Log file doesn't exist... Trying to create"); Serial.println("Creating log.txt..."); myFile = SD.open("log.txt", FILE_WRITE); if (myFile) { myFile.print("Controller ON in "); myFile.println(time.gettime("d-m-Y, H:i:s")); } myFile.close(); if (SD.exists("log.txt")) { Serial.println("Log file Created"); SD_card = true; } else { Serial.println("Can't create file. Unknown error. Leaving procedure"); SD_card = false; } } current_minute = atoi(time.gettime("i")); pinMode(22, INPUT); pinMode(24, OUTPUT); pinMode(26, INPUT); pinMode(28, OUTPUT); pinMode(30, INPUT); pinMode(32, OUTPUT); pinMode(Relay_1_pin, OUTPUT); pinMode(Relay_2_pin, OUTPUT); pinMode(Relay_3_pin, OUTPUT); pinMode(Relay_4_pin, OUTPUT); pinMode(Relay_5_pin, OUTPUT); pinMode(Relay_6_pin, OUTPUT); r1 = 1; r1_state = false; r2 = 1; r2_state = false; r3 = 1; r3_state = false; r4 = 1; r4_state = false; r5 = 1; r5_state = false; r6 = 1; r6_state = false; } void loop() { start_mark: if (iswork) { if (atoi(time.gettime("i")) != current_minute && atoi(time.gettime("s")) == start_second) { current_minute = atoi(time.gettime("i")); Serial.print("A minute passed.. Current_minute is "); Serial.println(current_minute); delay(500); minute_tick++; } if (cycle_stage==1){ if(r1==0) { cycle_stage=2; goto start_mark; } if(!log_written){ log_insert(1, true); log_written=true; } r1_state=true; if (minute_tick==r1){ r1_state=false; log_insert(1, false); log_written=false; cycle_stage=2; minute_tick=0; } } if (cycle_stage==2){ if(r2==0) { cycle_stage=3; goto start_mark; } if(!log_written){ log_insert(2, true); log_written=true; } r2_state=true; if (minute_tick==r2){ r2_state=false; log_insert(2, false); log_written=false; cycle_stage=3; minute_tick=0; } } if (cycle_stage==3){ if(r3==0) { cycle_stage=4; goto start_mark; } if(!log_written){ log_insert(3, true); log_written=true; } r3_state=true; if (minute_tick==r3){ r3_state=false; log_insert(3, false); log_written=false; cycle_stage=4; minute_tick=0; } } if (cycle_stage==4){ if(r4==0) { cycle_stage=5; goto start_mark; } if(!log_written){ log_insert(4, true); log_written=true; } r4_state=true; if (minute_tick==r4){ r4_state=false; log_insert(4, false); log_written=false; cycle_stage=5; minute_tick=0; } } if (cycle_stage==5){ if(r5==0) { cycle_stage=6; goto start_mark; } if(!log_written){ log_insert(5, true); log_written=true; } r5_state=true; if (minute_tick==r5){ r1_state=false; log_insert(1, false); log_written=false; cycle_stage=6; minute_tick=0; } } if (cycle_stage==6){ if(r6==0) { cycle_stage=1; goto start_mark; } if(!log_written){ log_insert(6, true); log_written=true; } r6_state=true; if (minute_tick==r6){ r1_state=false; log_insert(6, false); log_written=false; cycle_stage=1; minute_tick=0; iswork=false; myFile = SD.open("log.txt"); if (myFile) { myFile.print(time.gettime("d-m-Y, H:i:s")); myFile.println(" Cycle end"); myFile.close(); } } } } else { dist_1 = request_dist(22, 24); Serial.print("dist_1 is "); Serial.println(dist_1); dist_2 = request_dist(26, 28); Serial.print("dist_2 is "); Serial.println(dist_2); dist_3 = request_dist(30, 32); Serial.print("dist_3 is "); Serial.println(dist_3);//echo, trigger if (dist_1 && dist_2 && dist_3 <= 26) { Serial.println("All of the distances is less than 5 sm, start work..."); myFile = SD.open("log.txt"); if (myFile) { myFile.print(time.gettime("d-m-Y, H:i:s")); myFile.println(" All of distances is less than 5 sm, cycle start..."); myFile.close(); } iswork = true; r1_state = true; start_second = atoi(time.gettime("s")); } } //==========================SERVER================================= EthernetClient client = server.available(); if (client) { //Serial.println("New client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } if (c == '\n' && currentLineIsBlank) { if (StrContains(HTTP_req, "GET /set?")) { int var = HTTP_req[10] - '0'; //GET /set?r2_input?123? char buf[10]; byte step_pch = 0; char * pch = strtok(HTTP_req, "?"); while (pch != NULL) { pch = strtok(NULL, "?"); step_pch++; if (step_pch == 1) { value = atoi(strtok(NULL, "?")); Serial.println(value); break; } } switch (var) { case 1: r1 = value; Serial.println("case 1"); break; case 2: r2 = value; Serial.println("case 2"); break; case 3: r3 = value; Serial.println("case 3"); break; case 4: r4 = value; Serial.println("case 4"); break; case 5: r5 = value; Serial.println("case 5"); break; case 6: r6 = value; Serial.println("case 6"); break; } client.print("OK"); goto exit_mark; } if (StrContains(HTTP_req, "GET /ajax")) { client.print(r1_state); client.print("?"); client.print(r2_state); client.print("?"); client.print(r3_state); client.print("?"); client.print(r4_state); client.print("?"); client.print(r5_state); client.print("?"); client.print(r6_state); client.print("?"); client.print(r1); client.print("?"); client.print(r2); client.print("?"); client.print(r3); client.print("?"); client.print(r4); client.print("?"); client.print(r5); client.print("?"); client.print(r6); client.print("?"); if (iswork) { client.print("Работает"); } else { client.print("Ожидает срабатывания датчиков расстояния"); } client.print("?"); client.print(time.gettime("d-m-Y H:i:s")); goto exit_mark; } //if (StrContains()) if (StrContains(HTTP_req, "GET / ")) { Serial.println("html request"); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); myFile = SD.open("relay.htm"); if (myFile) { while (myFile.available()) { client.write(myFile.read()); // send web page to client } myFile.close(); } } else if (StrContains(HTTP_req, "GET /relay.css")) { Serial.println("css request"); myFile = SD.open("relay.css"); if (myFile) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/css"); client.println("Connnection: close"); client.println(); if (myFile) { while (myFile.available()) { client.write(myFile.read()); // send web page to client } myFile.close(); } } } exit_mark: req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } digitalWrite(Relay_1_pin, r1_state); digitalWrite(Relay_2_pin, r2_state); digitalWrite(Relay_3_pin, r3_state); digitalWrite(Relay_4_pin, r4_state); digitalWrite(Relay_5_pin, r5_state); digitalWrite(Relay_6_pin, r6_state); if (digitalRead(ResetPin)) { iswork=false; r1=0; r2=0; r3=0; r4=0; r5=0; r6=0; } }//loop long request_dist(int echo, int trigger) { digitalWrite(trigger, LOW); delayMicroseconds(2); digitalWrite(trigger, HIGH); delayMicroseconds(10); digitalWrite(trigger, LOW); long duration = pulseIn(echo, HIGH); long distance_cm = duration /58; return distance_cm; } void log_insert(byte relay, bool state) { Serial.println("Inserting to log..."); myFile.close(); myFile = SD.open("log.txt", FILE_WRITE); if (myFile) { Serial.print(time.gettime("d-m-Y, H:i:s")); if (state) { Serial.print(" Relay "); Serial.print(relay); Serial.println(" HIGH"); } else { Serial.print(" Relay "); Serial.print(relay); Serial.println(" LOW"); } myFile.print(time.gettime("d-m-Y, H:i:s")); if (state) { myFile.print(" Relay "); myFile.print(relay); myFile.println(" HIGH"); } else { myFile.print(" Relay "); myFile.print(relay); myFile.println(" LOW"); } myFile.close(); Serial.println("Inserting to log file done..."); SD_card = true; } else { Serial.println("Can't open file, ERROR"); SD_card = false; } } void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str[i] = 0; } } char StrContains(char *str, const char *sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1; } } else { found = 0; } index++; } return 0; }
Про дефайнил порты, но все равно все мертво, датчики не стартуют. Может кто знает в чем может быть беда бедовая?
Сорян, проблема решина, узкие глаза перепутали Trig c Echo
Подскажите пожалуйста, а зачем использовали три ультразвуковых датчика?
Выполнение действий , при соблюдении 3х одинаковых дистанций.
аа, понятно. Я вот тоже столкнулся с определенными трудностями, хочу использовать данный датчик в качестве ростомера, но вот значения показывают не всегда верные, случайно не знаете почему?
Точно не знаю сам шаманил. Скорее всего думаю что на плате, какие то детали не по номиналу стоят