Go Down

Topic: Problem mit LED-Lauflicht ... (Read 2329 times) previous topic - next topic

Jun 08, 2012, 11:55 pm Last Edit: Jun 10, 2012, 10:45 pm by uwefed Reason: 1
Hallo zusammen,

ich habe mal ein Lauflicht mit acht LED's zusammengebastellt und den dazugehoerigen Sketch geschrieben.
Nur habe ich ein einziges Problem. Das ganze laeuft erst nur dann an, wenn in der 'setup'-Funktion eine Zeile mit
'Serial.begin(xxxx);' oder 'Serial.end();' vorhanden ist, obwohl ich mit der seriellen Uebertragung ueberhaupt nichts
zu tun haben moechte. Wo ist also der Fehler im Sketch? Meine Hardware ist ein Arduino Uno-Board Rev. 2, die
Arduino-IDE hat die Verison 0022.

Fuer eine plausible Antwort waere ich sehr dankbar ... :-)

greetz

/
Code: [Select]
*
 LED-Lauflicht mit acht LED's
*/

const byte BIN1START=B00000001;
const byte BIN2START=B10000000;
const int ZEIT=250;

byte i;
byte Rest;
byte Wert;

byte BinWert1=0;
byte BinWert2=0;
byte BinWert3=0;
byte BinWert4=0;
byte BinWert5=0;
byte BinWert6=0;
byte BinWert7=0;
byte BinWert8=0;

boolean OPin2=LOW;
boolean OPin3=LOW;
boolean OPin4=LOW;
boolean OPin5=LOW;
boolean OPin6=LOW;
boolean OPin7=LOW;
boolean OPin8=LOW;
boolean OPin9=LOW;

void setup()
{
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 Serial.end();
}

void loop()
{
 Wert=BIN1START;
 for (i=0; i<7; i++)
 {
   Wert=Wert<<1;
   BinKonvert();
   delay(ZEIT);
 }
 Wert=BIN2START;
 for (i=0; i<7; i++)
 {
   Wert=Wert>>1;
   BinKonvert();
   delay(ZEIT);  
 }
}

void BinKonvert()
{
 BinWert8=Wert/128;
 Rest=Wert-(BinWert8*128);
 BinWert7=Rest/64;
 Rest=Rest-(BinWert7*64);
 BinWert6=Rest/32;
 Rest=Rest-(BinWert6*32);
 BinWert5=Rest/16;
 Rest=Rest-(BinWert5*16);
 BinWert4=Rest/8;
 Rest=Rest-(BinWert4*8);
 BinWert3=Rest/4;
 Rest=Rest-(BinWert3*4);
 BinWert2=Rest/2;
 Rest=Rest-(BinWert2*2);
 BinWert1=Rest;

 if (BinWert1==1) { OPin2=HIGH; } else { OPin2=LOW; }
 if (BinWert2==1) { OPin3=HIGH; } else { OPin3=LOW; }
 if (BinWert3==1) { OPin4=HIGH; } else { OPin4=LOW; }
 if (BinWert4==1) { OPin5=HIGH; } else { OPin5=LOW; }
 if (BinWert5==1) { OPin6=HIGH; } else { OPin6=LOW; }
 if (BinWert6==1) { OPin7=HIGH; } else { OPin7=LOW; }
 if (BinWert7==1) { OPin8=HIGH; } else { OPin8=LOW; }
 if (BinWert8==1) { OPin9=HIGH; } else { OPin9=LOW; }
 
 digitalWrite(2,OPin2);
 digitalWrite(3,OPin3);
 digitalWrite(4,OPin4);
 digitalWrite(5,OPin5);
 digitalWrite(6,OPin6);
 digitalWrite(7,OPin7);
 digitalWrite(8,OPin8);
 digitalWrite(9,OPin9);
}  

michael_x

Bevor diese merkwürdige Sache ganz verschwindet:

Sorry, ich hab auch keine Ahnung!

Serial zu verwenden verändert das Verhalten deines Programms: setup braucht länger und mehr Speicher, sowohl RAM als auch PROGMEM

Quote
Das ganze laeuft erst nur dann an...

was bedeutet das ?

harding

Hallo Bob_Snow_Crash,

ich habe deinen Sketch mal bei mir getestet (in Ermangelung der vielen LED nur mit einer) und konnte keine Probleme erkennen - wenn Du "Serial.end();" in der letzten Zeile der Setup Routine meinst.
Weder mit noch ohne dieser Programmzeile ändert sich etwas am Verhalten des Programmes.
Getestet auf Arduino Ethernet mit Arduino 1.01

Grüße

harding

uwefed

#3
Jun 11, 2012, 10:08 pm Last Edit: Jun 11, 2012, 10:10 pm by uwefed Reason: 1
Ich hab den Sketch mit dem IDE 0022 kompiliert und hab keinen Probleme gefunden.

Zum Sketch ist zu sagen, daß er sehr kompliziert geschrieben ist.

Code: [Select]

const int ZEIT=250;
byte j=2;
byte increment =1;

void setup()
{
  for (int i=2;i<=9;i++)
  {
  pinMode(i,OUTPUT);
  digitalWrite(i,LOW);
  }
}

void loop()
{
  digitalWrite(j,HIGH);
  delay(ZEIT);
  digitalWrite(j,LOW);
  j+=increment;
  if(j>=9 || j<2)increment*=-1;
 

#4
Jun 13, 2012, 08:51 pm Last Edit: Feb 09, 2014, 09:24 pm by uwefed Reason: 1
hallo uwefed,

danke fuer dein super kleinen sketch. dies hatte noch einen kleinen 'minibug' bei dir.
folgendes: die led's gehen von von rechts nach links und danach von links nach rechts.
ABER (!) wenn die letzte led rechts erreicht wurde dann sind fuer die vorgegebene zeit
ALLE (!) led's kurz aus. ich habe es mal gefixt so dass es jetzt einen superfluessigen
lauf hat. es lag in der 'if'-anweisung. es fehlte nur noch ein gleichheitszeichen mehr nicht.
siehe jetzt vollstaendigen source unten ...

nichtsdestotrotz habe ich bei meinem selbstgebastelten sketch immer noch das problem
mit dem 'Serial.begin()' oder 'Serial.end()'. die zeile muss bei mir im sketch stehen, sonst
laufen die led's nicht an. habe immer noch keine ahnung woran es liegt aber das prob liegt
defintiv bei mir.  

Code: [Select]
/*
 LED-Lauflicht mit 8 LED's
*/

const int ZEIT=250;
byte j=2;
byte increment=1;

void setup()
{
 for (int i=2;i<=9;i++)
 {
   pinMode(i,OUTPUT);
   digitalWrite(i,LOW);
 }
}

void loop()
{
 digitalWrite(j,HIGH);
 delay(ZEIT);
 digitalWrite(j,LOW);
 j+=increment;
 if(j>=9 || j<=2) increment*=-1;
}  

uwefed

Aus Ermangelung von Zeit hatte ich den Sketch nicht praktisch mit LED ausprobiert. Entschuldige für den Fehler.
Bezüglich des Orginalsketch kann ich nichts sagen, außer daß er mir funktioniert.
Grüße Uwe


problem geloest ....

es lag an der arduino ide-version (0022) welche ich auf meiner kiste hatte. ich spielte jetzt gerade
die aktuelle version auf (1.0.1) und siehe da, das problem mit Serial.begin() bzw. Serial.end() iss wech ...


Teus72

Hallo
Ich bin absoluter Arduino Neuling, und mochte mich mit 8 Kanal Lauflicht Probieren.
Nun mein vorhaben.

const byte b1=B00000001;
const byte b2=B00000010;
const byte b3=B00000100;
const byte b4=B00001000;
const byte b5=B00010000;
const byte b6=B00100000;
const byte b7=B01000000;
const byte b8=B10000000;

jetzt hätte ich gerne das b1-b8 durchläuft. also die Les´s bei b1 OOOOOOOX und bei b2 OOOOOOOXO und so weiter
aufleuchten ich bin nun schon seit 5h am googeln und komme nicht weiter.

kann mier BITTE BITTE jemand HELFEN.


uwefed


Hallo
Ich bin absoluter Arduino Neuling, und mochte mich mit 8 Kanal Lauflicht Probieren.
Nun mein vorhaben.

const byte b1=B00000001;
const byte b2=B00000010;
const byte b3=B00000100;
const byte b4=B00001000;
const byte b5=B00010000;
const byte b6=B00100000;
const byte b7=B01000000;
const byte b8=B10000000;

jetzt hätte ich gerne das b1-b8 durchläuft. also die Les´s bei b1 OOOOOOOX und bei b2 OOOOOOOXO und so weiter
aufleuchten ich bin nun schon seit 5h am googeln und komme nicht weiter.

kann mier BITTE BITTE jemand HELFEN.


Öffne einen neuen Topic.
Grüße Uwe

Go Up