INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Programmier-Anfänger
09.12.2015, 22:42
Beitrag #9
RE: Programmier-Anfänger
Wenn das deutsch wäre, dann sicherlich...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.12.2015, 08:27
Beitrag #10
RE: Programmier-Anfänger
(09.12.2015 21:49)Chef_2 schrieb:  Wie muss ich "map" und "case" verstehen ?

Mit MAP skalierst du die deinen analogen Eingang auf eine Variable.

Mit "Case" löst du die entsprechenden "Zustand" aus.
Schaue dir DAS hier mal an. Das entspricht schon fast dem was du suchst. Nur das du das Serial.print gegen deine DigitalOUTs tauschen musst.

Die CASE-Anweisungen machen den ganzen Code deutlich übersichtlicher und weniger fehleranfällig.

Hope it helps..... Ralf aka RMR
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.12.2015, 22:18 (Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2015 23:30 von Chef_2.)
Beitrag #11
RE: Programmier-Anfänger
So Hall und guten Abend...

Sorry, dass ich erst jetzt wieder schreibe... aber für diese Art von Beschäftigung bedarf es einen ruhigen Moment... ich habe nun mal deine Vorlage genommen und ungeschrieben, so wie ich es für mich denke... kannst es dir ja mal ansehen.... obs funktioniert habe ich in der Praxis noch nicht getestet... sitze an meinem Zweit-PC, an dem das Arduino Board nicht angeschlossen ist...

Wo aber gebe ich nun meine Werte ein ?

z.B. bei Case 1: Da sollen die LED´s ja nur angehen, wenn ich zwischen 900 und 1000 liege... offe du weißt, was ich meine... geht ja von 0 - 1023.

Zitat:// Spannungsüberwachung on Arduino/Freeduino

int LED0 = 8; //LED 0
int LED1 = 9; //LED 1
int LED2 = 10; //LED 2
int LED3 = 11; //LED 3
int LED4 = 12; //LED 4


int ADCO1=0; //Analoge Spannungsabfrage
int ADC_value;
float volt;
float AAA = 1000; //Schaltspannung ca. 4,88V
float BBB = 900; //Schaltspannung ca. 4,40V
float CCC = 800; //Schaltspannung ca. 3,90V
float DDD = 700; //Schaltspannung ca. 3,42V
float EEE = 600; //Schaltspannung ca. 2,93V
float FFF = 500; //Schaltspannung ca. 2,44V
float GGG = 400; //Schaltspannung ca. 1,96V
float HHH = 300; //Schaltspannung ca. 1,47V
float III = 200; //Schaltspannung ca. 0,98V
float JJJ = 100; //Schaltspannung ca. 0,88V


void setup()
{ // Port as output
Serial.begin(9600);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}

void loop() {
// Lese Poti aus:
int ADCO1 = analogRead(ADC_value);

// do something different depending on the
// range value:
switch (ADC_value)

{
case 0: //LED1 und LED2 leuchtet dauer bei 14V
digitalWrite(LED0, HIGH);
digitalWrite(LED1, HIGH);
break;

case 1: //LED1 leuchtet dauer bei 13,5V
digitalWrite(LED0, HIGH);
break;

case 2: // LED2 leuchtet dauer bei 13V
digitalWrite(LED1, HIGH);
break;

case 3: //LED3 leuchtet dauer bei 12,5V
digitalWrite(LED2, HIGH);
break;

case 4: //LED4 leuchtet dauer bei 12V
digitalWrite(LED3, HIGH);
break;

case 5: //LED4 blinkt in 1 sek. Takt bei 11,5V
digitalWrite(LED3, HIGH);
delay(1000);
digitalWrite(LED3, LOW);
delay(1000);
break;

case 6: //LED4 blinkt im 0,5 sek. Takt bei 11V
digitalWrite(LED3, HIGH);
delay(500);
digitalWrite(LED3, LOW);
delay(500);
break;

case 7: //LED3 und LED4 blinken abwechselnd im 0,5sek. Takt bei 10,5V
digitalWrite(LED3, HIGH);
delay(500);
digitalWrite(LED3, LOW);
delay(500);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
delay(500);
break;
}
delay(1); // Pause bis zu erneutem Zyklus
}

Irgendwie würde ich nun so denken:

Case 0 ADC_value(900 bis 1023) Sad

Bin zwar Ausländer, was die Programmiersprache angeht... aber vielleicht kann mir das ja mal jemand übersetzen, damit mein Chip das versteht:

case 0: //LED1 und LED2 leuchtet dauer bei 14V
if (ADC_value > 1000)
digitalWrite(LED0, HIGH);
digitalWrite(LED1, HIGH);
break;

case 1: //LED1 leuchtet dauer bei 13,5V
if (ADC_value > 900) && (ADC_value < 999)
digitalWrite(LED0, HIGH);
break;

case 2: // LED2 leuchtet dauer bei 13V
if (ADC_value > 800) && (ADC_value < 899)
digitalWrite(LED1, HIGH);
break;
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2015, 19:55
Beitrag #12
RE: Programmier-Anfänger
Hallöle!
Also entweder per Case oder mit IF.
, sonst wirds nix.

Wenn aber mit Case, dann geht's nur über map()
Aus dem ADC Wert (0-1023) muss für Case ein Wert von z.B. 1-7 gemacht werden.
Einziges "Problem" dabei:
Die "Stufen" (1-7) sind genausogroß.


