Go Down

Topic: funcion registerWrite (Read 158 times) previous topic - next topic

jfarango1969

Aug 23, 2019, 10:32 pm Last Edit: Aug 26, 2019, 11:25 pm by surbyte Reason: Agregado de etiqueta para Errores y/o códigos
Hola a todos, como soy nuevo con arduino estoy tratando de adaptar un pequeño programa para  usar un registro 74HC595 y encender una LED ingresando un numero de 1 a 8.

Code: [Select]
*/
//Primero definimos las variables

//seguro o latch va al pin ST_CP del 74HC595
const int seguroPin = 8;

//El pin de datos ( data pin), va a DS del 74HC595
const int datosPin = 11;

//El pin del reloj (clock pin) va al SH_CP deñ 74HC595
const int relojPin = 12;


void setup() {
 pinMode(seguroPin, OUTPUT);
 pinMode(datosPin, OUTPUT);
 pinMode(relojPin, OUTPUT);
 Serial.begin(9600);
 Serial.println("Reset");
   
}

void loop() {
 
 //Primero el sistema debe verificar que el valor no es 0 ( es decir, si no ingresamos un valor el debe estar quieto en primera)
 if (Serial.available()>0) {
   //en ASCII, los numeros del 0-9 van del 48 al 57 (48 es 0, entonces si escribimos 7 en ASCII sera 55)
   int bitaEnviar = Serial.read() -48;
   
   //Le decimos al 74HC595 que ese es el bit activo ( el numero a activar)
   registerWrite (bitaEnviar, HIGH);
   
 }
   
}


Hasta aqui he llegado ya que el compilador siempre muestra este mensaje:

Code: [Select]
registerWrite was not declared in this scope.

Alguien tiene una solucion?

Muchas gracias.


_jose_

#1
Aug 25, 2019, 07:59 pm Last Edit: Aug 25, 2019, 08:03 pm by _jose_
Por favor lee las normas del foro donde se explica como postear codigo adecuadamente.
El compilador te esta diciendo que la funcion registerWrite que estas usando no esta definida en ninguna parte ,por lo que si has hecho un copia-pega seguramente  te has olvidado de poner esa funcion en tu sketch.De todas formas Arduino dispone de una funcion para la comunicacion serie sincrona,repasa este enlace: https://www.prometec.net/shift-registers/

jfarango1969

Muchas gracias, me fue de mucha ayuda, en el enlace se explica bastante bien el funcionamiento del HC595.

_jose_

Perfecto,edita tu post para solucionar el tema del posteo de codigo y asi de paso ya sabras como se hace para sucesivos post.

jfarango1969

Hola buena tarde, aqui les dejo para la comunidad de habla en español como utilice el shift register para ingresar un numero 1-8, que lo lea en el puerto serial y lo envie por el 74HC595 a una de mis 8 LED.

Bastante simple pero espero que de utilidad para los que iniciamos.

Code: [Select]

/*Vamos a usar el 74HC595 para ingresar por el puerto serial un numero del 1 al 8 ( los puertos utiles del595),
para esto ademas de crear los pines, seguro (latch), datos y reloj,


*/
//Primero definimos las variables

//seguro o latch va al pin ST_CP del 74HC595
const int seguroPin = 8;

//El pin de datos ( data pin), va a DS del 74HC595
const int datosPin = 11;

//El pin del reloj (clock pin) va al SH_CP deñ 74HC595
const int relojPin = 12;


void setup() {
  pinMode(seguroPin, OUTPUT);
  pinMode(datosPin, OUTPUT);
  pinMode(relojPin, OUTPUT);
  //debemos iniciar el puerto serial.
  Serial.begin(9600);
  Serial.println("Reset");
 
}

void loop() {
 
  //Primero el sistema debe verificar que el valor no es 0 ( es decir, si no ingresamos un valor el debe estar quieto en primera)
  if (Serial.available()>0) {
    //en ASCII, los numeros del 0-9 van del 48 al 57 (48 es 0, entonces si escribimos 7 en ASCII sera 55)
    int bitaEnviar = Serial.read() -48;
   
    //Le decimos al 74HC595 que ese es el bit activo ( el numero a activar)
    //Aqui inventamos una funcion que se va a llamar registerWrite ( por ahora no existe, mas adelante le diremos al sistema de que se trata)
    registerWrite(bitaEnviar, HIGH);
    //aqui cerramos, ya le dijimos cual era el numero, ahora seguiremos adelante
  }
}
 
  /* Aqui escribiremos unas funciones que no se repetiran en el loop, es decir ya sabemos que numero de pin vamos a activar,
  por ejemplo el pin 4, ahora necesitamos es que aparezca activado ese pin ( se encienda la LED) en el sistema decimal,
  no en el binario ( que es el que el entiende), de ahi que tengamos que hacer todo este camino para que el entienda
  */
 
  void registerWrite(int cualPin, int cualEstado){
 
  //Que bits queremos enviar
  byte bitaEnviar = 0;
 
  //Le decimos al pin de anclaje que tenga la informacion, que todavia no la envie hasta que este lista
  digitalWrite(seguroPin, LOW);
 
  /* Vamos a usar una funcion que se llama bitWrite, tiene 3 parametros y es como una pizarra electronica y funciona asi;
  en el primero le decimos que la pizarra esta en blanco ( bitaEnviar, que ya dijimos que es 0), luego le escribimos encima el numero
  de la LED que vamos a encender ( en este ejemplo la 4) que corresponde a cualPin, que recordando la funcion que nos inventamos
  llamada registerWrite tenia inicialmente dos datos, uno era bitaEnviar, HIGH y luego en este segmento del codigo cambiaron
  los datos a cualPin, cualEstado. Bueno finalmente resulta que cualPin es igual a bitaEnviar.
  Porque hacen esto los ingenieros de sistemas es para mi un enigma a la fecha.
  */
 
  bitWrite(bitaEnviar, cualPin, cualEstado);
 
  /* ahora si digamosle al shift register que se prepare para los datos a enviar asi;
  Primero el pin de datos activo1+
  0, que aliste el reloj, que empiece por el mas significativo
  -otra cosa que no enditendo de los programadores, por ultimo y por fin el bit que vamos a enviar, finalmente el 4.
  */
  shiftOut(datosPin, relojPin, MSBFIRST, bitaEnviar);
 
  //Abrimos la compuerta
  digitalWrite(seguroPin, HIGH);
 
  }
   

Go Up