Gå til innhold

Hjemmeautomasjon - DIY Arduino


Anbefalte innlegg

Har holdt på en stund nå med å lage lys styring i heimen og tenkte at det var vel på tide å legge opp litt her og få litt feedback og tips på kodingen.

 

Morroa begynte med at jeg kjøpt en MultiTrx fra mr. Skagemo http://skagmo.gotdns...trx_productpage

https://www.diskusjon.no/index.php?showtopic=1269805&view=findpost&p=16373715

 

Han har laget egen server og interface men jeg ville gjøre det litt anerledes, nemlig ha en Arduino som tar seg av alle auto funksjoner, routing og interface mot Android.

 

Jeg kan og skrive kode men jeg er ingen programmerer, derfor gjør jeg sikkert ting litt tungvint og ikke på letteste måte, men forum er jo en perfekt måte å få feedback og tips på.

 

Så langt har jeg styring på: spot stue, lampe stue, akvarium, trapp til kjeller, trapp til loft, bad og soverom. Skal snart få fikset kjøkken og utelys.

 

Jeg har ikke funnet opp kruttet på nytt, men hentet ideer og kode fra andre som pusler med det samme og tilpasset det mitt eget bruk.

 

På HW siden så har jeg som sagt en MultiTrx som kommuniserer med div Nexa og Wavemann utstyr, samt en Esic temp transmitter. Dette er koblet til en laptop som bridger com port til ethernet port. Jeg har bestilt ethernet shield slik jeg får vekk helt laptopen og telefonenen kommuniserer direkte med Arduinoen, en Nano som står der nå, kan hende den blir byttet ut med en 2560.

 

På telefonene så kjører jeg DomoticHome, ennå orginal software men jobber på å tilpasse den. http://www.domotichome.net/

Denne siden autogenererer koden til Arduino, flott utgangspunkt å bygge videre på.

 

Har møtt litt veggen nå, koden begynner å opprøre seg litt rart og jeg misstenker at jeg bruker for mye ram. En av de tingene jeg ser er at Serial.print failer ofte, spesiellt i "GET /?out=all" Så langt har jeg kommet meg unna problemet ved å kjøre Serial.print fra EEPROM men for å løse problemet tror jeg må gå vekk i fra å definere telegramene som string og bare sette de rett i koden.... Hvis ikke noen andre har en bedre løsning

 

Er masse rusk i koden og en del test funksjoner men det er no normalt i et prosjekt under utvikling

 

#include &--#60;SoftwareSerial.h&--#62;
#include &--#60;LiquidCrystal.h&--#62;
//const char hellostr[] PROGMEM = "{\"ip\" : \"192.168.2.248\", \"devices\" : [{ \"type\" : \"light\", \"name\" : \"TV Stue\", \"out\" : \"30\"},{ \"type\" : \"light\", \"name\" : \"Spise stue\", \"out\" : \"31\"},{ \"type\" : \"Plug\", \"name\" : \"Sofalampe\", \"out\" : \"32\"},{ \"type\" : \"Plug\", \"name\" : \"Tusle\", \"out\" : \"33\"},{ \"type\" : \"Plug\", \"name\" : \"Fiskane\", \"out\" : \"34\"},{ \"type\" : \"light\", \"name\" : \"Kjeller\", \"out\" : \"35\"},{ \"type\" : \"gate\", \"name\" : \"Stue25%\", \"out\" : \"40\"},{ \"type\" : \"gate\", \"name\" : \"Stue50%\", \"out\" : \"41\"},{ \"type\" : \"gate\", \"name\" : \"Stue75%\", \"out\" : \"42\"},{ \"type\" : \"gate\", \"name\" : \"Stue100%\", \"out\" : \"43\"},{ \"type\" : \"gate\", \"name\" : \"Godnatt\", \"out\" : \"44\"}]}";
SoftwareSerial mySerial(6, 7); //6 TX fra kontroller til MultiTRX
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//********************Variables********************
int day = 1;
int bevegelseLoft1 = 0;
int bevegelseLoft2 = 0;
int bryterLoft = 0;
String readString = String(30);
char p_buffer[80];
#define P(str) (strcpy_P(p_buffer, PSTR(str)), p_buffer)

//********************Adresses********************
//Test
char testOn[] = "$N16349B2021";
char testOff[] = "$N16349B2020";
//Dusk/dawn sensor
char fotocelleOn[] = "$N13D60E2091"; //Natt, lys på
char fotocelleOff[] = "$N13D60E2090"; //Dag, lys av
//PIR utenfor inngansparti
char bevegelseInngangspartiOn[] = "0";
char bevegelseInngangspartiff[] = "0";

//Soverom stort Waveman
char soveromStortOn[] = "$WB021";
char soveromStortOff[] = "$WB020";
//Bad loft
char badLoftOn[] = "$N1670FD2091";
char badLoftOff[] = "$N1670FD2090";
//Trapp loft -&--#62; Hovedetasje software ID
char swTrappLoftHovedOn[] = "$N1A536C2091";
char swTrappLoftHovedOff[] = "$N1A536C2090";
char swTrappLoftHovedDim25[] = "$N1A536C20924";
char swTrappLoftHovedDim50[] = "$N1A536C20928";
char swTrappLoftHovedDim75[] = "$N1A536C2092C";
char swTrappLoftHovedDim100[] = "$N1A536C2092F";
//PIR Loft gang
char bevegelseTrappLoftHovedOppeOn[] = "$N1B4C2A2091";
char bevegelseTrappLoftHovedOppeOff[] = "$N1B4C2A2090";
//PIR Trapp loft -&--#62; Hovedetasje
char bevegelseTrappLoftHovedNedeOn[] = "$N1B536C2091";
char bevegelseTrappLoftHovedNedeOff[] = "$N1B536C2090";
//Tv stue dimmer
char tvStueOn[] = "$N1B714220B1";
char tvStueOff[] = "$N1B714220B0";
char tvStueDim25[] = "$N1B714220B24";
char tvStueDim50[] = "$N1B714220B28";
char tvStueDim75[] = "$N1B714220B2C";
char tvStueDim100[] = "$N1B714220B2F";
//Spise stue dimmer
char spiseStueOn[] = "$N1B714220A1";
char spiseStueOff[] = "$N1B714220A0";
char spiseStueDim25[] = "$N1B714220A24";
char spiseStueDim50[] = "$N1B714220A28";
char spiseStueDim75[] = "$N1B714220A2C";
char spiseStueDim100[] = "$N1B714220A2F";
//Lampe bak sofa
char lampeBakSofaOn[] = "$N157C852001";
char lampeBakSofaOff[] = "$N157C852000";
//Lys Skilpadde akvarium
char lysSkilpaddeOn[] = "$N157C852011";
char lysSkilpaddeOff[] = "$N157C852010";
//Lys Fisk Akvarium
char lysFiskOn[] = "$N157C852021";
char lysFiskOff[] = "$N157C852020";
//Trapp hovedetasje -&--#62; kjeller
char trappHovedKjellerOn[] = "$WB011";
char trappHovedKjellerOff[] = "$WB010";
//********************Transmitters********************
//Esic temp sample
//$E1,1,4.4,44,0
//Nexa remote 1
/*
1: OFF $N157C852000 ON $N157C852001 Lampe bak sofa
2: OFF $N157C852010 ON $N157C852011 Skilpadde akvarium
3: OFF $N157C852020 ON $N157C852021 Fiske akvarium
*/
//Nexa remote 2
/*
1: OFF $N16349B2000 ON $N16349B2001 Lampe bak sofa
2: OFF $N16349B2010 ON $N16349B2011 Skilpadde akvarium
3: OFF $N16349B2020 ON $N16349B2021 Fiske akvarium
All off: $N16349B2100
*/

boolean n = false;
void setup()
{
 digitalWrite(6, LOW);
 pinMode(13, OUTPUT);
 Serial.begin(9600);
 mySerial.begin(9600);
 lcd.begin(20, 4);
 lcd.setCursor(0, 0);
 lcd.print("MultiTRX");
 pinMode(10, INPUT);
}
void loop() // run over and over
{
  serialReader();
  androidInterface();
 //serialEcho();
 //force();
 //test();

}
void test(){
  if (digitalRead(10) == true) {
 n = true;
  }
  else {
 n = false;
  }

  if (n == true) {
 mySerial.println(lampeBakSofaOn);
  }
  else {
 mySerial.println(lampeBakSofaOff);

  }
  delay(5000);
}

/*void force () {
  digitalWrite(13, HIGH);
  mySerial.println("$N16349B2021");
  delay(2000);
  digitalWrite(13, LOW);
  delay(1000);
  }*/
/*
void serialEcho (){
if (mySerial.available())
   Serial.write(mySerial.read());
if (Serial.available())
   mySerial.println(Serial.read());
}
*/

void serialReader(){
 int makeSerialStringPosition;
 int inByte;
 char serialReadString[50] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 const int terminatingChar = 10; //Terminate lines with CR
 inByte = mySerial.read();
 makeSerialStringPosition=0;
 if (inByte &--#62; 0 && inByte != terminatingChar) { //If we see data (inByte &--#62; 0) and that data isn't a carriage return
delay(100); //Allow serial data time to collect (I think. All I know is it doesn't work without this.)
while (inByte != terminatingChar && mySerial.available() &--#62; 0){ // As long as EOL not found and there's more to read, keep reading
  serialReadString[makeSerialStringPosition] = inByte; // Save the data in a character array
  makeSerialStringPosition++; //Increment position in array
  //if (inByte &--#62; 0) Serial.println(inByte); // Debug line that prints the charcodes one per line for everything recieved over serial
  inByte = mySerial.read(); // Read next byte
}
//Serial.println(inByte);
if (inByte == terminatingChar) //If we terminated properly
{
  serialReadString[makeSerialStringPosition] = 0; //Null terminate the serialReadString (Overwrites last position char (terminating char) with 0
  //Serial.println(serialReadString);
  //lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("					");
  lcd.setCursor(0, 0);
  lcd.print(serialReadString);

  //********************Dusk/Dawn flagg********************
  if (strcmp(serialReadString, fotocelleOff) == 0)
  {
	day = 1;
	lcd.setCursor(0, 1);
	lcd.print("Fotocelle Dag");
	//Serial.println("Fotocelle Dag");	  
  }
  if (strcmp(serialReadString, fotocelleOn) == 0)
  {
	day = 0;
	lcd.setCursor(0, 1);
	lcd.print("Fotocelle Natt");
	//Serial.println("Fotocelle Natt");	  
  }

//********************Trapp loft -&--#62; Hovedetasje********************
  if (strcmp(serialReadString, bevegelseTrappLoftHovedOppeOn) == 0)  {
	bevegelseLoft1 = 1;
	loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedOppeOff) == 0)  {
	bevegelseLoft1 = 0;
	loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedNedeOn) == 0)  {
	bevegelseLoft2 = 1;
	loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedNedeOff) == 0)  {
	bevegelseLoft2 = 0;
	loftTrapp();
  }
/*
  if (bevegelseLoft1 + bevegelseLoft2 &--#62; 0) {
	 if (day == 0) {
	   mySerial.println(swTrappLoftHovedDim50);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH ON 50%");
	   //Serial.println("Trapp LH ON 50%");
	 }
	  if (day == 1) {
		mySerial.println(swTrappLoftHovedDim75);
		lcd.setCursor(0, 1);
		lcd.print("Trapp LH ON 75%");
		//Serial.println("Trapp LH ON 75%");
	  }
  }

   if (bevegelseLoft1 + bevegelseLoft2 &--#60; 1) {
	 if (bryterLoft == 0) {
	   mySerial.println(swTrappLoftHovedOff);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH Off");
	 }
	  if (bryterLoft == 1) {
		mySerial.println(swTrappLoftHovedDim25);
		lcd.setCursor(0, 1);
		lcd.print("Trapp LH ON 25%");
	  }
  }
	*/




