Помогите с кодом

Intr
Offline
Зарегистрирован: 15.06.2012

Здравствуйте!

Вот день уже мучаю Arduino Uno до этого даже и не видел в живую :) Так что прозьба сильно не ругать если в коде косяков много....

Вот сижу мучаю код из 2 примеров соединенные вместе...

В наличии датчик DHT11 и парочка светодиодов

В общем ситуация такая нужно просто управлять выходами (вкл\выкл) и читать с датчика температуру через com порт.....

char val = 0;
char port1 = 0;
char port2 = 0;
int p=0;

#include "DHT.h"
#define DHTPIN 2 
#define DHTTYPE DHT11   // датчик температуры и влажности DHT 11 
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);        // Подключение к порту
  delay (2000); // Дает время чтобы открыть порт
  Serial.println("Device Connected"); //Порт открыт
  
  
  dht.begin();
}

void loop () {
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  
  if( Serial.available() ) {
    port1 = Serial.read();     // Чтение порта 
    port2 = Serial.read(); 
    val = Serial.read(); 
   // Serial.print(port1); Serial.print(" "); Serial.println((int)port1);
   // Serial.print(port2); Serial.print(" "); Serial.println((int)port2);
   // Serial.println(val);
    int p1=(int)port1-48;
    int p2=(int)port2-48;
    p=p1*10+p2;
    pinMode(p,OUTPUT); 
    if( val == 'H' || val == 'h' ) 
    {
      digitalWrite(p, HIGH);
      Serial.print(p);
      Serial.println(" High"); // Выдает в порт сообщение что команда выполнена
      delay (1000); //Задержка  на всякий случай
    } 
    else if(val=='L' || val == 'l')
      {
        digitalWrite(p, LOW);
        Serial.print(p);
        Serial.println(" Low"); // Выдает в порт сообщение что команда выполнена
        delay (1000); //Задержка  на всякий случай
      }
    else 
    {
      if(val=='T' || val == 't')  // 02t идет передача значений датчика в порт
     {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C"); 
    Serial.println("Temperatura Ok"); // Выдает в порт сообщение что команда выполнена
    delay (1000); //Задержка  на всякий случай
    }
    }
  }
  delay(10);
}

 Собственно проблема в том что датчик весит на 2 порту... Тоесть если я включу порт 2 то датчику плохо может стать.Я понимаю что можно написать программу чтобы  не включала 2 порт но хочу так сказать меру предосторожности.Подскажите пожалуйста как решить эту проблему ?

maksim
Offline
Зарегистрирован: 12.02.2012

А зачем вам условие if(val=='T' || val == 't') если 2 вывод у вас занят только датчиком? Быть может сделать условие при котором если р == 2, то просто выводится значения с датчика.

maksim
Offline
Зарегистрирован: 12.02.2012
char val = 0;
char port1 = 0;
char port2 = 0;
int p=0;

#include "DHT.h"
#define DHTPIN 2 
#define DHTTYPE DHT11   // датчик температуры и влажности DHT 11 
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);        // Подключение к порту
  delay (2000); // Дает время чтобы открыть порт
  Serial.println("Device Connected"); //Порт открыт


  dht.begin();
}

void loop () {

  float h = dht.readHumidity();
  float t = dht.readTemperature();


  if( Serial.available() ) {
    port1 = Serial.read();     // Чтение порта 
    port2 = Serial.read(); 
    val = Serial.read(); 
    // Serial.print(port1); Serial.print(" "); Serial.println((int)port1);
    // Serial.print(port2); Serial.print(" "); Serial.println((int)port2);
    // Serial.println(val);
    int p1=(int)port1-48;
    int p2=(int)port2-48;
    p=p1*10+p2;
    
    if(p == DHTPIN)  // 02 идет передача значений датчика в порт
    {
      Serial.print("Humidity: "); 
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: "); 
      Serial.print(t);
      Serial.println(" *C"); 
      Serial.println("Temperatura Ok"); // Выдает в порт сообщение что команда выполнена
      delay (1000); //Задержка  на всякий случай
    }
    else{
      pinMode(p,OUTPUT); 
      if( val == 'H' || val == 'h' ) 
      {
        digitalWrite(p, HIGH);
        Serial.print(p);
        Serial.println(" High"); // Выдает в порт сообщение что команда выполнена
        delay (1000); //Задержка  на всякий случай
      } 
      else if(val=='L' || val == 'l')
      {
        digitalWrite(p, LOW);
        Serial.print(p);
        Serial.println(" Low"); // Выдает в порт сообщение что команда выполнена
        delay (1000); //Задержка  на всякий случай
      }
    }
  }
  delay(10);
}

 

Intr
Offline
Зарегистрирован: 15.06.2012

Ммм полезно спасибо большое :) что то я даже о таком и не подумал