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, 18:36
Beitrag #1
Sad Programmier-Anfänger
Hallo Forengemeinde,

vorab: Ich hab keine Ahnung vom programmieren... bin aber stets bemüht, es gerade mit "Franzis AVR-Mikrocontroller Lernpacket" zu erlernen... so ein Buch ist schön und gut... jedoch erklärt es aber nicht alles so, dass ich es verstehe Sad

Habe nun nicht mal eine bestimmte Frage... es sind ehrlich gesagt viel zu viele...
Von meinem Ursprünglichen Projekt einer Batterieladeregelung für eine Photovoltaike-Insel-Anlage bin ich schon lange wieder weg gekommen...

Versuche mich aktuell an einer LED-Kette (5LED´s) mir anzeigen zu lassen, in welcher Stellung sich ein Poti befindet (Eingangsspannung X = bestimmtes LED leuchtet).

Programm:

// 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

// Setup routine for digital port configuration

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

// Main programm

void loop()
{ ADC_value=analogRead(ADCO1);
Serial.print("ADC01 = ");
Serial.println(ADC_value);
volt=(ADC_value);
{
if (ADC_value > 800)
{digitalWrite(LED0, HIGH);}
if (ADC_value < 800)
{digitalWrite(LED0, LOW);}
if (ADC_value > 1023)
{digitalWrite(LED0, LOW);}


if (ADC_value > 600)
{digitalWrite(LED1, HIGH);}
if (ADC_value < 600)
{digitalWrite(LED1, LOW);}
if (ADC_value > 799)
{digitalWrite(LED1, LOW);}

if (ADC_value > 400)
{digitalWrite(LED2, HIGH);}
if (ADC_value < 400)
{digitalWrite(LED2, LOW);}
if (ADC_value > 599)
{digitalWrite(LED2, LOW);}

if (ADC_value > 200)
{digitalWrite(LED3, HIGH);}
if (ADC_value < 200)
{digitalWrite(LED3, LOW);}
if (ADC_value > 399)
{digitalWrite(LED3, LOW);}

if (ADC_value > 1)
{digitalWrite(LED4, HIGH);}
if (ADC_value < 0)
{digitalWrite(LED4, LOW);}
if (ADC_value > 199)
{digitalWrite(LED4, LOW);}
}
delay(500);
}

Ja das Programm funktioniert.... aber wehe, es soll auch mal etwas blinken, bzw. 2 LED´s gleichzeitig leuchten... dann ist der Ofen schon aus...

Aber bevor ich hier anfange euch zu nerven: Erst mal eine nettes Hallo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 19:17
Beitrag #2
RE: Programmier-Anfänger
Hallo Smile

Also, Die Analog Erfassung läuft schonmal.
Bei mir wird, wie erwartet, alle 500 ms ein Wert ausgespuckt.
Wenn Du nen Poti dran hast, müsste der Wert veränderbar sein.

Wenn das der Fall ist, sollte es eigentlich auch funktionieren.
Auf den ersten Blick werden dann je nach Höhe der Spannung entsprechend die Ausgangsports High oder Low geschaltet.
Maximal 3 LED werden gleichzeitig leuchten, so wie ich das sehe im Programm.