//********************Lesing av ute temp********************	
  if (strncmp(serialReadString, "$E1,1,4.4,44,0", 5) == 0) {
	lcd.setCursor(0, 3);
	lcd.print("Ute temp: ");
	if (strncmp(serialReadString, "$E1,1,4.4,44,0", 7) == 0) {
	  for(int x = 0; x &--#60; 3; x++) {
		  lcd.print(serialReadString[x + 6]);
		  //Serial.print(serialReadString[x + 6]);
		}
		lcd.print("C ");
		//Serial.print("C ");

	  for(int x = 0; x &--#60; 2; x++) {
		  lcd.print(serialReadString[x + 10]);
		  //Serial.print(serialReadString[x + 10]);
		}
	  lcd.print("%");
	  //Serial.println("%");
	}
	 else {
		for(int x = 0; x &--#60; 4; x++) {
		  lcd.print(serialReadString[x + 6]);
		  //Serial.print(serialReadString[x + 6]);
		}
		lcd.print("C ");
		//Serial.print("C ");
		for(int x = 0; x &--#60; 2; x++) {
		  lcd.print(serialReadString[x + 11]);
		  //Serial.print(serialReadString[x + 11]);
		}
	  lcd.print("%");
	  //Serial.println("%");
	 }
  }
}
delay(20);
 }
}
void loftTrapp ()  {
if (bevegelseLoft1 + bevegelseLoft2 &--#62; 0) {
	 if (day == 0) {
	   mySerial.println(swTrappLoftHovedDim50);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH ON 50%");
	   //Serial.println("Trapp LH ON 50%");
	 }
	  if (day == 1) {
		mySerial.println(swTrappLoftHovedDim75);
		lcd.setCursor(0, 1);
		lcd.print("Trapp LH ON 75%");
		//Serial.println("Trapp LH ON 75%");
	  }
  }

 if (bevegelseLoft1 + bevegelseLoft2 &--#60; 1) {
	 if (bryterLoft == 0) {
	   mySerial.println(swTrappLoftHovedOff);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH Off");
	   //Serial.println("Trapp LH Off");
	 }
	  if (bryterLoft == 1) {
		mySerial.println(swTrappLoftHovedDim25);
		lcd.setCursor(0, 1);
		lcd.print("Trapp LH ON 25%");
		//Serial.println("Trapp LH ON 25%");
	  }
  }
}

//********************Android Interface********************
void androidInterface() {
 if (Serial.available()) {
char c = Serial.read();
if (readString.length() &--#60; 30) {
  readString = readString + c;
	}
if (c == '\n') {
  Serial.println(P("HTTP/1.1 200 OK"));
  Serial.println((P"Content-Type: text/html"));
  Serial.println();

  if(readString.startsWith("GET /?out=30&status=1")) {
	mySerial.println(tvStueOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"30\"}"));
	}
  if(readString.startsWith("GET /?out=30&status=0")) {
	mySerial.println(tvStueOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"30\"}"));
	}

  if(readString.startsWith("GET /?out=31&status=1")) {
	mySerial.println(spiseStueOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"31\"}"));
	}
  if(readString.startsWith("GET /?out=31&status=0")) {
	mySerial.println(spiseStueOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"31\"}"));
	}

  if(readString.startsWith("GET /?out=32&status=1")) {
	mySerial.println(lampeBakSofaOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"32\"}"));
	}
  if(readString.startsWith("GET /?out=32&status=0")) {
	mySerial.println(lampeBakSofaOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"32\"}"));
	}

	if(readString.startsWith("GET /?out=33&status=1")) {
	mySerial.println(lysSkilpaddeOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"33\"}"));
	}
  if(readString.startsWith("GET /?out=33&status=0")) {
	mySerial.println(lysSkilpaddeOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"33\"}"));
	}

  if(readString.startsWith("GET /?out=34&status=1")) {
	mySerial.println(lysFiskOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"34\"}"));
	}
  if(readString.startsWith("GET /?out=34&status=0")) {
	mySerial.println(lysFiskOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"34\"}"));
	}

  if(readString.startsWith("GET /?out=35&status=1")) {
	mySerial.println(trappHovedKjellerOn);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"35\"}"));
	}

	if(readString.startsWith("GET /?out=35&status=0")) {
	mySerial.println(trappHovedKjellerOff);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"35\"}"));
	}

  if(readString.startsWith("GET /?out=36&status=1")) {
	mySerial.println(soveromStortOn);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"36\"}"));
	}

	if(readString.startsWith("GET /?out=36&status=0")) {
	mySerial.println(soveromStortOff);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"36\"}"));
	}

	if(readString.startsWith("GET /?out=37&status=1")) {
	mySerial.println(badLoftOn);
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"37\"}"));
	}


	if(readString.startsWith("GET /?out=37&status=0")) {
	mySerial.println(badLoftOff);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"37\"}"));
	}

	if(readString.startsWith("GET /?out=38&status=1")) {
	bryterLoft = 1;
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"38\"}"));
	}

  if(readString.startsWith("GET /?out=38&status=0")) {
	bryterLoft = 0;
	Serial.print(P("{\"status\" : \"0\" , \"out\" : \"38\"}"));
	}

  if(readString.startsWith("GET /?out=40&status=1")) {
	mySerial.println(tvStueDim25);
	mySerial.println(spiseStueDim25);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"40\"}"));
	}

  if(readString.startsWith("GET /?out=41&status=1")) {
	mySerial.println(tvStueDim50);
	mySerial.println(spiseStueDim50);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"41\"}"));
	}

  if(readString.startsWith("GET /?out=42&status=1")) {
	mySerial.println(tvStueDim75);
	mySerial.println(spiseStueDim75);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"42\"}"));
	}

  if(readString.startsWith("GET /?out=43&status=1")) {
	mySerial.println(tvStueDim100);
	mySerial.println(spiseStueDim100);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"43\"}"));
	}


  if(readString.startsWith("GET /?out=44&status=1")) {
	//mySerial.println(soveromStortOff);
	mySerial.println(swTrappLoftHovedOff);
	mySerial.println(tvStueOff);
	mySerial.println(spiseStueOff);
	mySerial.println(lampeBakSofaOff);
	mySerial.println(lysSkilpaddeOff);
	mySerial.println(lysFiskOff);
	mySerial.println(trappHovedKjellerOff);
	Serial.print(P("{\"status\" : \"1\" , \"out\" : \"44\"}"));
	}

  if(readString.startsWith("GET /?out=all")) {
	Serial.print(P("{\"ip\" : \"192.168.2.248\", "));
	Serial.print(P("\"devices\" : "));
	Serial.print(P("[{ \"type\" : \"light\", \"name\" : \"TV-Stue\", \"out\" : \"30\"}"));
	Serial.print(P(",{ \"type\" : \"light\", \"name\" : \"Spisestue\", \"out\" : \"31\"}"));
	Serial.print(P(",{ \"type\" : \"Plug\", \"name\" : \"Sofalampe\", \"out\" : \"32\"}"));
	Serial.print(P(",{ \"type\" : \"Plug\", \"name\" : \"Tusle\", \"out\" : \"33\"}"));
	Serial.print(P(",{ \"type\" : \"Plug\", \"name\" : \"Fiskane\", \"out\" : \"34\"}"));
	Serial.print(P(",{ \"type\" : \"light\", \"name\" : \"Kjeller\", \"out\" : \"35\"}"));
	Serial.print(P(",{ \"type\" : \"light\", \"name\" : \"Soverom\", \"out\" : \"36\"}"));
	Serial.print(P(",{ \"type\" : \"light\", \"name\" : \"Bad\", \"out\" : \"37\"}"));
	Serial.print(P(",{ \"type\" : \"light\", \"name\" : \"Loft\", \"out\" : \"38\"}"));
	Serial.print(P(",{ \"type\" : \"gate\", \"name\" : \"Stue25%\", \"out\" : \"40\"}"));
	Serial.print(P(",{ \"type\" : \"gate\", \"name\" : \"Stue50%\", \"out\" : \"41\"}"));
	Serial.print(P(",{ \"type\" : \"gate\", \"name\" : \"Stue75%\", \"out\" : \"42\"}"));
	Serial.print(P(",{ \"type\" : \"gate\", \"name\" : \"Stue100%\", \"out\" : \"43\"}"));
	Serial.print(P(",{ \"type\" : \"gate\", \"name\" : \"Godnatt\", \"out\" : \"44\"}"));
	Serial.print(P("]}"));
	}
  readString="";
  }
}
 }

Endret av Behydro
  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

Tenkte det var geit å dele opp litt

 

På "power" siden så har jeg brukt sendere og mottakere fra Nexa og Waveman kjøpt på Clas og Jula.

 

Waveman kjøpte jeg hovedsaklig fordi de skulle selge ut alt på clas med 50% rabatt, ulempen med de er at jeg klarer ikke å dimme de, kun av og på

 

På Nexa siden så bruker jeg

http://www.clasohlso...px?id=165894303

http://www.clasohlso...px?id=165060201

http://www.clasohlso...px?id=165064917

http://www.clasohlso...px?id=165065184

http://www.clasohlso...px?id=165065088

http://www.jula.no/f...-pakning-408028

http://www.jula.no/ir-sensor-408027

 

Temp sensoren er: http://www.clasohlso...px?id=154374067

Lenke til kommentar

MultiTrx kommer med FT232 chip noe som jeg ikke trenger, men for å lett kunne koble den til PC har jeg ikke tatt den vekk, men koblet ledninger på to punkt på kortet slik jeg kommer rett på RX TX til microkontrolleren. Denne er på 3.3V mens Arduinoen min er 5V så litt triksing måtte til for å få kom til å funke. Jeg kjører software serial på Arduinoen.

 

Jeg har også et LCD display som viser telegram som kommer inn, hva funskjoner som har blitt trigget og temp lesningene. Fungerer fint for enkel debugging siden serie porten er opptatt med kommunikasjonen til DomoticHome.

 

Når jeg får Ethernet shield begynner morroa med å tilpasse koden....

 

På laptopen som er tilkoblet Arduinoen kjører jeg ComFoolery for å bridge Com port og en Ethernet port, fungerer som smurt!

Lenke til kommentar

Tenkte trappe funksjonen min trenger en liten forklaring, den ble litt tungvint men jeg ville forsikre meg at så lenge en av sensorene er aktivert så skal lyset ikke slå seg av. Er litt trist vist man først aktiverer den nede, så holder man på med noe oppe og lyset slår seg av når sensoren nede timer ut.

 

Lys styrken er basert på om det er natt eller dag, trenger ikke så mye lys på kvelden. Tenkte jeg skulle også legge til funksjon som kun setter på lyset 5-10% på gang og bad når huset står i "nattmodus"

 

Som en ekstra piff på trappen så kan jeg velge om lyset skal slå seg av eller dimme til 25% når der ikke er noe bevegelse, jeg foretrekker at der er litt lys borte ved trappen på kvelden.

 

 

//********************Trapp loft -> Hovedetasje********************
  if (strcmp(serialReadString, bevegelseTrappLoftHovedOppeOn) == 0)  {
    bevegelseLoft1 = 1;
    loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedOppeOff) == 0)  {
    bevegelseLoft1 = 0;
    loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedNedeOn) == 0)  {
    bevegelseLoft2 = 1;
    loftTrapp();
  }

  if (strcmp(serialReadString, bevegelseTrappLoftHovedNedeOff) == 0)  {
    bevegelseLoft2 = 0;
    loftTrapp();
  }

 

void loftTrapp ()  {
   if (bevegelseLoft1 + bevegelseLoft2 > 0) {
	 if (day == 0) {
	   mySerial.println(swTrappLoftHovedDim50);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH ON 50%");
	   //Serial.println("Trapp LH ON 50%");
	 }
	  if (day == 1) {
	    mySerial.println(swTrappLoftHovedDim75);
	    lcd.setCursor(0, 1);
	    lcd.print("Trapp LH ON 75%");
	    //Serial.println("Trapp LH ON 75%");
	  }
  }

 if (bevegelseLoft1 + bevegelseLoft2 < 1) {
	 if (bryterLoft == 0) {
	   mySerial.println(swTrappLoftHovedOff);
	   lcd.setCursor(0, 1);
	   lcd.print("Trapp LH Off");
	   //Serial.println("Trapp LH Off");
	 }
	  if (bryterLoft == 1) {
	    mySerial.println(swTrappLoftHovedDim25);
	    lcd.setCursor(0, 1);
	    lcd.print("Trapp LH ON 25%");
	    //Serial.println("Trapp LH ON 25%");
	  }
  }
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...