Ruhm....
Ganz oben im Sketch sind die Konstanten AAA bis JJJ gelistet.
Das sind 10 Stufen, aber die werden im Loop nirgends verwendet.

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2015, 00:08 (Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2015 00:09 von Chef_2.)
Beitrag #13
RE: Programmier-Anfänger
Guten Abend Binatone,

ja 1 - 7 ist eine etwas sehr große Auflösung...

Ja das mit AAA - JJJ ist auch eher eine kleine Tabelle für mich, wie die Spannungen abgestuft sind...

Wenn wir nun wieder zu "if" zurück kehren, das ja im Grunde funktioniert....

Zitat: if (ADC_value > 800)
{digitalWrite(LED0, HIGH);}
if (ADC_value < 800)
{digitalWrite(LED0, LOW);}
if (ADC_value > 1023)
{digitalWrite(LED0, LOW);}


if (ADC_value > 100)
{digitalWrite(LED0, HIGH);}
if (ADC_value < 100)
{digitalWrite(LED0, LOW);}
if (ADC_value > 199)
{digitalWrite(LED0, LOW);}

Nur sobald man eine mehrfach-Verwendung für einen Ausgang möchte, wirds komisch... oder gibts da auch wieder eine extra lösung ?

LED soll hier leuchten bei: > 800 und > 100... soll aber jedesmal gedeckelt werden.... wie sieht hier eine Lösung aus ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2015, 11:23
Beitrag #14
RE: Programmier-Anfänger
hmmm... jetzt hab ich wieder das Problem, das sich beim Tippen von Code ständig die Syntax von Siemens SCL durchsetzt, das will der Arduino natürlich nicht, dann guckt der dumm Smile

Ich versuch es mal in Worte zu fassen:
Was Du dazu brauchst ist Kenntnis über

1. For-Schleife nebst Schleifenvariable
2. Arrays (INT und bool)
3. Auslesen des Analog-Input
4. Setzen des Digital Output
5. Handhabung IF

Am Anfang zwei Arrays (int) bilden mit den Schaltschwellenwerten.
Unterer Wert und oberer Wert.
Pro LED brauchst Du einen Wert zum Einschalten und einen zum Ausschalten.
Der Untere enthält die Schaltschwelle zum Einschalten der LED
Der Obere enthält den Wert, ab wann die LED ausschalten soll.

Ein weiteres Array (bool) festlegen für die Schaltzustände der LEDs
Dann den ADC Wert erfassen

Dann in einer FOR Schleife den ADC Wert mit den Array Werten vergleichen.
per IF entscheiden, ob die LED leuchten soll, oder nicht.
Das wird in der for Schleife in das LED Array geschrieben.

Am Ende des Programms für jede LED ein Übertragen vom Array-Wert auf den jeweiligen Port.
Auf diese Weise wird an nur einer Stelle im Programm der Zustand am Port verändert.
Somit kommt es schonmal nicht zu unschönem Flackern.

Frage: kommst Du mit Array und For zurecht ?
Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2015, 15:40
Beitrag #15
RE: Programmier-Anfänger
(09.12.2015 22:42)Chef_2 schrieb:  Wenn das deutsch wäre, dann sicherlich...
Hallo, warum legst du dir nicht ein Buch zu, in dem du diese Fragen (auch in deutsch) alle beantwortet bekommst.
Ich empfehle dir das Buch "Arduino Kochbuch", das enthält auch sehr viele Beispiele, die man durcharbeiten kann. Bisher sind es nur Grundlagen, die von dir angefragt wurden und das wird in dem Buch wunderbar beschrieben.

Bitte sehe das nur als gut gemeinte Empfehlung, aber es wird dir helfen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2015, 17:12
Beitrag #16
RE: Programmier-Anfänger
Hallo, ja nur her mit guten Ratschlägen... angefangen habe ich mit dem Franzis Lernpacket... aber das beschreibt es einem Anfänger dann doch nicht so, wie man es sich wünscht....

Ich sollte ein Buch haben, wo viele beispiele zu:

UND ODER schaltungen vorhanden ist... im Franzis lernpacket ist viel mit Display und serial ausgabe... das brauche ich aber alles nicht für mein angestrebtes Projekt...

Ich werd mir das Buch mal anschauen und besorgen....

danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Anfänger Fragen zum Thema Pc & Datenverarbeitung Hurdy 0 298 29.03.2016 12:36
Letzter Beitrag: Hurdy
  Hilfe bei Programmierung ANFÄNGER Icemann_2 14 2.010 23.10.2015 15:51
Letzter Beitrag: Binatone
  Anfänger und Stepper Cubiator 3 1.353 20.09.2015 17:52
Letzter Beitrag: Cubiator
  Anfänger: Code für "Mini-Alarmanlage" drugX 13 2.224 11.08.2015 16:00
Letzter Beitrag: torsten_156
  Programmier Probleme ElektroChris 8 1.293 30.07.2015 12:18
Letzter Beitrag: hotsystems
  Anfänger braucht Hilfe: Avr libs sind nach Update nicht mehr ansprechbar Legofriend 1 625 15.03.2015 23:32
Letzter Beitrag: Foto-Ralf
  Ist das Projet für einen Anfänger leicht machbar? Juschi 7 1.320 07.02.2015 17:05
Letzter Beitrag: Bodo-baller
  passt das so? anfänger sucht rat Gerüst 2 944 17.11.2014 20:48
Letzter Beitrag: rkuehle
  Anfänger braucht hilfe charlie883 1 708 16.11.2014 23:09
Letzter Beitrag: nettworker
  Anfänger hat Probleme mit Fehler im Sketch mchammer 2 935 12.11.2014 22:00
Letzter Beitrag: mchammer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste