el objetivo de esto era poder enviar 8 bits de código de color a 2 leds rgb a través de 2 registros 74hc595. Si puedo obtener el color predeterminado para cada LED que se enviará, la siguiente parte del código es tener una interfaz de usuario para permitir que alguien seleccione qué LED y qué color quiere. así que ahora intento cambiar los colores predeterminados a estos 2 LED. cuando se compiló, no obtuve cambios en los ledes, no cambiaron. Como dije, soy un novato en estas cosas.
#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);
}
Sospecho que este no es el código completo.
delay
como nombre de variable, es (esencialmente) una palabra reservada en Arduino (en realidad es una función predefinida), y de todos modos no usa esa variable para nada.#include <arduino.h>
){ ... }
) sin razón aparenteACTUALIZAR:
for( i = index +1; i < numberlamps ; i++)
, y probablemente debería tener llaves alrededor de las siguientes líneas de código.display_step = 1 + display_step%numbersteps;
probablemente debería decirdisplay_step = (1 + display_step)%numbersteps;
time
variable, pero luego no haces nada con esa información.Serial.println(var_name)
declaraciones.El problema es realmente que tu código no tiene sentido y no tiene comentarios que expresen lo que crees que hace... ¿qué tal si comienzas dibujando y compartiendo un diagrama de flujo?
¿Ha considerado tal vez seguir un tutorial como el tutorial de Arduino de LadyAda ?
Responde a muchas preguntas y problemas comunes, por lo que podemos dedicar tiempo a solucionar problemas nuevos e interesantes :-).
El mayor problema que veo en este código es
int main() // Doesn't work with Arduino -- Arduino has its own internal main().
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
Dado que está utilizando un Arduino, es casi seguro que desee reemplazarlo con algo más como:
void setup() {
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
¿Cómo/de dónde se llama loop()?
Un diagrama de circuito ayudaría también. Hay dos posibles problemas adicionales: el pin OE (habilitación de salida) del registro de desplazamiento 74hc595 (pin 13 en la versión DIP) debe estar BAJO para que el registro de desplazamiento emita algo, mientras que el pin MR (reinicio maestro) (pin 10 en el DIP) debe ser alto. Probablemente desee vincular OE a tierra y MR a VCC mientras realiza la prueba.
vicatcu tiene razón en que, en teoría, cada 74HC595 puede controlar dos LED, ya que cada uno tiene 8 salidas (9 si cuenta la línea Q7S), sin embargo, cada chip solo puede controlar 70 mA como máximo, lo que significa que cada una de sus líneas de LED estará limitada a 11,5mA de corriente, es decir, no tan brillante como podría ser de otra manera. No obstante, ¿cómo se conectan los dos 74HC595? Si está ejecutando las mismas líneas de datos, reloj y pestillo en ambos (es decir, configuración paralela), entonces no puede abordarlos por separado.
Jugador Grady
vicatcu
vicatcu