Cześć, robię termometr z wykorzystanie Atmegi32 i czujnika temperatury TMP36. Próbuję uśrednić wartość temperatury ale w linii 79 dostaję następujący błąd:
subscripted value is neither array nor pointer nor vector
Nie rozumiem o co tu chodzi i z czego wynika ten błąd. Co mam zrobić, żeby zmienną "new_value" podzielić przez 64 i nadpisać ją w tej samej zmiennej?
#include <avr/io.h>
#include <util/delay.h>
#include "HD44780.h"
#define F_CPU 1000000UL
#define VREF_DIVIDED 25
uint16_t adc_value;
uint16_t voltage_value;
int16_t cz_d, cz_u;
int16_t temp;
int16_t real_decimal;
int16_t real_fraction;
char decimal_buffer[33];
char fraction_buffer[33];
int16_t averange_value(int16_t actual_value);
void ADC_init(void);
int main(void)
{
// LCD init
LCD_Initalize();
// ADC init
ADC_init();
while (1)
{
ADCSRA |= (1 << ADSC);
while(ADCSRA & (1 << ADSC));
adc_value = ADC;
voltage_value = adc_value * VREF_DIVIDED;
temp = voltage_value / 10 - 500;
cz_d = temp/10;
cz_u = temp%10;
real_decimal = averange_value(cz_d);
real_fraction = averange_value(cz_u);
itoa(real_decimal, decimal_buffer, 10);
itoa(real_fraction, fraction_buffer, 10);
LCD_Clear();
LCD_GoTo(2, 0);
LCD_WriteText("Temperatura:");
LCD_GoTo(6, 1);
LCD_WriteText(decimal_buffer);
LCD_WriteText(".");
LCD_WriteText(fraction_buffer);
_delay_ms(500);
}
}
void ADC_init(void)
{
DDRA &= ~(1 << PA5) | ~(1 << PA6) | ~(1 << PA4);
ADMUX |= (1 << REFS1) | (1 << REFS0); // Vref = 2.56V
ADMUX |= (1 << MUX0) | (1 << MUX2); // Pomiar na ADC5
ADCSRA |= (1 << ADEN) | (1 << ADPS0) | (1 << ADPS1); // Włączenie ADC i preskaler = 64
}
int16_t averange_value(int16_t actual_value)
{
static uint8_t count = 0;
int16_t new_value = 0;
int16_t numbers[64];
numbers[count] += actual_value;
count++;
if(count == 64)
{
count = 0;
for(int i = 0; i<63; i++)
{
new_value += count[i];
}
new_value /= 64;
return new_value;
}
}