Show Posts
Pages: 1 ... 49 50 [51] 52 53 ... 75
751  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 12:13:17 pm
Hier mal ein Schnipsel einer Uhr die die Zeit in klarem Text auf ein Diplay zeigt und entsprechenden Seiten zum Stellen der einzelenen Sachen (die RTC Funktionen habe ich nicht mitkopiert)
Main Loop
Code:
void loop() {
  tempist=get_TEMP();                           // einlesen Temperatur Istwert
  T1Read=digitalRead(Taster1);                  // Taster 1
  T2Read=digitalRead(Taster2);                  // Taster 2
  ssIn=digitalRead(RTCPuls);
  digitalWrite(13,ssIn);
  if (T1Read==false&&LT1Read==true){  // Taster muss gedrückt sein und darf vorher nicht gedrückt sein
    LT1Read=false;                    // Hilfmerker zum einmal ausführen
    setmode=setmode++;                // Erhöhen des Setmode zum Stellen 1=Std 2=Minuten 3=Tag 4=Monat 5=Jahr 0=Normalbetrieb
    Buttonmillis=millis();
    kopieren=false;
    lcd.clear();
    if (setmode>=7){
      lcd.clear();
      setmode=0;
      run=true;
    }  
  }
  if (T1Read==true&&LT1Read==false){
    LT1Read=true;
  }
  if (T2Read==false&&LT2Read==true&&setmode>0){   // Taster muss gedrückt sein und darf vorher nicht gedrückt sein
    LT2Read=false;                                // Hilfmerker zum einmal ausführen
    Wert=Wert++;                                  // Erhöhen des Setmode 1=Std 2=Minuten 3=Tag 4=Monat 5=Jahr 0=Normalbetrieb
    Buttonmillis=millis();  
  }
  if (T2Read==true&&LT2Read==false){
    LT2Read=true;
  }
  if (millis()-Buttonmillis>=7500&&setmode>0){      // Rücksetzen nach 7,5 Sekunden
    setmode=0;
    run=true;  
  }
  if (ssIn==true&&lssIn==false){
    ++ss;
    if (DR==true){
      DateRead();
      DR=false;
    }
    if (ss==60){
      ss=0;
      mm=mm+1;
    }
    if (mm>=60){                                    //=> dann hier weiter (zählen) der Sekunden/Minuten/Stunden
      mm=0;
      hh=hh++;
      oncehh=false;
    }
    if (hh>=24){
      hh=0;
      DR=true;
    }
    lssIn=true;
  }
  if (ssIn==false&&lssIn==true){
    lssIn=false;
  }

  switch (setmode){
  case 0:
    lcd.setCursor(0,0);
    lcd.print("ES IST "); // Bis Position 6,0
    lcd.setCursor(7,0);
    if (mm!=lmm || run==true){
      hh=HourRead();                                // RTC Funktion lesen der aktuellen zeit Stunden
      mm=MinuteRead();                              // RTC Funktion lesen der aktuellen zeit Minuten
      ss=SecondRead();                              // RTC Funktion lesen der aktuellen zeit Sekunden  
     check=true;
      lcd.clear();
      lcd.setCursor(7,0);
      MinutetoText(mm);
      HourtoText(hh);
      //  DatetoText
      lcd.setCursor(0,1);
      lcd.print("AM ");
      WeekdaytoText(WTag);
      printDate2();
      lmm=mm;
      run=false;
    }
    printTemp(31,0,tempist);
    break;
  case 1:
    if (kopieren==false){                                    // Einmaliges Kopieren des Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=hh;                                               // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(hh!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>=24){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=0;
      }
      hh=Wert;                                            // Schreiben des Arbeitswertes in den neuen Istwert
      RTC_Set_Time();                                     // Schreiben der neuern Werte in die RTC
    }
    lcd.setCursor(0,0);
    lcd.print("STELLEN STUNDEN                         ");
    break;
  case 2:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=mm;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(mm!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>=60){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=0;
      }
    }
    mm=Wert;                                            // Schreiben des Arbeitswertes in den neuen Istwert
    RTC_Set_Time();
    lcd.setCursor(0,0);
    lcd.print("STELLEN MINUTEN                        ");
    break;
  case 3:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Tag;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Tag!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>31){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    Tag=Wert;          
    RTC_Set_Date();    
    lcd.setCursor(0,0);
    lcd.print("STELLEN TAG                            ");
    break;
  case 4:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Monat;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Monat!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>12){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    Monat=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN MONAT                          ");
    break;
  case 5:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Jahr;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Jahr!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>2019){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=2011;
      }

    }
    Jahr=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN JAHR                           ");
    break;  
  case 6:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=WTag;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(WTag!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      lcd.clear();
      if (Wert>7){                                        // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    WTag=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN WOCHENTAG  ");
    lcd.print(Name[Pointer]);
    lcd.print(" NOCH ");
    lcd.print(RestTage);
    lcd.print(" TAGE ");
    break;  

  }
  if (setmode>=1){
    printTime(0,1);
    printDate(9,1);
    WeekdaytoText(WTag);
  }
  if (test==true){

  }
  checkBday();
}
752  International / Deutsch / Re: Probleme eines Anfängers :) on: November 28, 2011, 03:40:41 pm
Also ich arbeite bei "Displaymenüs" immer mit switchcase. In dem Switchcase hinterlegt du dann die einzelnen Seiten. Du kannst dann innerhalb der Siwtchcases dann deine Displayausgabe gestalten und außerhalb der Cases die Werte verarbeiten. Wie du deine Displayseiten umschaltest ist ja dann dir überlassen :-)
753  International / Deutsch / Re: Button Hold on: November 28, 2011, 02:48:43 am
Ich glaube in diesem Programm ist genau das vorhanden was du brauchst wobei du dann nihct an das Türklopfen verwendest sondern deine Button
http://grathio.com/2009/11/secret_knock_detecting_door_lock/
754  International / Deutsch / Re: Starker Motortreiber on: November 26, 2011, 01:16:16 pm
Hier stehen zwei verscheidene "Interessen" gegenüber also
-besserer Wirkungsgrad (geringer Verluste im Motor) kontra "akkustischem Komfort"
d.h. bnei Taktfrequenzen unterhalb 16kHz bist sehr stark im Hörbaren Bereich was je nach Frequenz sehr unangenehm ist. Ich sehe zu das ich im 4 kHz bereich bei meinen Antrieben auf der Arbeit bleibe, weil dies noch am "angenehmsten" ist. Nimmst du aber höhere Frequenzen  sind die Verluste im Motor höher und der Mosfet hat u.U. höhere Temperaturen (aufgrunde der Höheren Schaltfrequenz).
Wenn du sowieso erstmal die orginalen PWMs vom Arudiono nimmst hast du glaube ich 500Hz/1kHz taktfrequnzen (die zum Testen erstmal vollkommen ausreichen). Die Taktfrequenz kannst du nachher im durch ändern dcer Prescaler ändern.
Zu den Mosfet est gibt bei vielen Serien schon Isolierte Mosfets.
755  International / Deutsch / Re: wo in München? on: November 25, 2011, 12:35:42 pm
Schaur mal hier,
Vielleicht kann man da sogar ein Sammelbestellung machen.
http://www.allesplatte.de/calculator
Bei 5 Platten 20*20cm wäre man schon bei ca 27€