Blinken aber ist laut Programm nicht vorgesehen.
Es wird nur alle 500 ms der Wert eingelesen, ausgegeben über die Serielle Schnittstelle und über if Abfragen die Ausgänge (LED`s) geschaltet.


Gruß Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 20:33
Beitrag #3
RE: Programmier-Anfänger
Hallo Smile

also das Programm funktioniert... es leuchtet immer nur 1 LED... Hintergrund: Anzeige über den Ladestatus einer Batterie.

Nun aber das PROBLEM:

Funktionsbeschreibung:

Akku 100%: LED1 + LED 2 soll leuchten

Akku 90%: LED1 soll leuchten

Akku 70% LED2 soll leuchter, LED1 geht aus

Akku 50% LED3 soll leuchten, LED2 geht aus

belassen wir es mal dabei... die %-Angaben für den Akku ist nur zum verständnis...

Meine Idee ist nun:

void loop()
{ ADC_value=analogRead(ADCO1);
Serial.print("ADC01 = ");
Serial.println(ADC_value);
volt=(ADC_value);
{
if (ADC_value > 1000)
{digitalWrite(LED1, HIGH);} //LED2 leuchtet, wenn über 1000
if (ADC_value < 1000)
{digitalWrite(LED1, LOW);}

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


if (ADC_value > 600)
{digitalWrite(LED1, HIGH);}
if (ADC_value < 600)
{digitalWrite(LED1, LOW);}
if (ADC_value > 799)
{digitalWrite(LED1, LOW);}

if (ADC_value > 400)
{digitalWrite(LED2, HIGH);}
if (ADC_value < 400)
{digitalWrite(LED2, LOW);}
if (ADC_value > 599)
{digitalWrite(LED2, LOW);}

die wir du dir schon denken kannst... nicht funktioniert...

ich brauch vom Programmablauf eher sowas:

---> abfrage ADC_value (Wert)

springe in "unterprogramm" (while) bis ADC_value (Wert) sich ändert, danach suche nach nächsten passenden "unterprogramm"

wie kann ich das realisieren ? (bin echt leihe und bin wirklich bemüht, so ein paar grunddinge mal zusammenzutragen und das so zu lernen....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 20:39
Beitrag #4
RE: Programmier-Anfänger
Aber WAS funktioniert nicht?
Kriegst Du denn brauchbare Werte per Serial.println()?
In welchem Bereich liegen die?

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 20:55
Beitrag #5
RE: Programmier-Anfänger
Ja, die Werte gehen von 0 - 1023... habe die abfrage nur drin, damit ich überprüfen kann, ob das alles passt...

ich denke, dass das Problem daran liegt, dass ich oben sage: LED2 leuchtet bei über 1000

gleichzeitig sag ich aber in weiter unten: LED2 geht aus bei > 599... das beißt sich.

deswegen dachte ich ja an so eine schleife:

Abfrage vom Wert: ---> Ergebnis 1000

While: Block A: LED 1+2 leuchtet

Abfrage vom Wert: ---> Ergebnis 800

While: Block B: LED1 leuchtet

weißt wie ich meine ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 21:40
Beitrag #6
RE: Programmier-Anfänger
Ja, aber das ist mit IF schon der richtige Weg.
Wenn Du mit while da ran gehst, bleibt das Programm dort hängen.

IF - Else muss laufen

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 21:49 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2015 21:53 von Chef_2.)
Beitrag #7
RE: Programmier-Anfänger
kannst du mir da mal ein beispiel geben ? ich mache ja alles mit if... aber für was ist else ?

ich denke mir das so:

Wenn --> IF

ansonsten --> ELSE

aber eigentlich würde es ja passen mit:

if
if
if
if

aber theorie und praksis

ist jedenfalls ein spannendes Thema, an dem man sich wohl Jahre aufhalten kann... mein Ziel ist wie gesagt eine selbst programmierte intelligente Laderegelung für eine Photovoltaike-Insel-Anlage... aber wollte erst mal gaaaanz einfach anfangen... LED´s blinken lassen ist verstanden...

aber es gibt da echt so viel, das wohl irgendwie geht... aber in der realität halt nicht ---> zu doof dafür Big Grin

z.B. bin ich auch schon auf die geniale Idee gekommen:

if (ADC_value > 1000)
{digitalWrite(LED1 && LED2, HIGH);}

aber da hab ich auch was nicht verstanden... sinn sollte sein: Wenn über 1000, dann LED1 + LED2 an.

Aber zurück zum Programm:

wenn ich nach dem ersten Befehl eine Zeit setze, dann blinkt meine zweite LED zumindest mal... was mit ja zeigt, dass es wirklich daran liegt, dass ich nicht oben etwas erlauben kann, was ich 4 Zeilen weiter unten wieder verbiete...

EDIT: Hallo Lötzinnerhitzer... dein Name ist mir vorher schonmal aufgefallen... also wenn mal was zu löten hast, wo du nimmer weiter kommst, melde dich Wink

Wie muss ich "map" und "case" verstehen ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 22:23
Beitrag #8
RE: Programmier-Anfänger
Na das sieht so aus, als bezieht sich das ganze auf EINE LED Big Grin
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 300 29.03.2016 12:36
Letzter Beitrag: Hurdy
  Hilfe bei Programmierung ANFÄNGER Icemann_2 14 2.032 23.10.2015 15:51
Letzter Beitrag: Binatone
  Anfänger und Stepper Cubiator 3 1.363 20.09.2015 17:52
Letzter Beitrag: Cubiator
  Anfänger: Code für "Mini-Alarmanlage" drugX 13 2.238 11.08.2015 16:00
Letzter Beitrag: torsten_156
  Programmier Probleme ElektroChris 8 1.300 30.07.2015 12:18
Letzter Beitrag: hotsystems
  Anfänger braucht Hilfe: Avr libs sind nach Update nicht mehr ansprechbar Legofriend 1 627 15.03.2015 23:32
Letzter Beitrag: Foto-Ralf
  Ist das Projet für einen Anfänger leicht machbar? Juschi 7 1.328 07.02.2015 17:05
Letzter Beitrag: Bodo-baller
  passt das so? anfänger sucht rat Gerüst 2 946 17.11.2014 20:48
Letzter Beitrag: rkuehle
  Anfänger braucht hilfe charlie883 1 709 16.11.2014 23:09
Letzter Beitrag: nettworker
  Anfänger hat Probleme mit Fehler im Sketch mchammer 2 936 12.11.2014 22:00
Letzter Beitrag: mchammer

Gehe zu:


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