Show Posts
Pages: [1] 2 3 ... 6
1  International / Deutsch / Re: Kann man diesen Code kürzer schreiben ? on: March 17, 2014, 11:56:24 am
Hallo Ihr beiden,

wow. Was soll ich sagen. Danke für die Denkanstöße. Ich wollte mit den "Lückenhaften" LDR Werten eine Art Hysterese verwirklichen. Das mit dem Unterschiedlichen Inkrement hatte folgenden Hintergrund. Die Funktion AutoBacklight ist die Hintergrunds Beleuchtung meiner Basis. Meine Idee war folgende: Wenn Umgebung sehr Hell, dann Beleuchtung auf 100%. Wenns Dämmert sollte die Beleuchtung nochmals gedimmt werden. Nachts soll auf Minimum gedimmt werden (Ich will ja Nachts schlafen smiley-wink) Jetzt hatte ich aber einen Unschönen Effekt. Wenn man Nachts das Licht anmachte und anschließend ausmachte, Dimmte es nicht sauber (Damit meine ich das Visuelle, was ja aus deinem Chart sehr deutlich wird.) Ich hatte mir damit beholfen nochmals ab einen gewissen Wert anders zu dimmen. Also eine missglückte 3 Stufen Dimmer smiley

P.s. Die for Schleife hatte ich aus einem Beispiel Code und fand sie brauchbar da man nach "Harten" (Licht ein / Licht aus) den Dimm Effekt sofort gesehen hat. Mir ist bewusst das solange die for Schleife läuft, nichts anderes vom Arduino ausgeführt werden kann.
2  International / Deutsch / Kann man diesen Code kürzer schreiben ? on: March 16, 2014, 03:48:56 pm
Hallo zusammen,

ich versuche mich grad etwas im Code kürzer schreiben. Der Code funktioniert soweit. Ich möchte diesen aber irgendwie kürzer schreiben. Mit kürzer versuche ich auch Zeilentechnisch sowie "weniger" Speicherplatz zu verwenden. Evtl. geht es ja auch gar nicht bei diesem Code?

Ich habe auch versucht den Code als Funktion zu schreiben, jedoch scheint der Complier meinen Code nicht zu schlucken. Ich Habe versucht sämtliche "Operatoren" mit zu übergeben. Was natürlich nicht funktioniert hat.

Kann man den überhaupt Werte + Operatoren an eine Funktion oder einer "for-Schleife" übergeben?

Hier der Code

Code:
void AutoBacklight() // Loop für Automatische Backlight Steuerung
{
  if (Backlight == true) { // Wenn Backlight auf (HIGH) Automatisch steht, dann....
    LDR = analogRead(analogPin);   // ... den Analogen Pin einlesen und den Wert in "LED" speichern (Bereich 0(ganz Hell) - 1023(ganz Dunkel))
    if (LDR >850) { // Wenn der "LDR" Wert >850 ( Also sehr Dunkel)
      for(Blight ; Blight >= 80; Blight -=5) { // Fahre Backlight herunter von Wert x zu Wert 80 per increment in 5er Schritten:
        analogWrite(BlightLED, Blight); // Schreibe neuen Wert von "Blight"      
        delay(15);  // Warte 15ms um den Dimmungseffekt zu sehen
      }
      for(Blight ; Blight >= 1 && Blight <= 75; Blight -=1) { // Fahre Backlight herunter von Wert 75 zu Wert 1 per increment in 1er Schritten:
        analogWrite(BlightLED, Blight); // Schreibe neuen Wert von "Blight"    
        delay(15);  // Warte 15ms um den Dimmungseffekt zu sehen
      }
    }
    if (LDR <700) { // Wenn der "LDR" Wert <700 ( Also wenns Dämmert bis Dunkel)
      for(Blight ; Blight <= 15; Blight +=1) { // Fahre Backlight rauf bis Wert 15 per decrement in 1er Schritten:
        analogWrite(BlightLED, Blight); // Schreibe neuen Wert von "Blight"  
        delay(15);  // Warte 15ms um den Dimmungseffekt zu sehen
      }
    }
    if (LDR >=550 && LDR <=650) { // Wenn der "LDR" Wert zwischen 550 und 650 liegt ( Also Hell bis Dämmert)
      for(Blight ; Blight >= 20; Blight -=5) { // Fahre Backlight herunter bis auf Wert 20 per increment in 5er Schritten:
        analogWrite(BlightLED, Blight); // Schreibe neuen Wert von "Blight"        
        delay(15);  // Warte 15ms um den Dimmungseffekt zu sehen
      }
    }
    if (LDR <=450) { // Wenn der "LDR" Wert zwischen <=450 liegt ( Also sehr Hell)
      for(Blight ; Blight <= 250; Blight +=5) { // Fahre Backlight rauf bis Wert 255 per decrement in 5er Schritten:
        analogWrite(BlightLED, Blight); // Schreibe neuen Wert von "Blight"    
        delay(15);  // Warte 15ms um den Dimmungseffekt zu sehen
      }
    }
  }
}
3  International / Deutsch / Re: User aus Heilbronn, Ludwigsburg, Sinsheim oder Umgebung on: March 05, 2014, 02:46:24 pm
Hallo Jürgen,

