Show Posts
Pages: 1 ... 4 5 [6] 7
76  Forum 2005-2010 (read only) / Deutsch / Re: Verständnissfrage externalInterrupt on: November 22, 2010, 02:08:14 pm
So ich habe eben noch ein wenig gelesen....


kann ich mir eine funktion schreiben, wie zum Beispiel "void ausloesen(){}"  und bei Interruptaufruf direkt in die Funktion springen?

geht das so einfach? und wird die funktion dann auch mehrmals ausgeführt wenn ich da ne if drinne habe oder eine while merker==1 oder so????

Danke sagt derRobert


EDIT

Also bedingt klappt der Ansatz aber irgendwie habe ich das Gefühl das die Funktion auch nur einmal ausgeführt wird....
Oder habe ich hier einen anderen Fehler gemacht????
Code:
attachInterrupt(0,timerInterrupt, RISING);//Interrupt auf digitalpin2 mit funktionsname "timerInterrupt" auf steigende flanke(rising)
}

void timerInterrupt() {           //Funktion zum interrupt
startmillis=millis();
merker=1;
Serial.println("interrupt");
ausloesen();
}
void ausloesen(){
 Serial.println("void ausloesen1");
 while(merker==1){
 if(millis()-startmillis>=verzoegerungMillis){
 digitalWrite(ausgang,HIGH);
   millimerker=aktuellemillis;
 merker=0;
 Serial.println("void ausloesen2");
 }
}
}


Danke und Gruß derRobert
77  Forum 2005-2010 (read only) / Deutsch / Re: Verständnissfrage externalInterrupt on: November 22, 2010, 01:56:16 pm
Hmmm danke erstmal,

gibt es eine Variante das alles im Interrupt zu tun? also schauen ob zeit vergangen und dann ausgang High setzen?

das ausschalten kann meinetwegen in der Loop passieren.
(Das ich das noch einfügen muss ist mir klar aber ich mache alles schritt für schritt und bin ebend bei dem hängen geblieben ;-) )


ich weis jetzt noch nicht was alles noch in meine loop kommt und außerdem sind da ein paar delay()s drinn und ich möchte nicht das die noch zusätzlich zur wartezeit hinzukommen.

oder gibt es eine möglichkeit aus dem interrupt direkt zum entsprechendem befehl zu springen?

Trotzdem danke nochmal für den hinweis das Interrupt nur einmal durchläuft. Das erklärt natürlich das verhalten
78  Forum 2005-2010 (read only) / Deutsch / Verständnissfrage externalInterrupt on: November 22, 2010, 11:49:26 am
Hallo @ all,
Mittlerweile bin ich mit meinem Projekt schon ein ganzes stück vorangeschritten (Zeitverzögerte Auslösung nach Triggerung durch Sensor)

Ich habe jetzt meine Menüstruktur erstellt und kann meine Werte eingeben. Die Verzögerung wird in eine long Variable als Millis geschrieben.

Jetzt möchte ich mit
Code:
attacheInterrupt(0,timer,RISING);
auf einen HIGH Pegel an pin 2 warten und dann nach ablauf der voreingestellten Millis einen Ausgang auf HIGH setzen.

Irgendwie scheitert es aber daran den Ausgang HIGH zu setzen. Momentan wird der Sensor mittels Taster Simuliert. Der Ausgang wird erst nach einem 2. mal Drücken auf HIGH gesetzt.

Hier mal der Interrupt
Code:
void timer() {           //Funktion zum interrupt
Serial.println(merker);
if(merker==0){startmillis=millis(); merker=1;Serial.print("if-schleife1");}
Serial.println(startmillis);
aktuellemillis=millis();
if(aktuellemillis-startmillis>=verzoegerungMillis){
digitalWrite(ausgang,HIGH);;
millimerker=aktuellemillis;
merker=0;
Serial.println("if-schleife2");

}
}

Durch die Serial.print´s kann ich sehen das ich in die 2. if schleife komme (beim ersten Tastendruck) aber digitalWrite(ausgang,HIGH); wird erst beim 2. druck ausgeführt.


Kann man nun einfach so einen digitalWrite(ausgang,HIGH); im Interrupt ausführen oder kann ich mir nur einen Merker setzen und dann im loop den merker abfragen?   Aber das würde ja am sinn vorbei gehen....

Oder habe ich das mit dem Interrupt total falsch interpretiert?

über Antworten währe ich sehr froh.

Danke der Robert
79  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: November 04, 2010, 11:11:31 am
Also der Hinweis auf dtostrf war gold wert. auch wenn ich es so nicht verstanden habe konnte ich mit googles hilfe eine variante mit dtostrf finden die mir einleuchtet und dazu auch noch funktioniert.

für alle die auch noch so ein Problem haben hänge ich den sketch mal an

(gibt es irgend wo schon eine art nachschlagewerk für solche codebeispiele für häufig wiederkehrende problemstellungen??? ich bin ja nicht der erste der eine float zu asci wollte und damit schwierigkeiten hatte )

Also Danke für die hilfe Gruß der Robert


