Hallo zusammen! Fange gerade mit dem Programmieren an. Hab mal ne Frage: Ich will einen Spannungswert an eine LED-Zeile ausgeben... Habe folgenden Code gefunden, funktioniert soweit auch prima. Wie stelle ich es an das ich noch mehr leds anschließen kann? Z.B. an Port D. #include <avr/io.h> double Leds[] = { 0b00000000000, 0b00000000001, 0b00000000011, 0b00000000111, 0b00000001111, 0b00000011111, 0b00000111111, 0b00001111111, 0b00011111111, 0b00100000000, }; FACT =( ( 1024 / ( sizeof( Leds ) / sizeof(*Leds) ) ) + 1 ); int main() { int Value = 0; DDRB = 0xFF; ADCSRA = ( 1 << ADEN ) | ( 1 << ADPS2 ) | ( 1 << ADPS1 ); ADMUX = ( 1 << MUX0 ); ADCSRA |= ( 1 << ADSC ); while( ADCSRA & ( 1 << ADSC ) ) ; while( 1 ) { ADCSRA |= ( 1 << ADSC ); while( ADCSRA & ( 1 << ADSC ) ) ; Value = ADC; PORTB = Leds[ Value / FACT ]; } } Mfg Sascha P.
> double Leds[] = > { 0b00000000000, > ... Was soll denn da bitteschön "double"? "double" sind Gleitkommazahlen!
> FACT =( ( 1024 / ( sizeof( Leds ) / sizeof(*Leds) ) ) + 1 ); auch interessant... weder ein #define noch sonst irgendwas dabei, was für einen sinnvollen Zusammenhang sorgen würde. >Wie stelle ich es an das ich noch mehr leds anschließen kann? >Z.B. an Port D. Erweitere "dein" Array auf 16bit und teile die 16bit auf 2 Ports auf.
Sascha P. wrote:
> Wie könnte man es denn eleganter lösen??
Indem man den passenden Datentyp nimmt, also:
uint8_t für 8 Bit
uint16_t für 16 Bit
uint32_t für 32 Bit
Float hat aber nun absolut überhaupt nichts bei Bitmanipulationen
verloren.
Es sei denn, Du willst Dich wie andere beschweren, daß C ineffektiv ist.
Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.