Curs d’Arduino – Exercicis

1. LED Flash

1

2. SOS Morse.

2

3. Exercicis per al detector DHT11

#include <DHT.h>
#include <elapsedMillis.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>  //Software Serial Port

LiquidCrystal_I2C lcd(0x3F, 20, 4); //LCD, ull amb l'adreça I2C 0X3F

#define RXPIN 10
#define TXPIN 11
SoftwareSerial BT1(RXPIN, TXPIN); // RX | TX, BlueTooh

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);  //Sensor de temperatura i humitat

int maxTmp = 0;   //Màxims i Mínims
int minTmp = 999;
int maxHum = 0;
int minHum = 999;

bool bAuto = true;
#define RELEPIN 3 //On hi ha el relé connectat

elapsedMillis tReadTmp;   //Per llegir la temperatura
elapsedMillis tSendDades; //Per enviar dades al mòbil

void setup() {
  Serial.begin(9600);
  pinMode(RXPIN, INPUT);
  pinMode(TXPIN, OUTPUT);

  pinMode(RELEPIN, OUTPUT);
  digitalWrite(RELEPIN, LOW); //Relé apagat
  BT1.begin(9600);

  lcd.init();                 // initialize the lcd
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("Curs Arduino-2016");

  Wire.begin();
  dht.begin();
}

void loop() {
  String str1;
  String str2;

  if (tReadTmp > 1000)
  {
    tReadTmp = 0;
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    int h = dht.readHumidity();
    // Read temperature as Celsius
    int t = dht.readTemperature();
    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }

    maxTmp = max(t, maxTmp);
    minTmp = min(t, minTmp);
    maxHum = max(h, maxHum);
    minHum = min(h, minHum);

    str1 =  "Te:" +  String(t) + " Ma:" + String(maxTmp) + " Mi:" + String(minTmp);
    str2 =  "Hu:" +  String(h) + " Ma:" + String(maxHum) + " Mi:" + String(minHum);
    lcd.setCursor(0, 1);
    lcd.print(str1);
    lcd.setCursor(0, 2);
    lcd.print(str2);

    if (bAuto == true)
    {
      lcd.setCursor(10, 3);
      lcd.print("AUTOMATIC");
      if (t <= 20)
      {
        lcd.setCursor(0, 3);
        lcd.print("Rele: ON ");
        digitalWrite(RELEPIN, HIGH);
      }
      if (t >= 22)
      {
        lcd.setCursor(0, 3);
        lcd.print("Rele: OFF");
        digitalWrite(RELEPIN, LOW);
      }
    }
    else
    {
      lcd.setCursor(0, 3);
      lcd.print("Rele: ON ");
      lcd.setCursor(10, 3);
      lcd.print("MANUAL   ");
      digitalWrite(RELEPIN, HIGH);
    }
  }

  //------------------------------------------------------------
  //Enviem al mòbil
  if (tSendDades > 2000)
  {
    tSendDades = 0;

    BT1.println(str1);
    BT1.println(str2);
  }

  //------------------------------------------------------------
  //Bluetooh
  if (BT1.available())
  {
    char c = BT1.read();
    Serial.println(c);
    if (c == 'a')
    {
      bAuto = true;
    }
    if (c == 'm')
    {
      bAuto = false;
    }
  }
}

Comments are closed.