Code:
void loop(){
  float variable1 =analogRead(1);                          //Poti einlesen
  float variable2 = map(variable1, 0, 1023, 0, 1000.00);   //Wertebereich zuweisen
  float variable3 = variable2 / 100;                       //Komma 2 Stellen vor schieben
  char anzeige[5];                                         //Characterarray 4 Zeichen + Null
  dtostrf(variable3,4,2,anzeige);                          //Variable3 in Char wandeln mit 4 Zeichen und davon 2 Nachkommastellen in anzeige speichern
  lcd.printIn(anzeige);                                    //Ausgabe am LCD
  delay(100);                                              
  lcd.clear();
}
80  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: November 03, 2010, 01:15:53 pm
So nun muss ich doch nochmal hier nach einer C sache fragen.

Aber ganz so arduino-fern ist es, denke ich mal, nicht.

Und zwar möchte ich jetzt eine Float auf dem Display ausgeben.

Code:
void loop(){
  variable1 = analogRead(1);                            //ist noch ne int
  variable= map(variable1, 0, 1023, 0, 1000.00);      // ist schon ne float
  float anzeige = variable / 100;                        // macht mir zum Beispiel aus 999 -> 9,99  
  Serial.print(anzeige);                              // Zeigt an was ich sehen möchte
  char msg[11];                                           // Ab hier fängts an  :'(
itoa(anzeige, msg, 10.00);                               // Das ich nicht das sehe was ich will :(
lcd.printIn(msg);
delay(100);
lcd.clear();
}

Jetzt hab ich schon Bekannte gefragt und mich dusselig Gegoogelt. dabei habe ich eine andere LCD Library gefunden die auch eine Funktion hatte Floats auszugeben. LCDPrintFloat() hies die glaub ich.

Aber in <LCD4Bit_mod.h> find ich sowas nicht (bzw hab ich es einfach auf verschiedene Art und weisen versucht smiley-wink )

Alle anderen Wege eine Float erst zu zerlegen und dann zu printen habe ich nur in Englisch gefunden und soooo gut ist mein Englisch nicht das ich die Fachbegriffe da so verstehe das ich auch was Lerne und oder verstehe.


wenn evtl jemand eine Funktion zum Float printen in <LCD4Bit_mod.h> kennt oder eine gute Deutsche Erklärung zum Thema hat währe ich froh wenn er das hier kund tuen würde.


Gruß der Robert


81  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: November 01, 2010, 05:40:17 am
Ersteinmal vielen dank für die Erklärung. Für mich als Anfänger ist es eben noch schwehr zu unterscheiden was nun arduino speziefiche Programmierung ist und was genau zu c gehört. so wie ich es verstanden habe ist die Arduino eine vereinfachte Abwandlung von C

Oder liege ich da falsch und alle in C verfügbaren befehle sind für Arduino verständlich.

Selbstverständlich werde ich mir eine Lernquelle für C beschaffen um euch nicht ständig mit Grundlagen belästigen zu müssen smiley-wink

Gibt es hier Favorisierte Bücher die einen guten Einstieg bieten?

Eine Art Befehlsreferenz mit kurzer Erklärung zum Befehl und Anwendung währe mir das Liebste.
Ich habe die Erfahrung gemacht das mir Bücher mit Tausenden Beispielprogrammen zum Durcharbeiten nicht sehr viel bringen....


Gruß und danke derRobert
82  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 02:33:20 pm
Also erstmal vielen Dank.
Code:
char msg[8];
itoa(variable, msg, 10);
lcd.printIn(msg);


bringt mir das was ich wollte.
Leider weis ich jetzt nicht was char msg[8] und itoa nun mit meiner variablen machen....

evtl könntest du dazu noch ein paar erklärende Worte hinterlassen.

Danke sagt der Robert
83  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 11:40:40 am
Öhm Sorry aber ne Antwort auf meine Frage währe mir lieber als einen über einen Monat alten Beitrag zu zerpflücken....

Bitte helft mir doch den Kram zu verstehen

Danke sagt derRobert
84  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 07:53:43 am
OK hier mal mein Beispielcode an dem ich versuche eine idee für ein menü zu bekommen....

das verändern der Variable funktioniert erstmal aber ich sehe den wert nicht auf dem display smiley-sad

Code:
int tasterwert      = 0;
int tasterwert_temp = 0;
boolean rechts = false;
boolean links  = false;
boolean auf    = false;
boolean ab     = false;
boolean select = false;
boolean nichts = false;
boolean m0 = false;
boolean m1 = false;
boolean m2 = false;
boolean m3 = false;
boolean m4 = false;
boolean m5 = false;
int variable =5;
int ledState = LOW;
unsigned long previousMillis = 0;
unsigned long previousMillis2 = 0;

int led = 3;

#include <LCD4Bit_mod.h>
#include <stdio.h>
LCD4Bit_mod lcd = LCD4Bit_mod(2);

void setup () {

Serial.begin (9600);
pinMode (led,OUTPUT);
lcd.init();
lcd.clear();
lcd.printIn("   Menue Test");lcd.cursorTo(2,0);lcd.printIn("   #########");delay(3000);lcd.clear();
}