Tante Edith meinte:Preis reinschreiben
756  International / Deutsch / Re: Starker Motortreiber on: November 24, 2011, 02:33:04 pm
Also wenn du einen starke H-Brücke incl Ansteuerung haben willst bist du mit dem
HIP4082 und 4*IRFZ44R kommst du auf 50A ansteuerung und maximale Taktfrequenz von 200kHz 
757  International / Deutsch / Re: Teilbereich spannungsmessung on: November 22, 2011, 02:56:26 pm
Hier eine Lösung mit Zener Diode (wobei diese hier ein Temperatur Stabilisierte sein muss)
Mit der Schaltung im Anhang könntest du deine Spannung über den Widerstand messen. (Wahlweise die Zenerspannung auch erhöhen) Wenn du deinen Hub unter 1V bekommst schaltest du die Analog Refrence auf 1,1V und dann hast du auch noch ne Gut auflösung
758  International / Deutsch / Re: Heartbeat on: November 21, 2011, 10:34:34 am
Das Delay ist nur für euch da :-).
Ich nehme das Array und lasse es durch Up(gesetzt durch die RTC) einmal durchlaufen und dann wartet es auf einen neuen Impuls (RTC gibt jede Sekunde 1 Impuls) was jeder draus macht ist jedem Überlassen.
Es geht in erster Linie um das doppelpulsen : smiley-money smiley-money
759  International / Deutsch / Re: Heartbeat on: November 21, 2011, 12:59:41 am
Genauso. Es ist ein Doppelblinken mit Fadeeffect also es sieht "lebendig" aus und nicht "digital".  smiley
760  International / Deutsch / Heartbeat on: November 20, 2011, 05:16:40 pm
Ich braucht gerade mal eine LED die im Herzschlagtakt schlägt.
Da ich keinen schönen Code gefunden habe schrieb ich mit mal eben selbst was.
Im Array kann man die "Art"schön betimmen.
 Poste ich hier mal meinen Heartbeat via PWM an Pin 10

Code:
unsigned long lmillis;
byte i=0;
boolean up=true;
byte Fadearray[]={
     0,  2,  4,  8, 12, 20, 32, 44, 56, 68,
    80, 92,104,116,128,140,152,164,176,188,
   200,212,224,236,255,240,210,180,150,120,
    90, 60, 40, 25, 25, 40, 60, 90,120,150,
   180,210,240,255,230,205,180,155,130,105,
    80, 55, 30, 20, 16,  8,  4,  2,  0};

void setup(){
  pinMode(10,OUTPUT);
}

void loop(){
  if (millis()-lmillis>=11){
    if (i==58){
      up=false;
      delay(550);
      i=0;
    }
    i++;
    analogWrite(10,Fadearray[i]); 
    lmillis=millis();
  }
}

Gruß
Volvodani
761  International / Deutsch / Re: Arduino selber bauen - wie programmieren? on: November 20, 2011, 07:53:22 am
Der kleine Programmer aus myavr ist jeden Euro wert (und das sind noch nicht mal viele). Ich habe nur Positive Erfahrungen damit gemacht. Kleine änderung in der IDE und du brauchst noch nicht mal einen Bootloader und spart dann platz auf dem µC
762  International / Deutsch / Re: Was passiert bei falscher Pinbelegung? on: November 19, 2011, 12:32:58 pm
Genauso sieht es aus. Im Grunde muss man halt nur aufpassen das kein zu hoher STrom fließt bzw eine zu hohe Spannung anliegt. Ich persöhnlich nutze wenn ich höhere Spannungen überwache als 5V trotz Vorteiler immer noch eine 5,1V Z-Diode  (Eingänge sind bis max 5,5V "belastbar"). Dann ist man noch sicherer.
763  International / Deutsch / Re: Lüfter anlaufen PWM on: November 17, 2011, 03:22:26 pm
Was spricht denn dagegen den Reglerausgang 0-100% mit  50-255 zu bewerten und den dann auf den PWM zu schreiben da sehe ich kein Problem und ich denke das es der Regelung auch nicht in die Quere kommen wird da bei der niedrigen Drehzahl sowieso ein nicht allzu hoher Luftstrom erzeugt wird.
764  International / Deutsch / Re: Lüfter anlaufen PWM on: November 17, 2011, 10:02:23 am
Nenn das Kind doch Offset beim Wideranlaufen und dann stört es nicht beim Begriff PID Regler.  smiley-grin smiley-grin
Andrerseits müsste dein I-Anteil diesen Offset nach einer Zeit selber den lüfter zu anlaufen bringn
765  International / Deutsch / Re: Projektvorstellung: Phasenbestimmer on: November 15, 2011, 06:35:00 am
Das Hauptproblem das du hast.Ist das die Programzyklen durch die Libaries schwankt deswegen sind deine Messungen der Zeit ungenau.
-Arbeite doch mit AttachInterrupt (über Interrupt-Eingang)und werte die Steigende und Fallende Flanke aus damit hast du den Zeitpunkt genauer.
-Das Display würde ich nur 1 mal pro Sekunde auffrischen oder eben nur nachdem deine Messungen fertig sind (damit spart du CPU Zeit für andere Sachen)
-Debounce raus und das dann manuell gemacht (ist meiner meinung nach Kompakter und hat bessere Timing vorteile)

Meine Vorschläge (aber ich habe ja gut reden  smiley-lol)

Gruß volvodani
Pages: 1 ... 49 50 [51] 52 53 ... 75