• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Poprawność kodu
#1
Witam wszystkich użytkowników. Czy mógłby ktoś doradzić odnośnie poniższego kodu? Co jest z nim nie tak że zawiesza całe Arduino i w ogóle nic nie działa? :Smile

Kod:
#include "DHT.h"
#include "U8glib.h"

#define LED_INFO_RADIATOR 4
#define LED_INFO_VAPORGENERATOR 13
#define LED_INFO_DEAD_ZONE 1
#define DHTPIN 2
#define DHTTYPE DHT22

const int stateX = 0;
const int stateA = 1;
const int stateB = 2;
const int stateC = 3;

int state = stateA;

const int sizeRangeX = 2;
const int sizeRangeB = 2;

int humidity;
float temperature;

unsigned long currentTime = 0;
unsigned long rememberedTime = 0;

int relayPin = 8;
int relayPin2 = 12;
int relayPin3 = 7;
int relayPin4 = 9;

int potentiometer = A0;
int valuePotentiometer = 0;
int data[5];
int i = 0;
int average;

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C(TWI)
DHT dht(DHTPIN, DHTTYPE, 6);
char str[10];

void setup()
{
   dht.begin();
   pinMode(potentiometer, INPUT);
   pinMode(relayPin, OUTPUT);
   pinMode(relayPin2, OUTPUT);
   pinMode(relayPin3, OUTPUT);
   pinMode(relayPin4, OUTPUT);
   digitalWrite(relayPin, HIGH);
   digitalWrite(relayPin2, HIGH);
   digitalWrite(relayPin3, HIGH);
   digitalWrite(relayPin4, HIGH);
   pinMode(LED_INFO_RADIATOR, OUTPUT);
   pinMode(LED_INFO_VAPORGENERATOR, OUTPUT);
   pinMode(LED_INFO_DEAD_ZONE, OUTPUT);
}

void decreaseHumidity(void)
{
   u8g.firstPage();
   do {
       u8g.setFont(u8g_font_helvB08);
       u8g.drawStr(2, 27, "Zmniejszanie wilgotnosci!");

       u8g.drawStr(2, 42, "Wilgotnosc :");
       u8g.drawStr(80, 42, dtostrf(humidity, 5, 2, str));
       u8g.drawStr(110, 42, "%");

       u8g.drawStr(2, 57, "Wilg. zad.:");
       u8g.drawStr(80, 57, dtostrf(valuePotentiometer, 5, 2, str));
       u8g.drawStr(110, 57, "%");
   } while (u8g.nextPage());
}

void increaseHumidity(void)
{
   u8g.firstPage();
   do {
       u8g.setFont(u8g_font_helvB08);
       u8g.drawStr(2, 27, "Zwiekszanie wilgotnosci!");

       u8g.drawStr(2, 42, "Wilgotnosc :");
       u8g.drawStr(80, 42, dtostrf(humidity, 5, 2, str));
       u8g.drawStr(110, 42, "%");

       u8g.drawStr(2, 57, "Wilg. zad.:");
       u8g.drawStr(80, 57, dtostrf(valuePotentiometer, 5, 2, str));
       u8g.drawStr(110, 57, "%");
   } while (u8g.nextPage());
}
void deadZone(void)
{
   u8g.firstPage();
   do {
       u8g.setFont(u8g_font_helvB08);
       u8g.drawStr(2, 27, "Strefa Nieczulosci");

       u8g.drawStr(2, 42, "Wilgotnosc :");
       u8g.drawStr(80, 42, dtostrf(humidity, 5, 2, str));
       u8g.drawStr(110, 42, "%");

       u8g.drawStr(2, 57, "Wilg. zad.:");
       u8g.drawStr(80, 57, dtostrf(valuePotentiometer, 5, 2, str));
       u8g.drawStr(110, 57, "%");
   } while (u8g.nextPage());
}

static void turnOnRadiator()
{
   digitalWrite(relayPin2, LOW);
   digitalWrite(LED_INFO_RADIATOR, HIGH);
}
static void turnOffRadiator()
{
   digitalWrite(relayPin2, HIGH);
   digitalWrite(LED_INFO_RADIATOR, LOW);
}
static void turnOnFan()
{
   digitalWrite(relayPin3, LOW);
   digitalWrite(relayPin4, LOW);
}
static void turnOffFan()
{
   digitalWrite(relayPin3, HIGH);
   digitalWrite(relayPin4, HIGH);
}

static void turnOnVaporGenerator()
{
   digitalWrite(relayPin, LOW);
   digitalWrite(LED_INFO_VAPORGENERATOR, HIGH);
}

static void turnOffVaporGenerator()
{
   digitalWrite(relayPin, HIGH);
   digitalWrite(LED_INFO_VAPORGENERATOR, LOW);
}
static void turnOffDeadZone()
{
   digitalWrite(LED_INFO_DEAD_ZONE, LOW);
}
static void turnOnDeadZone()
{
   digitalWrite(LED_INFO_DEAD_ZONE, HIGH);
}

int potentiometerMeasurement()
{
   data[i] = analogRead(A0);
   valuePotentiometer = map(data[i], 0, 1023, 0, 100);

   i = (i + 1) % 5;
   average = 0;

   for (int j = 0; j < 5; j++)
       average += data[j];

   average /= 5.0;
}

void timing()
{
   currentTime = millis();

   if (currentTime - rememberedTime >= 50UL) {

       rememberedTime = currentTime;
   }
}

void conditionIncreaseHumidity()
{
   turnOffFan();
   turnOnRadiator();
   turnOffVaporGenerator();
   turnOffDeadZone();
}
void conditionDecreaseHumidity()
{
   turnOnFan();
   turnOffRadiator();
   turnOnVaporGenerator();
   turnOffDeadZone();
}
void conditionDeadZone()
{
   turnOffVaporGenerator();
   turnOffRadiator();
   turnOffFan();
   turnOnDeadZone();
}

int getNewState()
{
   int value = potentiometerMeasurement();

   int stateXLeftMin = humidity - sizeRangeB - sizeRangeX;
   int stateXLeftMax = humidity - sizeRangeB;

   int stateXRightMin = humidity + sizeRangeB;
   int stateXRightMax = humidity + sizeRangeB + sizeRangeX;

   if (value >= stateXLeftMin && value <= stateXLeftMax)
       return stateX;
   if (value >= stateXRightMin && value <= stateXRightMax)
       return stateX;

   if (value < stateXLeftMin)
       return stateA;
   if (value > stateXRightMax)
       return stateC;

   return stateB;
}

void setStateA()
{
   if (state == stateA)
       return;

   u8g.firstPage();
   do {
       increaseHumidity();
   } while (u8g.nextPage());

   conditionIncreaseHumidity();
}

void setStateB()
{
   if (state == stateB)
       return;
   do {
       decreaseHumidity();
   } while (u8g.nextPage());

   conditionDecreaseHumidity();
}

void setStateC()
{
   if (state == stateC)
       return;

   u8g.firstPage();
   do {
       deadZone();
   } while (u8g.nextPage());

   conditionDeadZone();
}

void loop()
{

   humidity = dht.readHumidity();
   temperature = dht.readTemperature();

   timing();
   potentiometerMeasurement();

   int newState = getNewState();

   switch (newState) {
   case stateA:
       setStateA();
       break;
   case stateB:
       setStateB();
       break;
   case stateC:
       setStateC();
       break;
   }
}
 
Odpowiedź
  


Wiadomości w tym wątku
Poprawność kodu - przez Automatyk231 - 25-12-2018, 17:31
RE: Poprawność kodu - przez kaczakat - 25-12-2018, 22:11
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 01:00
RE: Poprawność kodu - przez es2 - 26-12-2018, 12:03
RE: Poprawność kodu - przez bullseye - 26-12-2018, 14:44
RE: Poprawność kodu - przez es2 - 26-12-2018, 15:04
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 13:51
RE: Poprawność kodu - przez es2 - 26-12-2018, 13:59
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 15:01
RE: Poprawność kodu - przez es2 - 26-12-2018, 15:07
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 15:12
RE: Poprawność kodu - przez es2 - 26-12-2018, 15:19
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 15:23
RE: Poprawność kodu - przez es2 - 26-12-2018, 16:01
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 16:03
RE: Poprawność kodu - przez es2 - 26-12-2018, 16:08
RE: Poprawność kodu - przez Automatyk231 - 26-12-2018, 16:16
RE: Poprawność kodu - przez kaczakat - 27-12-2018, 00:34
RE: Poprawność kodu - przez Automatyk231 - 27-12-2018, 12:35

Skocz do:


Przeglądający: 1 gości