tom.vitek
Vytvořené odpovědi
-
AutorPříspěvky
-
tom.vitekÚčastník
Prosím tě das mi na tebe tel kontakt nebo facebook ? funguje to přesně naopak než řikas
tom.vitekÚčastníkZdravím, mám tu prosím další problém se kterým si nevím rady:
V tomto programu je ovládání výstupního relé pomocí teploty – funguje samo automaticky
a dále je tu, že když sepnu tlačítko tak by se mělo sepnout i relé. A tady je ten kamen urazu po nahraní teplota automaticky řidí relé, ale když manualně zmačknu tlačítko abych seplo relé,když není seplé tak tato funkce nefunguje. Myslím že chyba bude třeba v rozmístění dané části programu nebo takoveho něco.Je možné že když jsou 2 IF v programu tak jedno program bere jako to hlavní a druhé podřadné?
#include <DHT.h>
#define DHT1PIN 7 //teplota
#define DHT2PIN 6 // teplota 2
#define DHT1TYPE DHT22 //definuje typ senzoru
#define DHT2TYPE DHT22 //definuje typ senzoru
DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
const int buttonPin1 = 50; // kam je připojeno tlačítko
const int relePin1 = 30; // kam je připojeno rele
int buttonState = 0;void setup() {
Serial.begin(9600);
pinMode(relePin1, OUTPUT);
pinMode(buttonPin1,INPUT);
dht1.begin();
dht2.begin();
}void loop() {
buttonState = digitalRead(buttonPin1);
if (buttonState == HIGH) { // zapneme relé:
digitalWrite(relePin1, LOW);
}
else {
digitalWrite(relePin1, HIGH);
} // vypneme relé:
//automatické ovladani pomoci teploty
if (dht1.readTemperature() >= 30) {
digitalWrite(relePin1, LOW);
}else{
if (dht1.readTemperature() <= 28)
digitalWrite(relePin1, HIGH);
}
//snímani teploty
void teplotavlhkost();
delay(4000);
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
if (isnan(t1) || isnan(h1)) {
Serial.println(„Failed to read from DHT #1“);
}
if (isnan(t2) || isnan(h2)) {
Serial.println(„Failed to read from DHT #2“);
}
Serial.print(„T1:“);
Serial.print(dht1.readTemperature(),1);
Serial.print((char)223); // vypíše znak ° na displej
Serial.print(„C „);
}tom.vitekÚčastníkje to tak! díky moc , takhle to vypadá a funguje to 🙂 ještě jednou díky
if (dht1.readTemperature() >= 25.0)
{
digitalWrite(relePin1, LOW);
if (dht1.readTemperature() <= 20.0)
{
digitalWrite(relePin1, HIGH);
}
}tom.vitekÚčastníkaha, díky na radu ale i když jsem se smazal tak program píše tuhle chybu :
celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ tokena pokud to napisu takhle :
if (dht1.readTemperature > 25.0)
{
digitalWrite(relePin1, LOW);
if (dht1.readTemperature < 20.0)
{
digitalWrite(relePin1, HIGH);
}
}tak chybu to píše :
error: invalid use of member function (did you forget the ‚()‘ ?)tom.vitekÚčastníkAhoj, ještě bych tu měl jeden problém :
chci pomocí teploty ovládávat relé na který je napojen větrák
když je teplota => 25°C tak sepni větrák (relé)
když je teplota =< 20°C tak vypni větrák (relé)program:
if (dht1.readTemperature => „25.0“)
{
digitalWrite(relePin1, LOW);
if (dht1.readTemperature =< „20.0“)
{
digitalWrite(relePin1, HIGH);
}
}napsal sem to nějak takhle, ale program mi nebere ty hodnoty
chyba říka:
celek_pokus_vetrak.ino: In function ‚void loop()‘:
celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ token
celek_pokus_vetrak.ino:56:30: error: expected primary-expression before ‚<‚ token
Chyba kompilace.program je vytržen z celého programu zde:
//Projekt Inteligentní skleník Vítek Tomáš
#include <DHT.h> // knihovna dht teploty
#define DHT1PIN 7 //teplota
#define DHT2PIN 6 // teplota 2
#define DHT1TYPE DHT22 //definuje typ senzoru
#define DHT2TYPE DHT22 //definuje typ senzoru
DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
int temt6000Pin = A0; // senzor svetla
int dirpin = 8; // motorek dir
int steppin = 9; // motorek stepbyte sensorInterrupt = 0; // 0 = digital pin 2 //zacatek prutokomer
byte sensorPin = 2;
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime; // konec prutokomer
//———————-POKUS ovladani vetraku —————————–
const int buttonPin1 = 50; // kam je připojeno tlačítko
const int relePin1 = 30; // kam je připojeno rele
int buttonState = 0;
//————————————————————–
void setup() {
Serial.begin(9600);
pinMode(relePin1, OUTPUT); // POKUS rele jako vystup na pin
pinMode(buttonPin1,INPUT); //POKUS tlačítka jako vstup:
pinMode(dirpin, OUTPUT); // motorek
pinMode(steppin, OUTPUT); // motorek
pinMode(sensorPin, INPUT); //zacatek prutokomer
digitalWrite(sensorPin, HIGH);pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // konec prutokomer
dht1.begin(); // zacni merit teplotu 1
dht2.begin(); // zacni merit teplotu 2
}void loop() {
//ovládání relé 1 pomocí tlačítka —————–
void vetrak1();
buttonState = digitalRead(buttonPin1);
if (buttonState == HIGH) { // zapneme relé:
digitalWrite(relePin1, LOW);
}else {
digitalWrite(relePin1, HIGH); } // vypneme rele
//ovládání větráku pomocí teploty POKUS ————–
if (dht1.readTemperature => „25.0“)
{
digitalWrite(relePin1, LOW);
if (dht1.readTemperature =< „20.0“)
{
digitalWrite(relePin1, HIGH);
}
}
//——————–prutokomer——————————————–
if((millis() – oldTime) > 1000) // Only process counters once per second
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() – oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
unsigned int frac;
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
//———————-lcd——————————-
clearLCD();
backlightOn();
unsigned int frac; // deklarace promere frac pro prutokomer
//————————————————
selectLineOne();
delay(100);
Serial.print(„T1:“);
Serial.print(dht1.readTemperature(),1);
Serial.print((char)223); // vypíše znak ° na displej
Serial.print(„C „);
Serial.print(„T2:“);
Serial.print(dht2.readTemperature(),1);
Serial.print((char)223); // vypíše znak ° na displej
Serial.print(„C“);
delay(500);
//————————————————
selectLineTwo();
delay(100);
Serial.print(„Vl:“);
Serial.print(dht1.readHumidity(),1);
Serial.print(„% „);
Serial.print(„V2:“);
Serial.print(dht2.readHumidity(),1);
Serial.print(„%“);
delay(500);
//————————————————
selectLineThree();
delay(100);
Serial.print(„VP:“);
Serial.print(analogRead(A1)/11,1);
Serial.print(„% „);
Serial.print(„S:“);
Serial.print(analogRead(temt6000Pin)/11,1);
Serial.print(„%“);
delay(500);
//———————————————
selectLineFour();
delay(100);
Serial.print(„P:“);
Serial.print(int(flowRate)); // Print the integer part of the variable
Serial.print(„.“); // Print the decimal point
frac = (flowRate – int(flowRate)) * 10;
Serial.print(frac, DEC) ; // Print the fractional part of the variable
Serial.print(„L/min“);
Serial.print(„Pc“); // Output separator
Serial.print(totalMilliLitres);
Serial.println(„mL“);
delay(5000);
//——————————————–
}
//SerialLCD Functions
void selectLineOne(){ //puts the cursor at line 0 char 0.
Serial.write(0xFE); //command flag
Serial.write(128); //position
}
void selectLineTwo(){ //puts the cursor at line 2 char 0.
Serial.write(0xFE); //command flag
Serial.write(192); //position
}
void selectLineThree(){ //puts the cursor at line 3 char 0.
Serial.write(0xFE); //command flag
Serial.write(148); //position
}
void selectLineFour(){ //puts the cursor at line 4 char 0.
Serial.write(0xFE); //command flag
Serial.write(212); //position
}
void goTo(int position) { //position = line 1: 0-19, line 2: 20-39, etc, 79+ defaults back to 0
if (position<20){ Serial.write(0xFE); //command flag
Serial.write((position+128)); //position
}else if (position<40){Serial.write(0xFE); //command flag
Serial.write((position+128+64-20)); //position
}else if (position<60){Serial.write(0xFE); //command flag
Serial.write((position+128+20-40)); //position
}else if (position<80){Serial.write(0xFE); //command flag
Serial.write((position+128+84-60)); //position
} else { goTo(0); }
}
void clearLCD(){
Serial.write(0xFE); //command flag
Serial.write(0x01); //clear command.
}
void backlightOn(){ //turns on the backlight
Serial.write(0x7C); //command flag for backlight stuff
Serial.write(157); //light level.
}
void backlightOff(){ //turns off the backlight
Serial.write(0x7C); //command flag for backlight stuff
Serial.write(128); //light level for off.
}
void backlight50(){ //sets the backlight at 50% brightness
Serial.write(0x7C); //command flag for backlight stuff
Serial.write(143); //light level for off.
}
void serCommand(){ //a general function to call the command flag for issuing all other commands
Serial.write(0xFE);
}
//————–motorek1————————–
void motor1(){
int i;
digitalWrite(dirpin, LOW); // Nastaveni smeru
delay(100);
for (i = 0; i<4000; i++) // otočení o 4000 kroků
{
digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
delayMicroseconds(500); // rychlost otáček
}
digitalWrite(dirpin, HIGH); // Nastaveni smeru
delay(10000);
for (i = 0; i<4000; i++) // otočení o 4000 kroků
{
digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
delayMicroseconds(500); // This delay time is close to top speed for this
}
}
// particular motor. Any faster the motor stalls.
//————motorek2——————————–
//————motorek3———————————
//————vetrak1——————————-
//————-vetrak2——————————-
//———————topeni———————-
//——————–LED-paska——————–
// —————-senzor-světla——————-
void svetlo(){
int value = analogRead(temt6000Pin);
}
//—————vlhkost-půdy————————–
void vlhkostpudy(){
int sensorValue = analogRead(A1);
}
//———teplota 1,2 — vlhkost 1,2 —————–
void teplotavlhkost(){
delay(4000);
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
if (isnan(t1) || isnan(h1)) {
Serial.println(„Failed to read from DHT #1“);
}
if (isnan(t2) || isnan(h2)) {
Serial.println(„Failed to read from DHT #2“);
}
}
//————-prutokomer——————–
void pulseCounter()
{
pulseCount++;
}Díky
tom.vitekÚčastníkještě dotaz: co kdybych tyto čidla měl 2 a chtěl bych jejich hodnoty průměrovat… máte s tím zkušenosti ?
tom.vitekÚčastníkjo, měl jste pravdu bylo to knihovnou. Díky moc už to měří jak má 🙂
tom.vitekÚčastníktom.vitekÚčastníkNahrál jsem program bez žádneho připojení a nahrálo se to, pak jsem to zapojil a motorek funguje. \Díky 🙂
-
AutorPříspěvky