Ovdje pročitajte kako se registrirati na forum.

Problem sa kombiniranjem sketcheva

Zapeli ste s projektom? Ovdje je pravo mjesto za postaviti pitanje. Imajte na umu da ekipa e-radionice neće uvijek i/ili redovno odgovarati na pitanja postavljena u ovom podforumu.
Odgovorite
lmarkovic#2229
Novak
Novak
Postovi: 3
Pridružen/a: pon lip 11, 2018 12:42 pm

Problem sa kombiniranjem sketcheva

Post Postao/la lmarkovic#2229 » čet vel 21, 2019 9:06 pm

Pozdrav svima,

imam neki mali projekt sa kojim sam zapeo. Vec sam istrazivao uokolo i puno se ljudi sa time muci, pa se nadam da neko od vas ima lijek :|
Imam dva sketcha koji zasebno rade, ali zajedno ne. Jedan mi preko DHT11 senzora mjeri vlagu i temperaturu te usput preko fotootpornika kolicinu svjetlosti i sve skupa ispisuje na LCD. Drugi sketch sa dva pushbuttona vrti servo motor u jednom odnosno drugom smjeru.
Trebao bih izvrsavati dva loopa u isto vrijeme, no to se ne moze. Odvojio sam te loopove u posebne funkcije, takoder nema spasa.
Znam da mi je kod katastrofa za citanje, ali mi nije bitno, samo da radi haha.. Ako itko ima ideju, spasavaj! HVALA
Evo kod:

Kod: Označite sve

#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

//senzor
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 2 // na koji pin je povezan DHT11
#define DHTTYPE DHT11
 
DHT dht(DHTPIN, DHTTYPE);

//fotootpornik
int ulaz = A0;
int otpor;

//motor
int Pin1 = 8;
int Pin2 = 9;
int Pin3 = 10;
int Pin4 = 11;
int _step=0;
boolean smjer; 


//botun
int inPin1=7;
int val1=0;
int inPin2=6;
int val2=0;

void setup() {
  //ekran
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.clear();
  lcd.home();
  lcd.print("Josipa Ljubas");
  lcd.setCursor(0,1);
  lcd.print("Luka Markovic");
  pinMode(ulaz, INPUT);
  delay(2000);
  
  //senzor
  dht.begin();

  //botun
  pinMode(inPin1,INPUT);
  pinMode(inPin2,INPUT);

}
 
void loop() {
  ispisSenzora();
 // delay(2000);
  kontrolaMotora();  
}

void ispisSenzora()
{
  //ispis na ekran
  lcd.clear();
  lcd.home();
  // očitava vlagu u varijabli h te temperaturu u varijabli t

  float h = dht.readHumidity();
  float t = dht.readTemperature();
 
  if (isnan(h) || isnan(t)) { 
    lcd.print("Neuspješno očitavanje senzora! ");
    return;
  }

  otpor=analogRead(ulaz);
  otpor=map(otpor, 0, 1023, 0, 100);
  lcd.print("Vlaga: ");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Temp: ");
  lcd.print(t);
  lcd.print(" C ");
  delay(2000);
  lcd.home();
  lcd.clear();
  lcd.print("Svjetlo: ");
  lcd.print(otpor);
  lcd.print("%");
  delay(1500);
  }
  
void kontrolaMotora()
{
    //okretanje motora botunima
  val1=digitalRead(inPin1);
  val2=digitalRead(inPin2);
  if(val1==HIGH && val2==LOW){Serial.println("Livo!"); smjer=false; vrti();}
  else if(val2==HIGH && val1==LOW){Serial.println("Desno!"); smjer=true; vrti();}
  else return;
  //delay(1000);
  }
  
void vrti()
{
switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   default: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
 } 
 if(smjer){ _step++; }else{ _step--;} 
 if(_step>7){ _step=0; } 
 if(_step<0){ _step=7; } 
 delay(1);
  }
  
domagoj#8269
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 89
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Zagreb

Re: Problem sa kombiniranjem sketcheva

Post Postao/la domagoj#8269 » čet vel 21, 2019 10:13 pm

Zašto je na kraju ispisSenzora() return a tip je void?
Avatar
dekip#3901
Hobist
Hobist
Postovi: 44
Pridružen/a: pon srp 30, 2018 10:04 pm
Lokacija: Beograd
Kontakt:

Re: Problem sa kombiniranjem sketcheva

Post Postao/la dekip#3901 » pet vel 22, 2019 7:18 pm

Prvo: stavi kod u code tagove.

Drugo: postoji samo jedan loop.

Treće: za multitasking u Arduino ekosistemu se isključivo koristi funkcija millis(). Tebi ovako MCU čeka dve sekunde između funkcija.
lmarkovic#2229
Novak
Novak
Postovi: 3
Pridružen/a: pon lip 11, 2018 12:42 pm

Re: Problem sa kombiniranjem sketcheva

Post Postao/la lmarkovic#2229 » ned vel 24, 2019 8:35 pm

Hvala svima na pomoći, sve rješeno pomoću funkcije millis().
Pozdrav :D
Odgovorite