Show Posts
Pages: 1 ... 17 18 [19] 20 21 ... 24
271  International / Deutsch / Re: Arduino DS1307 Counter on: January 23, 2012, 01:57:53 am
Wenn du eine absolute Zahl haben willst dann mach doch
time.hour*60 + time.min
Solange das größer als 510 und kleiner als 1260 ist Relais an sonst aus-
Gruß
Bernward

P.S. geht natürlich auch mit Sekunden time.hour *3600 + time.min*60 + time.sec
272  International / Deutsch / Re: Anfaenger sucht sowas wie ne WAIT funktion on: January 18, 2012, 05:49:01 am
So ganz ist dein Code nicht nachvollziehbar.
Du machst ja 4 mal hintereinander das gleiche wenn ich das richtig sehe,
Step1 und 2 ist das gleiche wie 3 und 4, 5 und 6 sowie 7 und 8.
Das geht bestimmt wesentlich eleganter.
Du willst aber zwischen jedem Step auf ein Ereignis warten??
Ich weiß nicht wie es anderen geht ich versteh es nicht ganz.
273  International / Deutsch / Re: fotowiederstand anfänger frage on: January 14, 2012, 11:44:16 am
Hallo,
grob beschrieben etwa so:

#define LDR 15 // analoger Eingang für den Phototransistor

in der void setup den Pin deklarieren:

pinMode(LDR, INPUT);

und in der loop

ldrwert = analogRead(LDR);
 if ((ldrwert > ldrgrenzwert) led aus else led ein;

stimmt natürlich von der syntax her nicht, aber so einfach ist ein LDR anzusprechen.
Gruß
Bernward
274  International / Deutsch / Re: Problem mit Zeitsteuerung - achtung Anfänger ;-) on: December 11, 2011, 05:20:38 am
Hall Jochen,
dafür ist das Forum da.
Wenn du was nicht verstehst: fragen, fragen, fragen.
Gruß
Bernward
275  International / Deutsch / Re: Problem mit Zeitsteuerung - achtung Anfänger ;-) on: December 10, 2011, 05:58:58 am
Hallo Jochen,
ich habs mal kurz überflogen.
Deine For Schleife bewirkt eigentlich gar nichts.
Du zählst eine Variable hoch und setzt den Summer auf high, du könntest i auch bis 10.000 hoch zählen lassen,
das wäre das gleiche.
Wenn ich dich richtig verstanden habe soll der Summer einmal gehen wenn der Schalter auf Low geht, ich würde da ein
flag einbauen:
Ich habs jetzt nur kurz hingeschrieben ohne Syntaxprüfung, sollte aber so gehen. Geht aber auch ohne delay, dann muss du mit millis() arbeiten.
Immer wenn der Schalter auf High ist, wird das flag gesetzt. Beim nächsten mal low verzweigt das Programm dann einmal in die if
Schleife, stellt den Summer für 1 Sekunde an und wieder aus.

Code:
int ledPin1 = 13;
int ledPin2 = 12;
int schalter = 2;
int summer = 11;
int flag,i;
void setup()
{
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(schalter, INPUT);
  pinMode(summer, OUTPUT);
  digitalWrite(schalter, HIGH);
  flag=0;
}
void loop(){
  int val = digitalRead(schalter);
  if (val == LOW) {
   digitalWrite(ledPin2, LOW);
    if (flag==1){
      flag=0;
      digitalWrite(summer, HIGH);
      delay(1000);  
     digitalWrite(summer, LOW);    
   }
    digitalWrite(ledPin1, HIGH);
    delay(500);
  digitalWrite(ledPin1, LOW);
  delay(50);
  digitalWrite(ledPin1, HIGH);
  }
  else {  
  flag=1;   
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(summer, LOW);
  }
}
276  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 02:01:43 pm
Hallo,
also der Code ist aber extrem lang um ein Uhrmodul zu stellen oder die Uhrzeit anzuzeigen.
Anzeigen geht z.B. auch so (jede Sekunde einmal):
Angezeigt wird Datum und Uhrzeit im Format: 29.11.11  20:12:12

Code:

RTC.get(UhrDaten,true);
 if(UhrMomentanzeit - UhrStartzeit > 1000){
  lcd.setCursor(0,0);
  sprintf (puffer, "%02d.%02d.%02d", UhrDaten[4],UhrDaten[5],UhrDaten[6]);  // %02d sind Platzhalter: int mit zwei Ziffern und führender Null ausgeben
  lcd.print(puffer); lcd.print(" ");
  sprintf (puffer, "%02d:%02d:%02d", UhrDaten[2],UhrDaten[1],UhrDaten[0]);  
  lcd.print(puffer);

und stellen geht auch wesentlich einfacher.
gruß
Bernward
277  International / Deutsch / Re: Wo Brushlessmotor und ESC in D kaufen? on: November 06, 2011, 06:34:31 am
Hallo Christoph,
jetzt bitte ich dich aber....
ich bin Modellbauer und Lipos, ESC und Motoren gibt es bei ebay und in jedem Modellbaushop zu tausenden.
Da hast du aber nicht richtig gesucht.
Am günstigsten allerdings in HK, wenn man mehr braucht.
DIE Adresse für Modellbauer überhaupt: http://www.hobbyking.com/hobbyking/store/index.rc
, die haben auch ein Lager und einen Versand in Deutschland, allerdings nicht so üppig ausgestattet wie in HK.
Gruß
Bernward
278  International / Deutsch / Re: Serial empfangene werte in Integer Array on: October 30, 2011, 04:55:52 am
Ich würde sagen, ganz einfach so:
ein Array und eine Variable definieren, das Feld hat jetzt 101 Werte;
immer wenn ein Wert gelesen wird, wird i eins hoch gezählt und der Wert in das entsprechende Feld geschrieben.
Oder hast du was anderes gemeint?
Code:
// This example sets all the values of the digital pins with a list through a callback function

#include <Messenger.h>
// Instantiate Messenger object with the default separator (the space character)
Messenger message = Messenger(',');
int i, Wert[100];
// Create the callback function
void messageReady()
{
  if ( message.checkString("c") )
   i=0; 
  {
       // Loop through all the available elements of the message
       while ( message.available() )
       {
          int value = message.readInt();
         
          i++;
          Wert[i] = value;
         
          Serial.println(value);
        }
  }
  else if
  {
   if ( message.checkString("PING") )
     Serial.println("ACK");   
  }
  else
    //falls es eine message für die es kein handling gibt
    message.readInt();
}


void setup() {
  // Initiate Serial Communication
  Serial.begin(115200);
  // Attach the callback function to the Messenger
  message.attach(messageReady);
}


void loop() {
  // The following line is the most effective way of using Serial and Messenger's callback
  while ( Serial.available() )  message.process(Serial.read () );
}

279  International / Deutsch / Re: Problem SRF02 mit DS1307 on: October 25, 2011, 07:53:42 am
Hallo Uwe,
hier ist es, aber ob das ohne Beschreibung hilft weiß ich nicht.
Jedenfalls läuft alles ohne den SRF02 problemlos, auch die Uhr, wenn
ich aber den Sensor dazu anstecke, bleibt die Uhr stehen.
Ich habe aber ein paar Programmpunkte (aber nur LCD-Ausgaben und Tasterabfragen) löschen müssen, da es zum Senden zu lang war.

Gruß
Bernward
Code:

#include <Wire.h>
#include "SRF02.h"
#include <Wprogram.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#define TasterNull 10 // Taster zum Stellen der Uhr
#define TasterEins 9
#define TasterZwei 8
#define TasterDrei 11
#define LCDBeleuchtung 12
SRF02 sensor[2] = {SRF02(0x70, SRF02_CENTIMETERS), SRF02(0x72, SRF02_CENTIMETERS)};
#define Relais00 14 //Relais für Wassertank Keller
#define Relais01 15 //Relais für Wassertank Dachboden
#define Schwimmeroben 16 //oberer Schwimmerschalter Dachboden
#define Schwimmerunten 17 //unterer Schwimmerschalter Dachboden
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Ausgabepins für das LCD-Display
unsigned long Laufzeit[2];
unsigned long tg,st,mi,se;// Auswertung der Laufzeit der zwei Relais
long UhrStartzeit, UhrMomentanzeit;
int tasterstatus0, tasterstatus1, tasterstatus2, tasterstatus3, letzterwert, prellzeit, tasterval = 0;
int obenstatus,untenstatus;
int i, j, check, zaehler, flag, lcdan, controll, ProgrammStart[7], Stunde[2], Minute[2];
int UhrDaten[7];
char puffer[20];
boolean clean, lcdreset;
int Min[2] = {80,45}, Max[2] = {70,45};
String WochenTag[7]={"Sonntag   ","Montag    ","Dienstag  ","Mittwoch  ","Donnerstag","Freitag   ","Samstag   "};
const int Einschaltzeiten[2] = {7,20}; //Befüllung nur zwischen 7 und 20 Uhr
//---------------------------------------------------------------------------------------------
void setup(void){
 pinMode(TasterNull, INPUT);
 pinMode(TasterEins, INPUT);
 pinMode(TasterZwei, INPUT);
 pinMode(LCDBeleuchtung, OUTPUT);
 pinMode(Relais00, OUTPUT); //Relais für Wassertank Keller
 pinMode(Relais01, OUTPUT); //Relais für Wassertank Dachboden
 lcd.begin(LCD_WIDTH, LCD_HEIGHT,1);
 Serial.begin(9600);
 Wire.begin();
 SRF02::setInterval(1000);
 RTC.get(ProgrammStart,true);
 digitalWrite(Relais00, LOW);digitalWrite(Relais01, LOW);
 delay(3000);
}
//---------------------------------------------------------------------------------------------
void LCDein(){
 if (lcdan == 1){
  Stunde[0] = UhrDaten[2]; Minute[0] = UhrDaten[1]; //setzt Stunde und Minute auf aktuelle Zeit  
  digitalWrite(LCDBeleuchtung, HIGH);
  lcdan = 0;  
 }
 // LCD wird nach 10 Minuten ohne Tastenbetätigung ausgeschaltet
 if ((UhrDaten[2] * 60 + UhrDaten[1]) - (Stunde[0] * 60 + Minute[0]) > 10) digitalWrite(LCDBeleuchtung, LOW);
}
//---------------------------------------------------------------------------------------------
int ZeitScrollen(int endwert, int flag, int i){
 UhrMomentanzeit = millis();
 int scroll=flag;
 while (tasterstatus2 == LOW && millis() - UhrMomentanzeit < 4000 ) {
  tasterstatus1=digitalRead(TasterEins);
   if (tasterstatus1==HIGH){
     UhrMomentanzeit = millis();
     lcd.noCursor(); scroll ++;
     Ausgabe(scroll,i);    
    if(scroll >= endwert) scroll=flag;
   }
  prellzeit=digitalRead(TasterZwei); delay(50);
  letzterwert=digitalRead(TasterZwei);
   if(prellzeit == letzterwert){
    tasterstatus2=prellzeit; delay(200);
   }
  }
 if (millis() - UhrMomentanzeit < 4000) controll++;
 tasterstatus2 = LOW; return scroll;
}
//---------------------------------------------------------------------------------------------
void UhrStellen(){
  lcdan = 1; LCDein();
  lcd.clear(); clean=HIGH; controll=0;
  lcd.setCursor(0,0);lcd.print("Eingabe Datum/Uhrz.");
  lcd.setCursor(2,2);lcd.print("Taster 1 stellen");
  lcd.setCursor(2,3);lcd.print("Taster 2 weiter");
  lcd.setCursor(0,1); lcd.print(WochenTag[0]);  
  UhrDaten[3] = ZeitScrollen(6,-1,0);
   if(UhrDaten[3]==-1)UhrDaten[3]=6; lcd.setCursor(11,1);lcd.print("00");
  UhrDaten[4] = ZeitScrollen(31,0,1);
   if(UhrDaten[4]==0)UhrDaten[4]=31; lcd.setCursor(13,1);lcd.print(".00");
  UhrDaten[5] = ZeitScrollen(12,0,2);
   if(UhrDaten[5]==0)UhrDaten[5]=12; lcd.setCursor(16,1);lcd.print(".00");
  UhrDaten[6] = ZeitScrollen(30,10,3);
   if(UhrDaten[6]==10)UhrDaten[6]=30;
   lcd.setCursor(1,2);lcd.print("Uhrzeit           "); lcd.setCursor(11,2);lcd.print("00");
  UhrDaten[2] = ZeitScrollen(23,-1,4);
   if(UhrDaten[2]==-1)UhrDaten[2]=23; lcd.setCursor(13,2); lcd.print(".00");
  UhrDaten[1]=ZeitScrollen(59,-1,5);
   if(UhrDaten[1]==-1)UhrDaten[1]=59; lcd.setCursor(16,2); lcd.print(".00");
  UhrDaten[0]=ZeitScrollen(59,-1,6);
   if(UhrDaten[0]==-1)UhrDaten[0]=59;
//Uhrmodul wird neu gesetzt
  if(controll > 4){ // mindestens fünf Werte wurden geändert, sonst bleibt alte Uhrzeit bestehen
   RTC.stop();
   RTC.set(DS1307_SEC,UhrDaten[0]);//geht nicht, Sekunden werden auf Null gesetzt
   RTC.set(DS1307_MIN,UhrDaten[1]);
   RTC.set(DS1307_HR,UhrDaten[2]);
   RTC.set(DS1307_DOW,UhrDaten[3]+1);
   RTC.set(DS1307_DATE,UhrDaten[4]);
   RTC.set(DS1307_MTH,UhrDaten[5]);
   RTC.set(DS1307_YR,UhrDaten[6]);
   RTC.start();
  }
 controll=0;
}
//---------------------------------------------------------------------------------------------
void BasisDaten(int aktuell){
 }
//---------------------------------------------------------------------------------------------
void zeitberechnen(int aktuell){
 tg=Laufzeit[aktuell]/86400;
 st=(Laufzeit[aktuell]-tg*86400)/3600;
 mi=(Laufzeit[aktuell]-tg*86400-st*3600)/60;
 se=Laufzeit[aktuell]-tg*86400-st*3600-mi*60;
}
void Ausgabe(int scroll, int i){
}
//---------------------------------------------------------------------------------------------
void BasisAnzeige(){
}
//---------------------------------------------------------------------------------------------
void TasterAbfrage(int taster, boolean tasterstatus, int i){

}
//---------------------------------------------------------------------------------------------
void Keller(){ // Tanksteuerung Keller
  // Füllpumpe auf ein, wenn Minimalstand erreicht ist, Füllpumpe aus, wenn Maximalstand erreicht ist
  // beides aber nur tagsüber, daher Abfrage der Uhrzeit
 if (UhrDaten[2] >Einschaltzeiten[0] && UhrDaten[2] < Einschaltzeiten[1]){
  flag=1;
  if (sensor[0].read() > Min[0]) flag=0;
  if (sensor[0].read() < Max[0]) flag=2;
  if (flag == 0) digitalWrite(Relais00, HIGH); //Relais für Füllpumpe ein
  if (flag == 2) digitalWrite(Relais00, LOW); //Relais für Füllpumpe aus
 }
 else digitalWrite(Relais00, LOW);
}
//---------------------------------------------------------------------------------------------
void DachBoden(){ // Tanksteuerung Dachboden
 // Füllpumpe auf ein, wenn Minimalstand erreicht ist, Füllpumpe aus, wenn Maximalstand erreicht ist
 flag = 1;
 obenstatus = digitalRead(Schwimmeroben);
 untenstatus = digitalRead(Schwimmerunten);
 if (untenstatus == HIGH) flag=0;
 if (obenstatus == HIGH) flag=2;
 if (flag == 0) digitalWrite(Relais01, HIGH); //Relais für Füllpumpe ein
 if (flag == 2) digitalWrite(Relais01, LOW); //Relais für Füllpumpe aus
}
//---------------------------------------------------------------------------------------------
void RelaisTest(){
 digitalWrite(Relais00, LOW);digitalWrite(Relais01, LOW);
 j = 0;
  do {
   tasterstatus3 = digitalRead(TasterDrei);
   tasterstatus2 = digitalRead(TasterZwei);
   RTC.get(UhrDaten,true);
   if (tasterstatus3 == HIGH) {
    delay(500);
    Stunde[1] = UhrDaten[2]; Minute[1] = UhrDaten[1];
    if (j > 2) j = 0;
    lcdan = 1; LCDein();
    lcd.clear(); lcd.setCursor(1,0);lcd.print("Test aller Relais"); lcd.setCursor(1,1); lcd.print("Weiter mit Taster 4");
    lcd.setCursor(0,2); lcd.print("Beenden mit Taster 2");
    j++;
    switch(j){
     case 1: digitalWrite(Relais00, LOW);digitalWrite(Relais01, LOW);
      lcd.setCursor(0,3); lcd.print("R aus, Ende in "); break;
     case 2: digitalWrite(Relais00, HIGH);digitalWrite(Relais01, LOW);
      lcd.setCursor(0,3); lcd.print("R1 an, Ende in "); break;
     case 3: digitalWrite(Relais00, LOW);digitalWrite(Relais01, HIGH);
      lcd.setCursor(0,3); lcd.print("R2 an, Ende in "); break;
    }
   }
   i = (UhrDaten[2] * 60 + UhrDaten[1]) - (Stunde[1] * 60 + Minute[1]);
   lcd.setCursor(14,3);
   sprintf (puffer, "%2d", 10 - i);  // %02d sind Platzhalter: int mit zwei Ziffern und führender Null oder %2d mit Leerzeichen
   lcd.print(puffer); lcd.print(" min");
  } while (tasterstatus2 == LOW && (UhrDaten[2] * 60 + UhrDaten[1]) - (Stunde[1] * 60 + Minute[1]) < 10); // nach spätestens 10 min ohne Tastendruck Rücksprung
 lcd.clear();
 digitalWrite(Relais00, LOW);digitalWrite(Relais01, LOW);
}
//---------------------------------------------------------------------------------------------
void loop(void)
{
 //if (UhrDaten[0] < 1)
 SRF02::update(); // einmal je Minute reicht
 TasterAbfrage(TasterEins,tasterstatus1,1);  
 TasterAbfrage(TasterZwei,tasterstatus2,2);  
 tasterstatus0 = digitalRead(TasterNull);
 if (tasterstatus0 == HIGH) UhrStellen();  
 tasterstatus3 = digitalRead(TasterDrei);// manuelles Testen der Relais
 if (tasterstatus3 == HIGH) RelaisTest();
 LCDein();
 BasisAnzeige();
 Keller();
 DachBoden();
}
280  International / Deutsch / Re: Problem SRF02 mit DS1307 on: October 24, 2011, 01:39:38 pm
Hallo Uwe,
Sensoren SRF02 und DS1307 sind parallel an A4 und A5 sowie +5V und GND angeschlossen.

Auszüge aus dem Programm, nur ganz kurz das wesentliche, das Programm selbst ist sonst zu lang.

Code:
#include <Wire.h>
#include "SRF02.h"
#include <Wprogram.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#define LCDBeleuchtung 12
SRF02 sensor[2] = {SRF02(0x70, SRF02_CENTIMETERS), SRF02(0x72, SRF02_CENTIMETERS)};

//---------------------------------------------------------------------------------------------
void setup(void){
 pinMode(LCDBeleuchtung, OUTPUT);
 lcd.begin(LCD_WIDTH, LCD_HEIGHT,1);
 Serial.begin(9600);
 Wire.begin();
 SRF02::setInterval(2000);
 RTC.get(ProgrammStart,true);
 }

void loop(void)
{
 SRF02::update();
 RTC.get(UhrDaten,true);
 if (sensor[0].read() > Max[0]) { ... };

}

281  International / Deutsch / Problem SRF02 mit DS1307 on: October 24, 2011, 12:23:33 pm
Hallo,
ich habe folgendes Problem, habe ein Uhrmodul DS1307 und zwei Sensoren SRF02 am Board angeschlossen.
Die Sensoren habe ich so eingestellt, das sie über "SRF02::setInterval(2000)" nur alle zwei Sekunden abgefragt
werden. Jetzt läuft die Uhr aber im gleichen Takt, das heißt viel zu langsam. Wie kann das kommen?
Noch eine andere Frage, kann man die Sensoren eigentlich zum Wasserstand messen benutzen oder sind
die nicht für feuchte Umgebung geeignet?
Gruß
Bernward
282  International / Deutsch / Re: Pullup 4.7 kohm on: October 19, 2011, 01:29:38 am
http://www.ebay.de/itm/2-2kOhm-4-7kOhm-Widerstand-0-25W-50-Stuck-/170700411360?pt=Bauteile&var=&hash=item6d70a39143#ht_994wt_952

283  International / Deutsch / Re: Frage zu 2-Kanal Relais-Karte on: September 30, 2011, 04:45:43 am
War keine Anleitung bei, aber der Jumper versorgt das Relais mit Spannung.
@ Joghurt genau das ist der Punkt, ich will nicht die beiden PINS zum ansteuern ständig unter Strom haben
wenn die Relais aus ist. Da hift doch auch keine Softwareänderung.
284  International / Deutsch / Re: Frage zu 2-Kanal Relais-Karte on: September 30, 2011, 03:18:35 am
Vermutlich hab ich mich falsch ausgedrückt, mir ist schon klar, das ein Relais einen Umschaltkontakt hat.
Es geht mir um die Eingänge, die vom Arduino kommen. Die müssen "LOW" sein um das Relais zu schalten und
die LED auf der Platine zu schalten.
Das ist es halt, ich habe also die Arduino Ausgänge immer auf HIGH, wenn ich nichts schalten will und auf LOW wenn
ich das Relais schalten will. Und das kenne ich eigentlich nur genau umgekehrt:
LOW Platine (LED) aus, HIGH Platine (LED) an.
 
285  International / Deutsch / Frage zu 2-Kanal Relais-Karte on: September 30, 2011, 12:27:39 am
Hallo,
ich habe mir folgende Relais-Karte gekauft:
http://www.ebay.de/itm/260855345155#ht_1454wt_1185
Jetzt habe ich festgestellt, das die Karte bei "LOW" schaltet. Das bedeutet ja, das der PIN im Ruhezustand
immer auf HIGH stehen muß. Ist das so? Passt mir nicht, das ich zwei PINS 99% der Zeit (wenn die Relais aus sind)
auf HIGH stehen habe.
Gruß
Bernward
Pages: 1 ... 17 18 [19] 20 21 ... 24