Der springende Punkt dabei war, 8 Bit Farbcode über 2 74hc595-Register an 2 RGB-LEDs senden zu können. Wenn ich die Standardfarbe für jede zu sendende LED erhalten kann, besteht der nächste Teil des Codes darin, eine Benutzeroberfläche zu haben, mit der jemand auswählen kann, welche LED und welche Farbe er möchte. Versuchen Sie jetzt, die Standardfarben auf diese 2 LEDs zu verschieben. Als es kompiliert wurde, bekam ich keine Schalt-LEDs, die sich nicht änderten. wie gesagt ich bin ein noob was das Zeug angeht.
#include <arduino.h>
const int ledred = (char)0x80;
const int ledgreen = 0x20;
const int ledcyan = 0x28;
const int ledyellow = (char)0x0A0;
const int ledwhite = (char)0x0A8;
const int ledblack = 0x00;
const int ledvoliet = 0x44;
const int ledblue = 0x08;
#define step1 1
#define step2 2
#define step3 3
#define step4 4
#define step5 5
#define step6 6
#define step7 7
#define step8 8
#define led1 1
#define led2 2
#define led3 3
#define led4 4
#define led5 5
#define led6 6
#define led7 7
#define led8 8
char display_step;
char i;
char c;
char str[80],sstep,lamp,color;
int done;
char colors [8][7]={
"Red " ,"Green" ,"Cyan " ,"Yellow" ,"White " ,"Black " ,"Voliet" ,"Blue "};
char database[56]={
8,ledred,ledgreen,ledcyan,ledyellow,ledblack,ledwhite,
7,ledvoliet,ledblue,ledwhite,ledyellow,ledcyan,ledred,
3,ledred,ledred,ledred,ledblue,ledblue,ledblue,
5,ledred,ledwhite,ledblue,ledred,ledwhite,ledblue,
9,ledgreen,ledblue,ledvoliet,ledyellow,ledcyan,ledblack,
4,ledblack,ledblue,ledblack,ledyellow,ledblack,ledcyan,
6,ledwhite,ledblue,ledgreen,ledvoliet,ledcyan,ledyellow,
10,ledgreen,ledyellow,ledblue,ledred,ledblack,ledblue};
char numberlamps=2;
char numbersteps=8;
const int data = 9;
const int clock = 10;
const int latch = 8;
int main()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
void loop(){
int index;
int i;
int updateLEDs;
int lampvalue;
display_step = 1 + display_step%numbersteps;
index = (display_step - 1)*(numberlamps + 1);
time = database[index];
for( i = index +1; i < numberlamps ; i++);
lampvalue = database[index];
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, lampvalue);
digitalWrite(latch, HIGH);
}
Ich vermute, dass dies nicht der gesamte Code ist.
delay
als Variablennamen verwenden, es ist (im Wesentlichen) ein reserviertes Wort in Arduino (es ist eigentlich eine vordefinierte Funktion), und Sie verwenden diese Variable sowieso für nichts.#include <arduino.h>
){ ... }
) ohne ersichtlichen GrundAKTUALISIEREN:
for( i = index +1; i < numberlamps ; i++)
, und Sie sollten wahrscheinlich geschweifte Klammern um die nachfolgenden Codezeilen haben.display_step = 1 + display_step%numbersteps;
sollte wahrscheinlich lautendisplay_step = (1 + display_step)%numbersteps;
time
Variable ein, machen dann aber nichts mit diesen Informationen.Serial.println(var_name)
Anweisungen verwendet werden.Das Problem ist wirklich, dass Ihr Code keinen Sinn ergibt und keine Kommentare enthält, die ausdrücken, was er Ihrer Meinung nach tut ... wie wäre es, wenn Sie damit beginnen, ein Flussdiagramm zu zeichnen und zu teilen?
Haben Sie darüber nachgedacht, vielleicht ein Tutorial wie das Arduino-Tutorial von LadyAda durchzugehen ?
Es beantwortet viele häufige Fragen und Probleme, sodass wir Zeit damit verbringen können, neue und interessante Probleme zu beheben :-).
Das größte Problem, das ich in diesem Code sehe, ist
int main() // Doesn't work with Arduino -- Arduino has its own internal main().
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
Da Sie ein Arduino verwenden, möchten Sie das mit ziemlicher Sicherheit durch etwas Ähnliches ersetzen:
void setup() {
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
Wie / woher wird loop() aufgerufen?
Ein Schaltplan würde auch helfen. Es gibt zwei weitere mögliche Probleme: Der 74hc595-Schieberegister-OE-Pin (Ausgangsaktivierung) (Pin 13 in der DIP-Version) muss LOW sein, damit das Schieberegister etwas ausgeben kann, während der MR-Pin (Master-Reset) (Pin 10 im DIP) muss hoch sein. Sie möchten wahrscheinlich OE mit Masse und MR mit VCC verbinden, während Sie testen.
Vicatcu hat Recht, dass jeder 74HC595 theoretisch zwei LEDs ansteuern kann, da jeder 8 Ausgänge hat (9, wenn Sie die Q7S-Leitung zählen), jeder Chip kann jedoch nur maximal 70 mA ansteuern, was bedeutet, dass jede Ihrer LED-Leitungen begrenzt ist bis 11,5 mA Strom, dh nicht so hell wie sonst sein könnte. Wie sind die beiden 74HC595 trotzdem verbunden? Wenn Sie die gleichen Daten-, Takt- und Latch-Leitungen zu beiden führen (dh parallele Konfiguration), können Sie sie nicht separat adressieren.
Grady-Spieler
Vicatcu
Vicatcu