invalid conversion from 'int*' to 'int' [-fpermissive]

IDE gerelateerde berichten
Gebruikers-avatar
Berichten: 6
Geregistreerd: 04 Jun 2013, 21:41
Woonplaats: Hoeksche Waard

invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor drejansen » 21 Jun 2016, 09:37

goede dag,

ik heb wat code geschreven om 6 LEDjes de 'wave' te laten maken. (Arduino heeft 6 PWM kanalen)
hiervoor roep ik een subroutine aan, Arduino noemt dit een functie.
bij terugkeer naar het hoofdprogramma gaat het mis, met bovenstaande melding.
hieronder mijn code. met commentaar.
vermoedelijk een kleine fout, maar ik zie het niet. HELP!!
eeuwige dank valt u ten deel.

-=-=-=-=-=-
/*
knightrider -3-
6 ledjes op PWM die de 'wave' maken
*/
int ledjes[6] = {3, 5, 6, 9, 10, 11}; // de ledjes in een array
int helder[6]= {1, 1, 1, 1, 1, 1}; // elk ledje zijn eigen helderheid
int fade[6] = {1, 1, 1, 1, 1, 1}; // de faderichting van elk ledje
int timer = 10; // de brandtijd van elk ledje
int lednr = 0;

void setup(){
// alle pootjes in één keer tot uitgang bombarderen en hoog zetten
for (lednr=0;lednr<6;lednr++) {
pinMode(ledjes[lednr], OUTPUT), digitalWrite(ledjes[lednr], HIGH); // alle leds zijn uit.
}
}

void loop(){
for (lednr=0;lednr<6;lednr++) {
helder[lednr] = helder[lednr] + fade[lednr]*helderheid(lednr, helder[lednr]);
/* helderheid (PWM) groter/kleiner +/- functie subroutine

hierboven wordt de nieuwe waarde per LEDje aangepast, in de functie aanroep
gaat het fout.
de helderheid is het gewenste PWM signaal voor het LEDje lopend van 0 tot 255
als 255 of 0 wordt bereikt, wordt de richting omgekeerd door fade[lednr]
van polariteit te wisselen -1 wordt 1 of 1 wordt -1

helderheid(lednr, helder[lednr]) wordt aangeroepen
de meegegeven waarden zijn het nummer van de onderhande LED en de huidige helderheid.
*/
if((helder[lednr] == 0) || (helder[lednr] == 255)) { // if statement, || = or functie
fade[lednr] = -fade[lednr]; // waarde wordt tegengesteld, optellen wordt aftrekken.
}
analogWrite(ledjes[lednr] , helder[lednr]); // de waarde van de helderheid wordt weggeschreven
delay (timer);
}
}



/* subroutine helderheid bepalen
hieronder mijn probleem de functie helderheid met de twee opgegeven waarden
integer lednummer het onderhande LEDje A en de bijhorende helderheid B
*/
int helderheid(int A,int B){
A = (A+1)*10; // array loopt van 0...5, 360 graden/6 ledjes = hoek 60 gr
B = sin((6.1415 * B)/60); // de sinus van de bijhorende hoek
B = 63*((lednr+1)*(lednr+1)); // de gedtallen 6.1415 en 63 komen van internet.
return helder; // deze regel is fout,
// invalid conversion from 'int*' to 'int' [-fpermissive]
// wat moet ik hier mee? en hoe moet het dan wel??
}
-=-=-=-=-=-

groeten, Dré Jansen
 
 
Het leven is een gróót feest, maar je moet zelf de slingers ophangen!
 

Advertisement

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor Gij Kieken » 21 Jun 2016, 10:40

Helder heb je gedeclareerd als array en in de Return wil je hem gewoon terug geven.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor nicoverduin » 21 Jun 2016, 12:51

Ik had dre op het andere forum dit als als antwoord gegeven:

In jouw functie geef jij de variabele helder terug. Echter heb jij op globaal niveau helder gedefinieerd als een tabel. En als je verder niets specificeerd wordt dat vertaald door de compiler als &helder[0] of te wel het adres van de eerste int in de tabel helder. En dat is een pointer dus. En dat is dus int*. In jouw functie beschrijving echter zeg je dat deze functie een int terug geeft. Dus is er een fout ontstaan immers een pointer naar een int is iets anders als de feitelijke int zelf.

Je doet er goed aan (en zeker als je begint) om de parameters in lokale variabelen op te slaan als ook lokale variabelen te nemen voor de berekeningen.
Op het moment dat je met sin() en cos() etc gaat werken geven deze een float(0 terug. Als je dit omzet naar een int direct zou het zomaar kunnen zijn dat je berekeningen in het geheel niet meer kloppen.
Je doet er beter aan om beide parameters om te zetten naar een float en alle berekeningen uit te voeren in float en pas op het laatste momen om te zetten in een int. En die geef je dan terug.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 6
Geregistreerd: 04 Jun 2013, 21:41
Woonplaats: Hoeksche Waard

Re: invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor drejansen » 21 Jun 2016, 19:36

klopt, het antwoord heb ik verwerkt en het probleem is half opgelost
de werking is dat de ledjes keurig faden, maar niet zoals bedoeld.
de formule klopt niet,
lees en huiver...

int helderheid(float A,float B){
A = (A+1)*10; // array loopt van 0...5, 360 graden/6 ledjes = hoek 60 gr
B = sin((6.1415 * B)/60); // de sinus van de bijhorende hoek
B = 63*((lednr+1)*(lednr+1)); // de gedtallen 6.1415 en 63 komen van internet.
return B;

wat nu?

groeten, Dré
 
 
Het leven is een gróót feest, maar je moet zelf de slingers ophangen!
 

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor nicoverduin » 21 Jun 2016, 19:57

Er zijn mensen die een tabel gebruiken. Een alternatief is dit https://diarmuid.ie/blog/pwm-exponentia ... platforms/
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: invalid conversion from 'int*' to 'int' [-fpermissive]

Berichtdoor shooter » 22 Jun 2016, 00:21

geef de return een goede naam, en bedenk dat het radialen moeten zijn.
ofwel dat werkt met pi etc.
paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten