Now i´m having problems with 2 functions, in one of them im repeating a function, so i have sent 40 bits to 20 displays. In the "multiplexado" (multiplexed) function, i need to use a variable from the repeating function. but i dont understand why this error message apears. I´m trying to use pointers, but i havent seen them in school yet. so i dont undestand ajsaj
so here its the main code
#include <Arduino.h>
#include "proto.h"
uint8_t valor_byte, filasx5[5];
int main(){
in_out();
conf_timer0();
numbers();
antirrebotes();
mandar_byte(valor_byte);
mandar_filas(filasx5);
clk_signal();
//multiplexado(valor_display);
sei();
while(1){
_delay_ms(2);
}
}
ISR(TIMER0_COMPA_vect){
mandar_byte(valor_byte);
mandar_filas(filasx5);
clk_signal();
static uint16_t frec=0, miles=0;
static int16_t valor_display=0;
//variable para la frecuencia variable del display
static uint8_t displaystat=0, unidad=0, decena=0, centena=0;
//variable
if(frec>50) //con este if controlamos la frecuencia de multiplexado
{
frec=0;
multiplexado(valor_display);
}
}
and here its the library where i put my functions
#include "proto.h"
int caso = 0, dir = 0, on_off = 0; // caso del vector, dirección en la que va, variable para el encendido y apagado
uint8_t prevbot1, prevbot2, prevbot3, prevbot4, prevbot5, prevbot6, statbot1, statbot2, statbot3,
statbot4, statbot5, statbot6; // estados de los botones y estados previos
uint16_t vel = 300;
// variable para ajustar la velocidad al presionar los pulsadores 2, 3 y 4
uint16_t miles=0, numero=0;
uint8_t unidad=0, decena=0, centena=0, filasx5;
uint8_t get_bot_stat(uint8_t botnum)
{
if(botnum==1){
return statbot1;
}
if(botnum==2){
return statbot2;
}
if(botnum==3){
return statbot3;
}
if(botnum==4){
return statbot4;
}
if(botnum==5){
return statbot5;
}
if(botnum==6){
return statbot6;
}
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void antirrebotes(void) // configuración de botones, antirrebotes, detección de flanco
{
static uint8_t ctbot1 = 0, ctbot2 = 0, ctbot3 = 0, ctbot4 = 0, ctbot5=0, ctbot6=0;
if (bot1 == 0)
{ // si el bot está pulsado
if (ctbot1 < 100)
{
ctbot1++;
} // si el cont vale menos que 100, aumentamos su valor
}
else
{
ctbot1 = 0; // si no está pulsado, el cont vale 0
}
if (ctbot1 > 10)
{ // si desde que toqué el botón pasaron 10ms
statbot1 = 1; // el estado del boton es 1
}
else
{
statbot1 = 0; // sino el estado del boton es 0
}
//-----------------------------------------------------------------------------------------------
if(bot2==0){ //si el bot está pulsado
if(ctbot2<100){ctbot2++; } //si el cont vale menos que 255, aumentamos su valor
}
else{
ctbot2=0; //si no está pulsado, el cont vale 0
}
if(ctbot2>10){ //si desde que toqué el botón pasaron 10ms
statbot2=1; //el estado del boton es 1
}else{
statbot2=0; //sino el estado del boton es 0
}
//----------------------------------
if(bot3==0){ //si el bot está pulsado
if(ctbot3<100){ctbot3++; } //si el cont vale menos que 255, aumentamos su valor
}
else{
ctbot3=0; //si no está pulsado, el cont vale 0
}
if(ctbot3>10){ //si desde que toqué el botón pasaron 10ms
statbot3=1; //el estado del boton es 1
}else{
statbot3=0; //sino el estado del boton es 0
}
//--------------------
if(bot4==0){ //si el bot está pulsado
if(ctbot4<100){ctbot4++; } //si el cont vale menos que 255, aumentamos su valor
}
else{
ctbot4=0; //si no está pulsado, el cont vale 0
}
if(ctbot4>10){ //si desde que toqué el botón pasaron 10ms
statbot4=1; //el estado del boton es 1
}else{
statbot4=0; //sino el estado del boton es 0
}
//----------------------------------------------------------------------------------------
if(bot5==0){ //si el bot está pulsado
if(ctbot5<100){ctbot5++; } //si el cont vale menos que 255, aumentamos su valor
}
else{
ctbot5=0; //si no está pulsado, el cont vale 0
}
if(ctbot5>10){ //si desde que toqué el botón pasaron 10ms
statbot5=1; //el estado del boton es 1
}else{
statbot5=0; //sino el estado del boton es 0
}
//--------------------
if(bot6==0){ //si el bot está pulsado
if(ctbot6<100){ctbot6++; } //si el cont vale menos que 255, aumentamos su valor
}
else{
ctbot6=0; //si no está pulsado, el cont vale 0
}
if(ctbot6>10){ //si desde que toqué el botón pasaron 10ms
statbot6=1; //el estado del boton es 1
}else{
statbot6=0; //sino el estado del boton es 0
}
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void conf_timer0(void) // función para configurar el timer0
{
TCCR0A |= (1 << WGM01); // modo CTC
TCCR0B |= (1 << CS01) | (1 << CS00); // prescaler 64
OCR0A = 249; // valor de comparación para 1ms
TIMSK0 |= (1 << OCIE0A); // habilitar interrupción para el contador A
sei(); // habilitar interrupciones globales
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void in_out(void){ //in and out de la integradora AED 5to
DDRC &= ~((1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5)); //entrada, pulsadores
DDRB |= ((1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4) | (1<<PB5)); //salida, leds y displays
DDRD |= ((1 << PD2) | (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6)); //salida, displays
PORTD|= ((1<<PC0) | (1<<PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5)); //pull up interna
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void numbers(void){
if(get_bot_stat(1)==1 && prevbot1==0){
/*if(numero>9){
numero=0;
}*/
numero++;
}
if(get_bot_stat(2)==1 && prevbot2==0){
/* if(numero>)*/
numero+= 10;
}
if(get_bot_stat(3)==1 && prevbot3==0){
numero+= 100;
}
if(get_bot_stat(4)==1 && prevbot4==0){
numero+= 1000;
}
//descomponemos el número en unidad, decena, centena y miles
unidad= numero % 10;
decena= (numero / 10) % 10;
centena = ( numero / 100) % 10;
miles = ( numero / 1000) % 10;
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void multiplexado(uint16_t valor_display){ //valor display se usa para multiplexar las columnas //this function is used to multiplex columns where the 20 displays are
numbers();
extern uint8_t ct_byte;
switch(valor_display){
case 0:
//apagamos los transistores
PORTD &=~((1<<PD3) | (1<<PD4) | (1<<PD5) | (1<<PD6));
//enviamos datos al primer display
mandar_filas(filasx5[ct_byte]);
}
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void mandar_byte(uint8_t dato_byte){ //mandamos 1 BYTE (8bits)
for(uint8_t ctbits=0; ctbits<8; ctbits++){ //with "mandar_byte", im sending one by one a byte to an arduino port, using a clock signal
if((dato_byte & 1) !=0){
PORTD |= (1<<PD2);
}
else{
PORTD &=~ (1<<PD2);
}
}
dato_byte>>1;
clk_signal();
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void mandar_filas(void){ /*uso "*", eso es un puntero, lo que hace es decir que quiero leer lo que
esa variable contiene, su valor */
for(uint8_t ct_byte=0; ct_byte<5; ct_byte++){
mandar_byte(filasx5[ct_byte]); /* filasx5 hace que al mandar 5 veces (5 filas) los 40 bits, se muestren los numeros
que queremos en los displays deseados */
}
} // with "mandar_filas", i´m repeating the previous function 5 times, so i have the 40 bits that i mentioned before.
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
void clk_signal(void){ //this is the clock signal function
PORTB |= (1<<PB0);
PORTB &=~ (1<<PB0);
}
lib\proto\proto.cpp: In function 'void multiplexado(uint16_t)':
lib\proto\proto.cpp:208:29: error: invalid types 'uint8_t {aka unsigned char}[uint8_t {aka unsigned char}]' for array subscript
mandar_filas(filasx5[ct_byte]);
^