
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> > > Hier noch eine frage. > > warum gehen wenn die temperatur steigt die relais nacheinander an und bleiben alle an erst wenn die temperatur sink gehen nach einander die jeweiligen relais wieder aus. > > ich will aber das jeweils nur ein relais angeht. > > Hallo, > anstelle der Temperatur gib zum Testen einen festen Wert vor. > Wenn jetzt nur ein Relais schaltet, ist die Ausgaberoutine in Ordnung. also es ist ja alles in ordnung bis darauf das wenn > > #Lüfter > 'Einfügung für Test ohne Temperatur > rel = 1 'Relais1, =4 für Relais3, =8 für Relais4, usw. > goto next > #zurück > return also es ist ja alles in ordnung bis darauf: temp =z.B.2540 rel8=an dann lasse ich temp steig sagen wir auf 2650 dann geht rel7 an aber rel8 eben nicht aus und das soll es aber. bei temp >3200 sind alle relais an es soll aber nur rel1 an sein und alle andern wieder aus > > rel = 0 > > if temperatur >3200 then rel1=on > > if temperatur >3100 and <=3200 then rel2=on > > if temperatur >3000 and <=3100 then rel3=on > > if temperatur >2900 and <=3000 then rel4=on > > if temperatur >2800 and <=2900 then rel5=on > > if temperatur >2700 and <=2800 then rel6=on > > if temperatur >2600 and <=2700 then rel7=on > > if temperatur >2500 and <=2600 then rel8=on > > goto next > > #zurück > > return > > Weitere Möglichkeiten > Sicherstellen, dass nur ein Relais schaltet. > > ' rel = 0 entfällt > 'Bitmuster auf rel setzen > if temperatur >3200 then rel = &B 00000001 > if temperatur >3100 and <=3200 then rel=&B 00000010 > usw. das geht bei mir nicht weil ich erst alle relais setzen mus und dan erst weiter geben will mein fertiges programm soll dann ca so aussehen (wobei der heizer und der befeuchter schon 1A funktionieren nur der rest noch nicht) '-------------------------------------------------------------- 'Digitalports define Clock Port[1] 'Serial clock input für SHT75 define Data Port[2] 'Serial data für SHT75 define DS Port[3]'DATA IN für Relaisplatine define SH Port[4] 'Shift CLK für Relaisplatine define ST Port[5] 'Stotre CLK für Relaisplatine define Tür port[6] 'Türschalter auf/zu define Licht port[7] 'Lichtstatus an/aus define FREI port[8] 'Frei define lcd_rs port[14] 'LCD-Port define lcd_rw port[13] 'LCD-Port define lcd_e port[15] 'LCD-Port define lcd_port byteport[2] 'LCD-Port 'Variablen define tempW word[1] 'Überlappung mit Byte 1 & 2 !!!! define temp byte[1] 'temporäres Datenbyte define temp2 byte[2] 'temporäres Datenbyte define i byte[3] define ack byte[4] define dataW word[3] define dataWhi byte[5] define dataWlo byte[6] define Temperatur word[4] define Feuchte word[5] define tempW2 word[6] define rel byte[13] 'Byte-Puffer für rel1 bis rel8 define rel1 bit[97] 'Relais 1 define rel2 bit[98] 'Relais 2 define rel3 bit[99] 'Relais 3 define rel4 bit[100] 'Relais 4 define rel5 bit[101] 'Relais 5 define rel6 bit[102] 'Relais 6 define rel7 bit[103] 'Relais 7 define rel8 bit[104] 'Relais 8 define rn byte[14] 'Relaisnummer define lcd_buf byte[15] define lcd_param byte[16] define aktzeit Word[9] '_____________________________________PROGRAMM______________________________________________________________ gosub SHTinit rel=0 '____________________________________________TEMPERATURSENSOR________________________________________________________ #messen Temperatur = SHTgettemp Feuchte = SHTgethyg put 12 print "Temperatur:", print Temperatur '/100;",";abs((Temperatur/10))mod 10;abs(Temperatur mod 10);"°C" print "Feuchte: ", if Feuchte>=0 then print Feuchte else print "Fehler" '/10;",";Feuchte mod 10;"%rH" else print "Fehler" print minute; ":"; second pause 50 #Lüfter rel5=off rel6=off rel7=off rel8=off if temperatur >2700 then gosub r8 if temperatur >2600 and <=2700 then gosub r7 if temperatur >2500 and <=2600 then gosub r6 if temperatur <=2500 then gosub r5 'Relais: 5=stufe 1 temp<23°C, 6=stufe 2 temp>23°C, 7=stufe 3 Temp>25°C, 8=stufe 4 temp>=28°C #Heizer 'ok if temperatur >= 2200 then gosub r2aus' temp <=17°C an, temp>= 22°C aus if temperatur <= 1700 then gosub r2 #Befeuchter 'OK if feuchte >= 800 then gosub r3aus'RLF <= 30% an, RLF >=60% aus if feuchte <= 750 then gosub r3 #LichtTimer rel1=off aktzeit = hour *100 + minute if aktzeit >= 0001 and <=0002 then gosub r1 #WasserTimer rel4=off aktzeit = hour *100 + minute if aktzeit >= 0003 and <=0004 then gosub r4 goto next '______________________________________________________RELAIS START________________________________________________ #r1 rel1=on return #r2 rel2=on return #r2aus rel2=off return #r3 rel3=on return #r3aus rel3=off return #r4 rel4=on return #r5 rel5=on return #r6 rel6=on return #r7 rel7=on return #r8 rel8=on return #next gosub shift pulse ST goto messen #shift 'Routine zum seriellen Senden der Daten zur Scheiberegistererweiterung for rn=7 to 0 step -1 DS=(rel shr rn) and 1 pulse SH next return '____________________________________________________RELAIS ENDE_________________________________________________ #SHTinit deact Data Clock = 0 for i=0 to 10 pulse Clock return #SHTstart Clock =-1 Data = 0 Clock = 0 Clock =-1 deact Data Clock = 0 return #SHTwrite for i=0 to 7 if (temp shl i) and &h80 then deact Data else Data = 0 pulse Clock next i deact Data Clock = -1 temp=(Data=0) Clock =0 return temp #SHTread temp=0 for i=0 to 7 Clock =-1 temp=(temp shl 1) or (Data and 1) Clock = 0 next i if ack then Data = 0 else deact Data pulse Clock deact Data return temp #SHTreadint tempW = timer #SHTwloop if timer-tempW>=50 then return &hF000 if Data then goto SHTwloop ack = 1 dataWhi=SHTread 'High-Byte ack = 0 dataWlo=SHTread 'Low-Byte return dataW #SHTgettemp gosub SHTstart temp = &b00011 : gosub SHTwrite dataW = SHTreadint-4000 return dataW #SHTgethyg gosub SHTstart temp = &b00101 : gosub SHTwrite Feuchte=SHTreadint if Feuchte and &h8000 then return -1 tempW = Feuchte shr 4 i = Feuchte mod 16 looktab shtab,tempW,tempW2 tempW = tempW - 1 looktab shtab,tempW,tempW tempW2 = ((tempW2 - tempW) * i) shr 4 Feuchte = tempW + tempW2 return Feuchte table shtab "sht.tab" |
| Antwort schreiben |