ich komme aus der Nähe von Heilbronn (Anfang Hohenlohekreis). Wann soll der Stammtisch den jeweils sein? Also Intervall? In HN direkt? Hätte da schon Interesse dran.
4  International / Deutsch / Prüfung zur Laufzeit ob Server verfügbar ist on: March 04, 2014, 02:54:59 am
Wie kann ich zur Laufzeit prüfen ob ein Server verfügbar ist, bzw. ob das Netzwerkkabel vom Ethernet Shield angezogen ist? Bin grad auf Arbeit und keine keinen Code posten. Ich möchte Messwerte per GET an mein Server übertragen. Das geht auch ohne Probleme. Mein konkretes Problem ist, das wenn zur Laufzeit das Netzwerkkabel abgezogen wird, der Code / Arduino für ca. 3 sec. einfriert weil er versucht sich mit dem Server zur verbinden. Das einfrieren sehe ich an der Uhrzeit bzw. den Sekunden das er z.B. bei 45 Sekunden stehenbleibt und erst wieder 48 weiterläut. Wenn das Netzwerkkabel eingesteckt ist, geht es natürlich. Irgendeine Idee?   
5  International / Deutsch / Re: Offtopic Highcharts / Highstock MySQL Arduino on: February 19, 2014, 01:06:36 am
Hallo,

den Beitrag kenne ich und dieser ist auch hervorragend Dokumentiert. Aber bei diesem Highchart wird keine Wandlung der MySQL Daten ins JSON Format vorgenommen und genau da benötige ich ja Hilfe.
6  International / Deutsch / Offtopic Highcharts / Highstock MySQL Arduino on: February 18, 2014, 03:59:41 pm
Hallo,

ich bin mal wieder bei einem Problem wo ich nicht weiterkomme. Kennt sich jemand mit JSON, MySQL aus und kann mir unter die Arme greifen? Ich möchte für mein Arduino Projekt Werte aus meiner SQL Datenbank holen, diese per JSON Encode in das richtige Format bringen und als Highchart ausgeben. Mein Highchart läuft soweit mit meinen "fake" JSON Daten. Das verbinden und auslesen meiner Datenbank geht auch. Ich brauche hilfe beim wandeln der Daten ins JSON Format samt bestimmten timestamp und einfügen an die richtige Stelle im Code der *.htm Seite
7  International / Deutsch / Re: DS1307 New Lib Problem mit fillbytime2000 on: February 13, 2014, 04:29:49 pm
Hallo Pylon,

sorry für die späte Antwort. Habe jetzt mal die Spannung messen wollen und siehe da: 0V, 3,5V, 2,8V, 1,1V, 0V, 0,2V etc....
Ich könnt echt kotzen. Das Problem war / ist die kalte Lötstelle gewesen. Habe es jetzt nachgelötet und nun geht der Code. Es ist ein DS1307 aus China. Bei genauer Betrachtung sind alle Lötstellen beschi....en. Das kommt also sehr gut mit deiner Vermutung zusammen. Durch die "instabile" Spg. Versorgung macht er wohl Fehler beim schreiben. Meisten hielt ich das DS1307 in der Hand bzw. am Kabel. Deswegen hatte ich wohl meistens Glück als ich die Zeit "selber" befüllt hatte. Danke nochmals für deinen Wertvollen Tipp. So wäre ich nicht drauf gekommen  smiley-lol

8  International / Deutsch / Re: DS1307 New Lib Problem mit fillbytime2000 on: February 11, 2014, 05:30:54 am
Hallo Pylon,

sorry das war mein Fehler, habe eigentlich gedacht das ich den Link reinkopiert hätte. Habe ich wohl vergessen. Sorry nochmals.

Ich verwende die Version 1.24 von der Lib hier

http://code.google.com/p/ds1307new/downloads/list

Habe allerdings auch schon die 1.23 probiert. Arduino IDE ist die 1.05
9  International / Deutsch / Re: ITead WIZnet W5100 und NRF24L01+ Arduino Mega 2560 on: February 10, 2014, 10:29:34 am
Das Display habe ich per Transistor angeschlossen. Das ist nicht das Problem. Habe irgendwie die Vermutung das mir die 3,3V nicht Stabil ist oder kurzzeitig weg ist.
10  International / Deutsch / Re: ITead WIZnet W5100 und NRF24L01+ Arduino Mega 2560 on: February 10, 2014, 09:36:27 am
Die 3,3V werden aus den 5V gemacht, richtig? Ich pulse per PWM meine Display Beleuchtung, kann es deswegen sein das der NRF24L01 nicht richtig funktioniert? Habe jetzt mal einen 100nF an VCC und GND gelötet, jedoch noch keine Besserung.... smiley-confuse
11  International / Deutsch / Re: DS1307 New Lib Problem mit fillbytime2000 on: February 10, 2014, 09:34:31 am
Hi,

im Anhang der Code. Hoffe irgendjemand findet den Fehler smiley
12  International / Deutsch / Re: DS1307 New Lib Problem mit fillbytime2000 on: February 10, 2014, 05:01:57 am
Hi, Du meinst bestimmt diese Stelle
Code:
RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));
    RTC.getRAM(55, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    if (TimeIsSet != 0xaa55) {
      RTC.stopClock();
      // Setzt die Zeit und Datum als time2000
      RTC.fillByTime2000(timeNow);   
      RTC.setTime();
      TimeIsSet = 0xaa55;
      RTC.setRAM(5, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
      RTC.startClock();
    }

Ich hatte auch mal alles Auskommentiert, dies funktionierte aber ebenso wenig:

Code:
       
      RTC.stopClock();
      // Setzt die Zeit und Datum als time2000
      RTC.fillByTime2000(timeNow);   
      RTC.setTime();
      RTC.startClock();
    }
13  International / Deutsch / Re: ITead WIZnet W5100 und NRF24L01+ Arduino Mega 2560 on: February 10, 2014, 04:19:38 am
Hallo,

danke nochmals für eure Antworten und eure Hilfe. Und danke nochmals an Ulli für deine PN. Ich habe jetzt den Code umgebaut, jedoch läuft es immer noch nicht ganz korrekt. Es läuft immer nur eine gewisse Zeit lang. Ich habe gestern einen Versuch unternommen und mal alles, bis auf den Mega, extern mit einem Labornetzteil zu betreiben. Und siehe da, alles läuft Std. so wie es soll. Ich habe eine Gesamtstromaufnahme von ca. 220mA, gemessen OHNE Mega. Daran hängt folgendes: Ehternet Shield, NRF24L01, RTC, I2C Adapter und das 20x4 LCD Display. Bisschen viel?

14  International / Deutsch / [Gelöst] DS1307 New Lib Problem mit fillbytime2000 on: February 10, 2014, 04:13:49 am
Hallo,
ich versuche verzweifelt meinen RTC mit der Lib langfristig zu stellen. Ich hole mir die Zeit per NTP und dann wird auch die Zeit im RTC korrekt gestellt. Ich befülle den RTC mit der "fillByTime2000" Funktion. Leider ist die Zeit wieder nach einem Hard Reset weg. Wenn ich die epoch Zeit nicht als Variable übergebe, sondern über die Zahl, also statt fillByTime2000(timeNow) mit fillByTime2000(1392023633) dann geht es. Ebenso gilt es für fillByHMS. Wenn ich die Variable übergebe geht's nicht, wenn ich (10,2,10) eingebe funktioniert es wieder. Ich lasse mir die Variable auf dem Serial Monitor ausgeben. Die Variablen sind korrekt befüllt. Arduino IDE ist 1.0.5 Lib ist Version 1.24

Was kann ich da jetzt machen?

Code:
//####################################################################//
//                    Uhrzeit und Datumsanzeige                       //
//####################################################################//

void Clock() // Uhrzeit Ausgabe auf LCD
{    
  RTC.getTime(); // RTC Zeit holen
  if (RTC.hour < 10){ // Wenn RTC Stunde < 10 dann
    lcd.setCursor(7,1); // Cursorbeginn auf Zeichen 7, Zeile 2
  }
  else { // sonst
    lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
  }
  lcd.print(RTC.hour); // Stunden anzeigen
  printDigits(RTC.minute); // : Minuten anzeigen
  printDigits(RTC.second); // : Sekunden anzeigen
  lcd.setCursor(3,2); // Cursorbeginn auf Zeichen 1, Zeile 2
  switch (RTC.dow) { // Prüfe welcher Wochentag ist und dann Ausgabe als Text
  case 0:    // Wenn RTC.dow = 0
    lcd.print(F("So.")); // Wochentag "Sonntag"
    break; // fertig
  case 1:    // Wenn RTC.dow = 1
    lcd.print(F("Mo.")); // Wochentag "Montag"
    break; // fertig
  case 2:    // Wenn RTC.dow = 2
    lcd.print(F("Di.")); // Wochentag "Dienstag"
    break; // fertig
  case 3:    // Wenn RTC.dow = 3
    lcd.print(F("Mi.")); // Wochentag "Mittwoch"
    break; // fertig
  case 4:    // Wenn RTC.dow = 4
    lcd.print(F("Do.")); // Wochentag "Donnerstag"
    break; // fertig
  case 5:    // Wenn RTC.dow = 5
    lcd.print(F("Fr.")); // Wochentag "Freitag"
    break; // fertig
  case 6:    // Wenn RTC.dow = 6
    lcd.print(F("Sa.")); // Wochentag "Samstag"
    break; // fertig
  }
  if (RTC.day < 10 && RTC.month < 10){ // Wenn Tag < 10 und Monat < 10  
    lcd.setCursor(9,2); // Cursorbeginn auf Zeichen 9, Zeile 3
  }
  else if (RTC.day >= 10 && RTC.month < 10 || RTC.day < 10 && RTC.month >= 10 ){ // Wenn Tag > 10 und Monat < 10 oder Tag < 10 und Monat > 10
    lcd.setCursor(8,2); // Cursorbeginn auf Zeichen 8, Zeile 3
  }
  else { // alles andere
    lcd.setCursor(7,2); // Cursorbeginn auf Zeichen 7, Zeile 3
  }
  lcd.print(RTC.day); // Tag anzeige
  lcd.print(F(".")); // Text "."
  lcd.print(RTC.month); // Monat anzeige
  lcd.print(F(".")); // Text "."
  lcd.print(RTC.year); // Jahr anzeige
}

//####################################################################//
//         Führende Null bei der Uhrzeit wenn kleiner 10              //
//####################################################################//

void printDigits(int digits) // Funktion um die : zwischen Std. / Min. / Sek. darzustellen
{
  lcd.print(F(":")); // Text ":"
  if(digits < 10) // Wenn Stunden weniger 10
      lcd.print(F("0")); // setzte 0 voran
  lcd.print(digits); // Ausgabe Digits
}

//####################################################################//
//              NTP Zeit mit RTC Zeit synchronisieren                 //
//####################################################################//

void NTPSyncUpdate()
{
  if((millis() - prev_NTPSyncUpdate) > interval_NTPSyncUpdate) { // Delay mit Millis damit der µC nach andere Dinge paralell abarbeiten kann  
    prev_NTPSyncUpdate = millis(); // Aktuelle millis Zeit in "NTPSyncUpdate" speichern
    NTPSync(); // Funktion NTPSync aufrufen
  }
}

void NTPSync()
{
  if(Udp.available()) {
    while (!Udp.parsePacket()) ;
    // We've received a packet, read the data from it
    Udp.read(packetBuffer,NTP_PACKET_SIZE);  // read the packet into the buffer
    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:
    highWord = word(packetBuffer[40], packetBuffer[41]);
    lowWord = word(packetBuffer[42], packetBuffer[43]);  
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    secsSince1900 = highWord << 16 | lowWord;              
    // now convert NTP time into everyday time:
    seventyYears = 2208988800UL;    
    // subtract seventy years:
    epoch = secsSince1900 - seventyYears;      
    // print the hour, minute and second:
    // Unixtime(epoch) - Sek seit 2000(time_2000)
    mesz = epoch - time_2000;
    timeNow = mesz + adjustDstEurope();
    // Set Time to RTC
    RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));
    RTC.getRAM(55, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    if (TimeIsSet != 0xaa55) {
      RTC.stopClock();
      // Setzt die Zeit und Datum als time2000
      RTC.fillByTime2000(timeNow);    
      RTC.setTime();
      TimeIsSet = 0xaa55;
      RTC.setRAM(5, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
      RTC.startClock();
    }
  }
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:  
  Udp.beginPacket(address, 123); // NTP requests are to port 123
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket();
}

//####################################################################//
//              Berechnung der Sommer / Winterzeit                    //
//####################################################################//

int adjustDstEurope()
{
  // last sunday of march
  int beginDSTDate=  (31 - (5* year() /4 + 4) % 7);
  int beginDSTMonth=3;
  //last sunday of october
  int endDSTDate= (31 - (5 * year() /4 + 1) % 7);
  int endDSTMonth=10;
  // DST is valid as:
  if (((month() > beginDSTMonth) && (month() < endDSTMonth))
    || ((month() == beginDSTMonth) && (day() >= beginDSTDate))
    || ((month() == endDSTMonth) && (day() <= endDSTDate)))
    return 3600;  // DST europe = utc +1 hour
  else return 0; // nonDST europe = utc +0 hour
}
15  International / Deutsch / Re: ITead WIZnet W5100 und NRF24L01+ Arduino Mega 2560 on: February 08, 2014, 08:03:03 am
Für den I2C gilt das zwar, aber laut Wikipedia gibt es das nicht beim SPI http://de.wikipedia.org/wiki/Serial_Peripheral_Interface
Da sind zumindest keine Widerstände eingezeichnet.

Quote
Das NRF24-Modul ist so verdrahtet: CE:3, CS:9, MOSI:5, MISO:6, SCK: 7, IRQ:2

Wo definierst Du das MOSI, MISO und SCK auf 5,6, und 7 liegen? Dachte die Hardware SPI auf dem Mega ist 50, 51, 52
Pages: [1] 2 3 ... 6