Attiny85 - analogRead dans une librarie

Bonjour à tous,

Sur Attiny85, je souhaite créer une librarie qui fera appel à la fonction analogRead.
Seulement, j’ai le message suivant :
C:\Users\Olivier\Documents\Arduino\libraries\myTinyAnalogRead\myTinyAnalogRead.cpp: In member function ‘int myAnalogRead::read(int)’:
C:\Users\Olivier\Documents\Arduino\libraries\myTinyAnalogRead\myTinyAnalogRead.cpp:10: error: ‘analogRead’ was not declared in this scope

Voici la code du programme principal:

#include "myTinyAnalogRead.h"

int main(){
  myAnalogRead zzz;
  int wKey = zzz.read(2);
}

Et le code de la librarie :

#ifndef ANALOGREAD_H
#define ANALOGREAD_H

class myAnalogRead{
public :
	myAnalogRead();
	int read(int);
};
#endif
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "myTinyAnalogRead.h"
 
myAnalogRead::myAnalogRead() {
}

int myAnalogRead::read(int pin) {
  return analogRead(pin);
}

J’ai déjà testé la fonction analogRead dans le programme principal et ça compile sans souci.

Ma configuration :
IDE 1.0.5

Vos idées sont les biens venues.

Olivier BERNARD

Bonsoir,

La fonction analogWrite se situe grosso modo dans 2 fichiers :

hardware/arduino/cores/arduino/Arduino.h
103:void analogWrite(uint8_t, int);

hardware/arduino/cores/arduino/wiring_analog.c
100:void analogWrite(uint8_t pin, int val)

Il te faut donc déclarer Arduino.h dans ta librairie. Mais comme je suppose que ton objectif est d’économiser des ressources systèmes en optimisant le code et les procédures, tu peux aussi remplacer la fonction analoRead() ou Write() par leur équivalent avr

Un exemple :

/*
ADC Read exemple on atmega328 channel 0
*/

#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>

uint16_t val = 0;

void setup()
{
  Serial.begin(9600);
  InitADC();
  delay(100);
}

void loop()
{
  val = (uint16_t)ReadADC(0);
  Serial.println(val);
  delay(1000);
}


void InitADC()
{
 // Select Vref=AVcc
 ADMUX |= (1<<REFS0);
 //set prescaller to 128 and enable ADC, 16000000/128=125kHz of ADC clock
 ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADEN);
 // initial reading
 ADCSRA |= (1<<ADSC); 
}

// reads ADC value from selected channel and returns as 16-bit value
uint16_t ReadADC(uint8_t ADCchannel)
{
 //select ADC channel with safety mask
 ADMUX = (ADMUX & 0xF0) | (ADCchannel & 0x0F);
 //single conversion mode
 ADCSRA |= (1<<ADSC);
 // wait until ADC conversion is complete
 while( ADCSRA & (1<<ADSC) );
 return ADC;
}

@+

Zoroastre.

Bonsoir,

Merci pour ta réponse. Je teste dès que possible.

A+
Olivier