codificación usando Arduino, dos 74HC595 y dos LED RGB, problemas con el desplazamiento de la base de datos

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);  

  }
Esto necesita una edición / limpieza, resalte los bloques de código y presione el botón '{}'
¿Cuál es la pregunta... el código ni siquiera se compila sin error... qué estás tratando de hacer?
¿Por qué necesita dos registros de desplazamiento para controlar dos LED RGB? Un registro de desplazamiento tiene ocho salidas. Cada LED RGB necesita tres entradas...

Respuestas (3)

Sospecho que este no es el código completo.

  1. No puede usar delaycomo 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.
  2. Necesita corchetes en su incluir (es decir #include <arduino.h>)
  3. Tiene un bloque de código (el conjunto más interno de encerrar entre llaves { ... }) sin razón aparente

ACTUALIZAR:

  1. Probablemente no debería tener un punto y coma después de for( i = index +1; i < numberlamps ; i++), y probablemente debería tener llaves alrededor de las siguientes líneas de código.
  2. La línea display_step = 1 + display_step%numbersteps;probablemente debería decirdisplay_step = (1 + display_step)%numbersteps;
  3. Lees información en la timevariable, pero luego no haces nada con esa información.
  4. Una forma muy efectiva de diagnosticar problemas con el código Arduino como este es usar el Serial Monitor para generar periódicamente valores de variables relevantes a medida que se ejecuta su programa, usando 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?

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.
esta parte del programa es seguir mirando los pasos y el código lam para actualizar los bits que se están desplazando a los leds

¿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.

loop() es una cosa de Arduino, el arranque llama a una función llamada setup() y luego llama continuamente a loop().
Correcto. Ha pasado un tiempo desde que hice Arduino. Olvidé que main() está oculto para el usuario.