void loop () {
 tasterwert = analogRead(0);
 if(tasterwert != tasterwert_temp){    switch (tasterwert) //Auswertung Tasterzustände
                                  {      case 0  : rechts = true;nichts = false; tasterwert_temp = tasterwert;break;
                                         case 480  : links  = true;nichts = false; tasterwert_temp = tasterwert;break; variable = variable + 1;
                                         case 130  : auf    = true;nichts = false; tasterwert_temp = tasterwert;variable = variable + 1;break;
                                         case 307  : ab     = true;nichts = false; tasterwert_temp = tasterwert;variable = variable - 1;break;
                                         case 721  : select = true;nichts = false; tasterwert_temp = tasterwert;break;
                                         case 1023 : nichts = true;rechts = false;links=false;auf=false;ab=false;select=false; tasterwert_temp = tasterwert;break;}}


 unsigned long currentMillis = millis();
 int intervall = variable * 100;
  if(currentMillis - previousMillis >= intervall) {
    previousMillis = currentMillis;  
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(led, ledState);
  }

unsigned long currentMillis2 = millis();
if(currentMillis2 - previousMillis2 > 1000) {
  previousMillis2 = currentMillis2;
lcd.clear();
lcd.print(variable);lcd.cursorTo(2,0);lcd.print(tasterwert);
Serial.print(variable);
Serial.print(tasterwert);
}




}
85  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 06:28:37 am
OK mittlerweile habe ich gemerkt das lcd.print(variable); doch etwas ausgiebt aber das sind dann nur komische Zeichen.

86  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 05:37:08 am
ich habe eine

int variable = 5;

die ich mit

lcd.printIn(variable);

Ausgeben möchte

die reaktion beim compilieren ist

sketch_oct31b.cpp: In function 'void loop()':
sketch_oct31b:60: error: invalid conversion from 'int' to 'char*'
sketch_oct31b:60: error: initializing argument 1 of 'void LCD4Bit_mod::printIn(char*)'




ok der Datentyp ist der falsche aber wie mache ich das nun richtig?

Danke derRobert


EDIT:

habe jetzt folgendes versucht


lcd.print(variable);
Serial.print(variable);
 Seriell klappts prima aber auf dem Display erscheint nix.
aber die Fehlermeldungen sind auch weg.  was mache ich falsch????
87  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: October 31, 2010, 05:13:48 am
So und nun wirds auch mal wieder Zeit etwas zu lernen smiley-wink

Ich habe nun etwas mit millis() gespielt und auch mein gesetztes Ziel erreicht. Nun möchte ich variablenwerte am LCD Keypad Shield verändern.

also eine variable anzeigen lassen und bei tastendruck soll diese verändert werden.

nun scheiterts aber schon beim anzeigen smiley

Ich bekomme den wert der Variablen einfach nicht auf das Display.

Wie kann ich eine Integer Variable am Display anzeigen lassen?

muss ich die erst noch umwandeln? wenn ja wie?

Gruß der Robert
88  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: September 16, 2010, 11:54:15 am
Ich Fotografiere ausschließlich Privat. ( da sind mir fertige Produkte zu Teuer)
Ich Fotografiere weil es mir Spaß macht und Ich Bastel und (versuche zu) Programmiere(n) weil es mir Spaß macht.

UND DESHALB WILL ICH DAS KOMBINIEREN.... smiley-wink

und einfach nachbauen fetzt nich.
ich brauche das ja nicht heute und morgen   daher kann das wachsen und gedeien

Außerdem lerne ich da was
89  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: September 16, 2010, 11:41:35 am
das ist ja alles gut und schön aber nicht das was ich  bezwecken möchte...

Ich möchte für meine DSLR Sony Alpha einen Universellen Auslöser der irgendwann mal mit fotozelle oder schwingkreis einen (gewitter)blitz als auslösesignal nutzt oder eine lichtschranke etc. Des weiteren soll ein Timerauslöser usw. dazu dienen Automatisiert Fotos in einstellbaren intervallen zu schießen. Und bei Langzeitbelichtungen soll Belichtung und Blitz Separat angesteuert werden.   Ob und wie das alles in einem Gerät untergebracht wird ist noch unklar. Erstmal gild es programmieren lernen und dann das projekt spezifizieren...

Daher kann und will i jetzt zu den Rahmenbedingungen nix weiter Äußern und möchte mich hier auf Arduino spezifische Dinge beschränken. Schließlich sind wir hier im Arduinoforum und wollen die threats doch halwegs übersichtlich halten. ODER?  smiley-wink

Gruß derRobert
90  Forum 2005-2010 (read only) / Deutsch / Re: Einsteigerfragen on: September 16, 2010, 09:14:11 am
Nein ist kein Tippfehler aber ich würde Sagen "back to Topic".

Nicht das es hier noch Ärger gibt smiley

Die Kamera sollte kein Ausschlag geben ( Fernauslösemöglichkeit vorausgesetzt)  


Gruß der Robert

Pages: 1 ... 4 5 [6] 7