0
Offline
Newbie
Karma: 0
Posts: 20
Arduino rocks
|
 |
« on: July 02, 2009, 02:43:16 pm » |
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: 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
Edison Member
Karma: 0
Posts: 2003
Bootloaders suck!
|
 |
« Reply #1 on: July 02, 2009, 03:55:23 pm » |
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
Newbie
Karma: 0
Posts: 20
Arduino rocks
|
 |
« Reply #2 on: July 02, 2009, 04:11:37 pm » |
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
Edison Member
Karma: 0
Posts: 2003
Bootloaders suck!
|
 |
« Reply #3 on: July 02, 2009, 05:15:58 pm » |
#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
God Member
Karma: 0
Posts: 588
LumiNet rocks
|
 |
« Reply #4 on: July 02, 2009, 06:56:19 pm » |
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 digitalWrite(led1, value <255);
kannst Du, um nur eine LED einzuschalten, schreiben: digitalWrite(led1, (value <=255)&&(value >200) );
Und entprechend führst Du das für alle anderen Werte fort, also z.B. auch 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
Newbie
Karma: 0
Posts: 20
Arduino rocks
|
 |
« Reply #5 on: July 02, 2009, 07:20:40 pm » |
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  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
|
|
|
|
|
|
|
Aachen
Offline
Full Member
Karma: 0
Posts: 131
Just For Fun
|
 |
« Reply #7 on: July 03, 2009, 02:55:48 am » |
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 
|
|
|
|
|
Logged
|
Just For Fun
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 20
Arduino rocks
|
 |
« Reply #8 on: July 03, 2009, 03:03:55 am » |
@ gatonero vielen Dank kenn ich aber schon. Nur ist es schon wirklich schwierig sich die Sprache in den Kopf zu kloppen :  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.euGruß Sven
|
|
|
|
|
Logged
|
|
|
|
|
"The old Europe"
Offline
Edison Member
Karma: 0
Posts: 2003
Bootloaders suck!
|
 |
« Reply #9 on: July 03, 2009, 09:03:07 am » |
@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
Newbie
Karma: 0
Posts: 20
Arduino rocks
|
 |
« Reply #10 on: July 03, 2009, 09:04:57 am » |
*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
Edison Member
Karma: 0
Posts: 2003
Bootloaders suck!
|
 |
« Reply #11 on: July 03, 2009, 09:15:17 am » |
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!
|
|
|
|
|