Pages: [1]   Go Down
Author Topic: Anfängerfrage: LEDs und Poti  (Read 1347 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

mich hat nach ca. 15 Jahren mal wieder das Bastellfieber gepackt und nun habe ich mir einen Arduino Duemilanove geholt und bringe mir das ganz nach dem Motto "Learning by Doing" bei.

Jetzt hab ich schon 2 kleine projekte gemacht siehe (video)  zieseniss.eu die Programmcodes sind teilweise veränderte beispielcodes.

Jetzt würde ich es gerne bei dem aufbau mit den Blauen LEDs so machen das wenn ich das Poti drehe, das immer nur eine LED leuchtet.

Hier mal der Code:

Code:
int led1 = 0;
int led2 = 2;
int led3 = 4;
int led4 = 6;
int led5 = 8;
int led6 = 10;
int apin = 1;
int value = 0;

 
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);

}

 
void loop()                       // Staendige Wiederholung
 {  
  value =  analogRead(apin);  // setzt 'value' gleich mit 'pin'
  value /= 4;                // wandelt 0-1023 in 0-255 um
  digitalWrite(led1, value <255);
  digitalWrite(led2, value <200);
  digitalWrite(led3, value <150);
  digitalWrite(led4, value <100);
  digitalWrite(led5, value <60);
  digitalWrite(led6, value <5);
 }

Kann man diesen Code so umbauen das, das so möglich ist?

Gruß Sven
Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

frei nach "der leasing vertrag" von gerhard polt:

ja, das geht ;-)


if ( (wert > grenze_1) && (wert < grenze_2) ) {
  digitalWrite(.........);
  ....
  ....
}
Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kannst du mir das etwas genauer erklären, ich habe leider von der ganzen Programiererei überhaupt keine ahnung. Aber weiß auch leider nicht genau wie ich das in meinen Schädel bekommen soll. Hab schon zig Tuts durch.

Gruß Sven
Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#define grenze1 146  // darunter ist alles aus
#define grenze2 292
#define grenze3 438
#define grenze4 584
#define grenze5 730
#define grenze6 777
byte leds[] = {0,2,4,6,8,10}; // array - leds an pins 0,2,4 .... - elemente zaehlen von 0 an !
byte apin = 1;
int value = 0; // byte ist zu klein, analogRead() liefert 0...1023

void setup()
{
  byte zaehler;
  for(zaehler=0; zaehler < 6; zaehler++) { // laeuft von 0 bis 5
    pinMode(leds[zaehler],OUTPUT);
  }
}

void loop()                       // Staendige Wiederholung
{
  value =  analogRead(apin);  // setzt 'value' gleich mit 'pin'
  led_setzen(value);  
}

void led_setzen(int eingabe) {
  if( eingabe < grenze1 ) {
    alle_leds_aus();
  }
  if( (eingabe > grenze1) &&  (eingabe < grenze2) ) {
    alle_leds_aus();
    digitalWrite(leds[0],HIGH); // led 0 an
  }
  if( (eingabe > grenze2) &&  (eingabe < grenze3) ) {
    alle_leds_aus();
    digitalWrite(leds[1],HIGH); // led 1 an
  }
  if( (eingabe > grenze3) &&  (eingabe < grenze4) ) {
    alle_leds_aus();
    digitalWrite(leds[2],HIGH); // led 2 an
  }
  if( (eingabe > grenze4) &&  (eingabe < grenze5) ) {
    alle_leds_aus();
    digitalWrite(leds[3],HIGH); // led 3 an
  }
  if( (eingabe > grenze5) &&  (eingabe < grenze6) ) {
    alle_leds_aus();
    digitalWrite(leds[4],HIGH); // led 4 an
  }
  if( (eingabe > grenze6) ) {
    alle_leds_aus();
    digitalWrite(leds[5],HIGH); // led 5 an
  }

}

void alle_leds_aus(void) {
  byte zaehler;
  for(zaehler=0; zaehler < 6; zaehler++) {
    digitalWrite(leds[zaehler],LOW); // alles aus
  }
}

da hilft es nur ueben, ueben, ueben... die alte leier ;-)

und wie immer: "teile und herrsche", problem so lange in kleinere probleme zerteilen, bis alles trivial wird ;-)
« Last Edit: July 03, 2009, 09:01:58 am by madworm » Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

0
Offline Offline
God Member
*****
Karma: 1
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Nordwork, willkommen im Forum.
Von wo kommst Du?

Zu Deiner Frage: eigentlich hat madworm sie schon ausreichend beantwortet, aber vielleicht ist das hier auch hilfreich:

Anstelle von
Code:
digitalWrite(led1, value <255);

kannst Du, um nur eine LED einzuschalten, schreiben:
Code:
digitalWrite(led1, (value <=255)&&(value >200) );


Und entprechend führst Du das für alle anderen Werte fort, also z.B. auch
Code:
digitalWrite(led2, (value <=200)&&(value >150) );

Ich habe das zwar jetzt nicht getestet, aber von der Idee her sollte es doch klappen. Sicher kennst Du den && Operator, der das logische UND bezeichnet.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erstmal vielen Dank euch beiden.

Ich komme aus dem schönen kleinen Werne das liegt zwischen Dortmund und Münster.

Leider hat der Code von Madworm nicht so ganz funktioniert, wobei der fehler sicherlich bei mir liegt, aber es hat immer nur die erste LED geblinkt.

Jetzt habe ich meinen Code mit dem Code von bohne umgebaut und es funktioniert so wie ich wollte  smiley-grin

Naja ich glaube ich werde mir nochmal das Tutorial von (Lady Ada) so 3-7 mal reinhauen.

Wie gesagt das ist für mich der erste Kontakt mit einer Programiersprache (die Basic sachen aus der schule mal weggelassen weil die sowieso alle wieder vergessen sind.)

Ich mach das ganze auch nur weil mir die finger jucken und ich mal wieder etwas "Basteln" muss.

Wenn ihr noch tips habt wie ich den kram in mein kopf bekomme bin ich immer offen, mein system hat nicht so ganz geklappt weil ich das mit dem && Operator nicht wusste und auch so nirgens gefunden habe.


Danke und gn8

Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Schön, dass es klappt.

Alle Infos findest Du in der Reference. Den && Operator kannst Du beispielsweise hier studieren:
http://arduino.cc/en/Reference/Boolean

Die Tutorials wurden heute erst komplett überarbeitet, die findest Du hier:
http://arduino.cc/en/Tutorial/HomePage

Ansonsten empfehle ich das LadyAda Tutorial, bzw. die deutsche Übersetzung von gatonero aus diesem Forum:
http://www.freeduino.de/de/books/arduino-tutorial-lady-ada
Logged


Aachen
Offline Offline
Full Member
***
Karma: 1
Posts: 131
Just For Fun
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Nordwind,

eine deutschsprachige Übersetzung des Lady-Ada-Tutorials findest Du unter http://www.freeduino.de/en/books/arduino-tutorial-lady-ada. Dort findest Du auch noch weitere deutschsprachige Tutorials.

Viel Spaß und Erfolg  smiley-grin
Logged

Just For Fun

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ gatonero

vielen Dank kenn ich aber schon.

Nur ist es schon wirklich schwierig sich die Sprache in den Kopf zu kloppen  :smiley

Ich werd jetzt auf jeden fall die Tuts mal komplett durcharbeiten bis der Stoff sitzt.

Ein bischen was von meinen ergebnissen gibt es auf: http://www.zieseniss.eu

Gruß Sven
Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@nordwork: fehler ist korrigiert. hatte "value" als byte definiert, das ist zu klein. als "int" sollte es gehen.
Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

*grinz*

und genau mit dem Byte konnte ich mit meinem wissen "noch" gar nichts anfangen.

Danke für den hinweis.

Gruß Sven
Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

offiziell gibt es den daten typ "byte" auch nicht, eigentlich ist das ein "unsigned char" ;-)

bei dem wenigen arbeitsspeicher von der cpu habe ich mir angewoehnt, alle datentype so "klein" wie moeglich zu definieren und da haben mich deine ganzen "ints" dazu verleitet, alles nach byte zu wandeln. das war dann 1x zu viel...

durch das "byte value" hat das analogRead() zwar von 0..1023 ausgelesen, aber es wurden die oberen 8 bits abgesaegt ( ein arduino int ist 2 bytes lang ), so dass nur maximal 255 uebrig bleiben konnte. daher hat die ganze if-logik dann korrekterweise nur hoechstens die erste led angeschaltet.

« Last Edit: July 03, 2009, 09:16:30 am by madworm » Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

Pages: [1]   Go Up
Jump to: