// **********************************************************************
// letzte Änderungen:
//
// 15.07. www-Schaltaufruf mittels Port Forwarding
// 14.07. Code säubern
// 13.07. Bewegungsmelder, Standby neu
// 12.07. Modi schaltbar
// **********************************************************************
// TO DOs:
//Layout La & Ac
// **********************************************************************
// verwendete Bibliotheken:
// Internet:
byte mac[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // physikalische mac-Adresse
// TO DO: vor Ort anzupassen: byte ip[4] = { 192, 168, 178, 104 }; // ip in lan (that's what you need to use in your browser. ("192.168.178.104")IP im **lokalen** Netzwerk // Aufruf dann im Browser z. B. über http://192.168.178.104/?z=4
// "Arduino an IP 192..., schalte Led Nr. 4 an!"
// Falls ein "echter", also **globaler** www- Aufruf dann zermöglicht werden soll, muss im Router eine Portweiterleitung eingerichtet werden. // Bei meiner Fritzbox 7270 (Router-IP ist 31.19 . B122 . 16) über httpInternet:Freigaben:Portfreigabe mit den Einstellungen :// andere Anwendungen, TCP, Port 80, an IP-Adresse 192.168.178.104/?z=222. Die lokale IP hier im Sketch bleibt unverändert, // allerdings kann dann der Schaltaufruf ebenso mit "Arduino an IP 192http://31 .19 .122 ., zeige Auswahl an!16/?z=4 "erfolgen.
byte gateway[4] = { 192, 168, 1, 1 }; // Internetaccess via Router
byte subnet[4] = { 255, 255, 255, 0 }; // subnet mask
byte Anzahl_Legenden_LEDs = 0;
byte Legende_anfang = 121;
byte Legende_ende = 139140 ;
boolean Patchmodus;
// Auswahlmenü:
// 0 = existiert nicht
// 1 = Wasserstoff, 2 = Helium ... 118 = Uuo
// 131...137 = 1. - 7. Periode
// 141...148 = 1. - 8. Hauptgruppe
// 160 = Metalle
// 161 = Halbmetalle
// 162 = Nichtmetalle
// 180 = Eieruhr auf 180 oder 20 Sekunden
// 190 = fest
// 191 = flüssig
// 192 = gasförmig
// 193 = radioaktiv
// 194 = biatomar
// 200 = Bingo
// 201 = Programm_x
// 202 = Programm_y
// 203 = Programm_z
// 207 = Patchmodus
// 208 = Debugging-Modus
// 209 = Reset
// 210...215 = Helligkeit
// 222 = Browserfenster umschalten auf Arduino-Auswahlmenü
// 254 = alles_aus
// 255 = alles_an
// Compilerfehler erforderdert Vergrößerung der Arrays um ein Feld, andernfalls Überlauf in andere Variablen
boolean led[Ausbaustufe + 1] = {0};
, 8
};
// Pinning ohne eine "Led #0"
// p1 p2 p3 p4 p5 p6
byte Element_an_Pin[Ausbaustufe + 1] = { 0, 1, 3, 11, 19, 37, 55
// Pinning ohne eine "Led #0" //p1p2*p3*p4 p5 p6 p7 p8 - p9 p10 p11 p12 p13 p14 p15 p16 -p17 p18 p19 p20 p21 p22 p23 p24-
, 87, 144, 4, 12, 20, 38, 56, 88, 119, 120, 121, 122, 21, 39, 71, 103, 57, 89
//
byte Anzahl_angeschaltete_LEDs = 0;
// TO DO: über Poti einstellen und von Pin einlesen oder über Auswahl (180)
const unsigned int Eieruhr LED_Eieruhr_normal = 2030 ; // Vorgabe der Einschaltdauer einer LED in Sekunden unsigned int LED_Eieruhr = LED_Eieruhr_normal; // gewählte Einschaltdauer einer LED in Sekunden
unsigned int Standby_Timer = 180; // Zeit in Sekunden bis zum Standby
const byte Standardhelligkeit = 127;
// Arduino IR Remote Sniffer
// Portions © Andrew Ippoliti - acipo.com
// TODO: mehrstellige Zahlen abfragen
// const byte IR_PIN = 2;
// volatile damit es auch in INT funktioniert
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
// give the Ethernet shield 3 seconds to initialize:
delay(3000);
server.begin();
Serial.print("Server ist an IP ");
// für Testphase LED von Element = 7 im Setup einschalten:
Led_an(7, 1);
delay(bremse);
Patchmodus_umschalten(); // kann über 207 umgeschaltet werden
debugging(); // kann über 208 umgeschaltet werden
Serial.println("Jetzt Setup fertig, jetzt startet die Loop-Schleife ......"); Serial.println("-------------- --------------------------------------");
}
// **********************************************************************
// Serial.print(zyklus);
// Serial.println(". Loop");
// horche an IR-FB (Interrupt), der seriellen Schnittstelle und am über Ethernet-Shieldan www
// erfrage Element; nach Ordnungszahl o. ä. auswählen:
// z. B. OZ 1 - Wasserstoff:
Treppenlicht();
}
// Serial.println(Laufzeit_in_sek() - last_call);
// if ((last_call + 10) < Laufzeit_in_sek()) {
// Serial.println("----- 10s später -------------------------------");
// reset();
// }
// if (zyklus > 9999) { // 999
// // 1000-mal is nichts passiert, daher:
// Serial.println("-----ALLE LEDS AUS -------------------------------");
// delay(3000);
// //TO DO: ggf. Sleep-Modus mit Bewegungsmelder zum Reaktivieren
// }
// Serial.println("------------------------------------");
// delay(bremse);
}
// **********************************************************************
}
switch (Auswahl) {
// 0 = existiert nicht case 1 ... 118: Led_an(Auswahl, 1); break;// 1 = Wasserstoff, 2 = Helium ... 118 = Uuo
case 131 ... 139: Auswahl_Periode(); break; // = 1. - 7. Periode, Lanthanoide, A.
case 141 ... 148: Auswahl_Hauptgruppe(); break; // = 1. - 8. Hauptgruppe
case 161: Auswahl_Halbmetalle(); break;
case 162: Auswahl_Nichtmetalle(); break;
case 180: Eieruhr_switchenLED_Eieruhr_switchen (); break; // auf 180 Sekunden oder 20 SekundenLED_Eieruhr_normal
case 190: Auswahl_fest(); break;
case 191: Auswahl_liquid(); break;
case 203: Auswahl_Programm_z(); break;
case 207: Patchmodus_umschalten(); break;
case 208: debugging(); break; // Debugging-Modus
case 209: reset(); break;
case 210 ... 215: Auswahl_Helligkeit(); break;
// 222 = Browserfenster umschalten auf Arduino-Auswahlmenü
// case 222: www_abfragen(); break;
case 254: Auswahl_alles_aus(); break;
default: // unbelegte Zahlen sind unsinnig und werden genullt:
Serial.println("keine neue Auswahl");
// Auswahl = 0;
}
// vergesse die bisherige Auswahl, LED nicht erneut anschalten:
// **********************************************************************
void Auswahl_Hauptgruppe() {
byte Hauptgruppe = Auswahl - 140; Serial.print(Hauptgruppe); Serial.println(". Hauptgruppe"); switch (AuswahlHauptgruppe ) { case 1411 : // 1. Hauptgruppe
Led_an(1, 1); Led_an(3, 1); Led_an(11, 1); Led_an(19, 1); Led_an(37, 1); Led_an(55, 1); Led_an(87, 1); break;
case 1422 : // 2. Hauptgruppe
Led_an(4, 1); Led_an(12, 1); Led_an(20, 1); Led_an(38, 1); Led_an(56, 1); Led_an(88, 1); break;
case 1433 : // 3. Hauptgruppe
Led_an(5, 1); Led_an(13, 1); Led_an(31, 1); Led_an(49, 1); Led_an(81, 1); Led_an(113, 1); break;
case 1444 : // 4. Hauptgruppe
Led_an(6, 1); Led_an(14, 1); Led_an(32, 1); Led_an(50, 1); Led_an(82, 1); Led_an(114, 1); break;
case 1455 : // 5. Hauptgruppe
Led_an(7, 1); Led_an(15, 1); Led_an(33, 1); Led_an(51, 1); Led_an(83, 1); Led_an(115, 1); break;
case 1466 : // 6. Hauptgruppe
Led_an(8, 1); Led_an(16, 1); Led_an(34, 1); Led_an(52, 1); Led_an(84, 1); Led_an(116, 1); break;
case 1477 : // 7. Hauptgruppe
Led_an(9, 1); Led_an(17, 1); Led_an(35, 1); Led_an(53, 1); Led_an(85, 1); Led_an(117, 1); break;
case 1488 : // 78 . Hauptgruppe
Led_an(2, 1); Led_an(10, 1); Led_an(18, 1); Led_an(36, 1); Led_an(54, 1); Led_an(86, 1); Led_an(118, 1); break;
}
// **********************************************************************
void Auswahl_Metalle() { // 160
Serial.println("Metalle");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if ((z == 3) || (z == 4) || (z == 11) || (z == 12) || (z == 13) || ((z >= 19) && (z <= 31))
// **********************************************************************
void Auswahl_Halbmetalle() {
Serial.println("Halbmetalle");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if ((z == 5) || (z == 14) || (z == 32) || (z == 33) || (z == 34) || (z == 51) || (z == 52) || (z == 85)
// **********************************************************************
void Auswahl_Nichtmetalle() {
Serial.println("Nichtmetalle");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if ((z == 1) || (z == 2) || ((z >= 6) && (z <= 10)) || ((z >= 15) && (z <= 18)) || ((z >= 35) && (z <= 36))
// **********************************************************************
void Auswahl_fest() {
Serial.println("190 = fest");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if (((z >= 3) && (z <= 6)) || ((z >= 11) && (z <= 16)) || ((z >= 19) && (z <= 34)) || ((z >= 37) && (z <= 53))
// **********************************************************************
void Auswahl_liquid() {
Serial.println("191 = flüssig");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if ((z == 35) || (z == 80)) {
// **********************************************************************
void Auswahl_gas() {
Serial.println("192 = gasförmig");
for (byte z = 1; z < Ausbaustufe; z++) {
if ((z == 1) || (z == 2) || (z == 7) || (z == 8) || (z == 9) || (z == 10) || (z == 17) || (z == 18)
// **********************************************************************
void Auswahl_Periode() {
byte Periode = Auswahl - 130;
Serial.print(Periode);
Serial.println(". Periode");
byte anfang;
byte ende;
switch (AuswahlPeriode ) { case 1311 : anfang = 1; ende = 2; break; // 1. Periode: 1-H, 2-He case 1322 : anfang = 3; ende = 10; break; case 1333 : anfang = 11; ende = 18; break; case 1344 : anfang = 19; ende = 36; break; case 1355 : anfang = 37; ende = 54; break; case 1366 : anfang = 55; ende = 86; break; case 1377 : anfang = 87; ende = 118; break; // 7. Periode: Fr-Uuo case 1388 : anfang = 57; ende = 71; break; // Lanthanoide case 1399 : anfang = 89; ende = 103; break; // Actinoide
}
for (byte z = anfang; z < ende + 1; z++) {
// **********************************************************************
void Auswahl_Programm_x() { // 201
// Serial.println(" PSE schwellend aufleuchten lassen");
Auswahl_alles_an();
for (byte a = 0; a <= 5; a = a + 1)
// **********************************************************************
void Auswahl_Programm_y() { // 202
unsigned int Eieruhr_2 = Eieruhr; // Standardwert merken und neu festlegen
Eieruhr = 3;
Serial.println("Flackermann");
unsigned int LED_Eieruhr_2 = LED_Eieruhr; // alten Wert merken und neu festlegen
LED_Eieruhr = 3;
for (byte z = 1; z < Ausbaustufe + 1; z++) {
byte zufall = random(1, Ausbaustufe);
delay(100);
}
Eieruhr LED_Eieruhr = Eieruhr_2LED_Eieruhr_2 ; // Standardwert alten Wert zurückschreiben
}
// **********************************************************************
void Auswahl_Programm_z() {
// TO DO
}
// **********************************************************************
void Auswahl_radioaktiv() {
Serial.println("radioaktiv");
for (byte z = 1; z < Ausbaustufe + 1; z++) {
if ((z == 43) || (z == 61) || ((z >= 84) && (z <= 118)) || (z == 134) || (z == 136)) {
}
// **********************************************************************
void Eieruhr_switchenLED_Eieruhr_switchen () { // switchen auf 180 oder 20 30 Sekunden Serial.print("LED- Eieruhr switchen von "); Serial.print(EieruhrLED_Eieruhr );
Serial.print(" auf ");
switch (EieruhrLED_Eieruhr ) { case 20LED_Eieruhr_normal : Eieruhr LED_Eieruhr = 180; break; // LEDs 3 Minuten anlassen case 180: Eieruhr LED_Eieruhr = 20LED_Eieruhr_normal ; break; // LEDs 20s 30s anlassen
}
Serial.print(EieruhrLED_Eieruhr );
Serial.print(" Sekunden");
}
unsigned int Laufzeit_in_sek() {
unsigned int t_gesamt_in_sek = millis() / 1000;
// millis() gibt den Wert in Millisekunden als 'unsigned int' Datentyp zurück, berechnet seitdem das Arduino
// Board das aktuelle Programm gestartet hat.
return t_gesamt_in_sek;
}
// void Laufzeit_hhmmss() {
// t_gesamt_in_sek = millis() / 1000;
// millis() gibt den Wert in Millisekunden als 'unsigned int' Datentyp zurück, berechnet seitdem das Arduino
// Board das aktuelle Programm gestartet hat.
// nullt bei ?? ms
// byte t_gesamt_in_h = millis() / 3600000;
Pin = Pin_von_Element[Element];
}
// mitzählen, wieviel LEDs insgesamt an sind:
// nur ausführen, wenn (an -> aus) oder (aus -> an), nicht bei (bleibt an) oder (bleibt aus)
// spart Speicher: unsigned long led_Start zu byte einkürzen:
if (an) {
led_aus[Element] = Laufzeit_in_sek() + EieruhrLED_Eieruhr ; // vormerken: LED nach (EieruhrLED_Eieruhr ) Sek. wieder ausschalten
last_Element = Element; // welches Element wurde zuletzt angeschaltet?
if (Debug_Modus) {
Serial.print("LED von Element ");
Serial.print(Element);
Serial.print(" -> Pin ");
Serial.print(Pin); Serial.println(Pin" ist an."); Serial.println("--------------------" );
}
}
resetPins();
// Schieberegister
// serielles Einlesen, alle LEDs werden neu geschaltet
for (byte i = 1; i < Ausbaustufe + 1; i++) {
// Aktion passiert bei Wechsel von LOW auf HIGH
// neues Muster einschalten:
digitalWrite(STORE_PIN, HIGH);
// // Serial.print(Element);
// // Serial.print(". LED ist ");
// // Serial.println(an);
// Serial.println("--------------------");
// delay(bremse);
}
// **********************************************************************
Helligkeit = 0;
Dimmer();
Eieruhr LED_Eieruhr = 20LED_Eieruhr_normal ;
for (byte i = 1; i < Ausbaustufe + 1; i++) {
led[i] = 0;
Led_an(i, 0);
// led[i] = 0;
// digitalWrite(DATA_PIN, led[i]);
// digitalWrite(SHIFT_PIN, HIGH);
}
Anzahl_angeschaltete_LEDs = 0;
Helligkeit = Standardhelligkeit;
Dimmer();
// digitalWrite(STORE_PIN, HIGH);
Legende_an();
Auswahl = 0;
// **********************************************************************
void Treppenlicht() {
// schaltet eine LED nach [EieruhrLED_Eieruhr ] Sek. wieder aus
if (Debug_Modus) {
Serial.println("Treppenlicht");
Serial.print("Laufzeit in s = ");
Serial.println(Laufzeit_in_sek());
// Zwischenbilanz für Kontrolle
Serial.print(Anzahl_angeschaltete_LEDs);
Serial.print(" LEDs sind an, davon ");
Serial.print(Anzahl_Legenden_LEDs);
Serial.println(" anzahl_legenden_ledsLegenden-LEDs ");
Serial.println();
}
char c = client.read();
//read char by char HTTP request
if (readString.length() < 10050 ) {
//store characters to string
readString += c;
String stringOne = readString;
int pos = 2 + stringOne.indexOf('z');
// int pos = readString.indexOf('z='); //+1
// komischerweise kommt von Handy: "GET /z%3D[pos] HTTP/1.1", daher:
// if (pos == 0) {
// pos = 1 + stringOne.indexOf('z%3D');
// }
Serial.println(pos);
String zahl = readString.substring(pos);
Serial.println(Auswahl);
Input = "www";
// client.println("HTTP/1.1 200 OK"); //send new page // client.println("Content-Type: text/html"); // client.println(); // client.println("<HTML>"); // client.println("<HEAD>"); // if (Auswahl != 222) { // Weiterleitung an Elementseite auf bs-wiki: // client.print("<meta http-equiv=\"refresh\"content=\"0; URL="); // client.print(URL); // client.print(zahl); // client.println("\">"); // } // else { // // 222: Browserfenster umschalten auf Arduino-Auswahlmenü // client.println("<style>p{font:16px/1.5em;}.monospace{font-family: monospace;}</style>"); // client.println("<TITLE>Periodensystem der Elemente</TITLEBR >"); // client.printlnif ("</HEAD>"); // client.println("<BODY>"); // client.println("<p classAuswahl = ='monospace'>"0 );{ // client.println("<H1>Periodensystem der Elemente</H1>Auswahl unklar, Aufruf im Browser durch "); // client.println("<hr [IP] />"); // client.println("<br />"); // client.println("<H2>Led auswählen</H2>"); // client.println("<br />"); // for (int ? z = 1; [Auswahl], z < 256; z++) { // client.print("B. <a href=\"/?z="); 'http: // client192.168 .print(z); // client178 .print("\"\">[ "); 104 // client.print(? z); // client.println(" ]</a=1' > "); // } http: // client192 .println("<br />"); // client168 .println("<br />"); // client178 .println("<a href=\"104 /?z=255\"\">[alle an]1 </a>"); // client.println("-<BR> "); // client.println("<a href=\"/?z=254\"\">[alle aus]</a><br />");} // client.println("</p>Created by Detlef Giesler. "); // client.println("<p>Created by Detlef Giesler. Visit <a href='http://www.bs-wiki.de/mediawiki/index.php/222 '>bs-wiki.de</a> for more info!</p>"); // client.println("<br />"); // } // client.println("</BODY>"); // client.println("</HTML>");
delay(1);
//stopping client
Änderungen – BS-Wiki: Wissen teilen
Änderungen
1.710 Byte entfernt ,
02:01, 16. Jul. 2015