Loop probleem

algemene C code
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Loop probleem

Berichtdoor benvo » 28 Dec 2016, 12:38

Je hebt helemaal gelijk Nico! We gaan hiermee aan het werk! Overigens is daarmee het verloop nog niet verklaard dus dat moet ik wel uitvogelen. Een waarde die op mijn lcd op 100% zou moeten staan en s'middags al is verlopen naar zo'n 60% daar kunnen we niet mee werken...

Dank voor je reactie.

Groet,
Ben.

Advertisement

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

Re: Loop probleem

Berichtdoor nicoverduin » 28 Dec 2016, 12:41

Ik zou beginnen met het tracen van de integer waarde waar je mee begint. Mogelijk stort die sensor oid wel in elkaar door de tijd. Dus ga eerst maar eens meten (via de Serial (1x per seconde oid)) wat de waarde is. Dan weet je meer. Als de bron rot is is de uitkomst het zeker.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Loop probleem

Berichtdoor benvo » 28 Dec 2016, 15:52

@Nico. Je had dus volkomen gelijk van mijn redenering gebaseerd op foute gegevens. Dus ben ik, middels Serial, de waarden gaan printen. Daaruit blijkt dat deze, terwijl je kijkt(!), al verlopen. Als voorbeeld (gemeten om 12:45 uur, alle kanalen zouden op 100% (255) moeten staan:
channel 0
intensiveNow = 189 74%

channel 1
intensiveNow = 226 88%

channel 2
intensiveNow = 220 97%

Je ziet dan ook dat de lampen die later aangegaan zijn ook (nog) minder verloop hebben. Het probleem zit dus in alle kanalen in gelijke mate. Onder de kop "functies" zie ik eigenlijk niets dat fout zou zijn? Nu kun je eigenlijk niet terug "tracen" zoals je voorstelde omdat na de invoering, op het moment van meting dus 255, ook loopt via de library ChannelManager.h. Daar gebeurt veel wat ik nog niet echt lezen, in ieder geval, begrijpen kan. Graag zou ik ze allemaal eens laten zien; de gebruikte sketch én de ChannelManager. Wie weet komt daar iets uit?

cpp code
[code/*
* Name: LightController.ino
* Author: User "benjaf" at plantedtank.net forums
* URL: https://github.com/benjaf/LightController
* Updated by Dal Gibbard
* https://github.com/dalgibbard/LightController
* This example is set up for 2 channels with a maximum of 10 points.
* Anything that may require editing is labeled with �CHANGE�

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

// ----------------------- RTC Library -----------------------


#include <Wire.h>
#include "RTClib.h"
#include "ChannelManager.h"
#include<LCD.h>
#include<LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); //0x3F is hetI2C bus adres voor een ongemodificeerd Backpak


// ----------------------- Constanten -----------------------

const int MaxChannels = 3; // Maximaal te gebruiken kanaalnummers, indien nodig te wijzigen naar meer of minder
const int MaxPoints = 25; // Maximaal te gebruiken en in te voeren licht intensiteits punten, indie nodig te wijzigen in meer of minder

// RTC
RTC_DS3231 rtc;

// Time
DateTime CurrentTime;

// ----------------------- Variabelen -----------------------


// ----------------------- Licht -----------------------

// Invul wijze (Uur, Minuut, Intensiteit)
// De verschillen in intensiteit tussen de ingegeven punten zullen gradueel toenemen of afnemen.


Channel Channels[MaxChannels];
Point Points[MaxChannels][MaxPoints];


void InitializeChannels(int channels) {


// Channel 0:
int channelNo = 0; // Kanaal 0 wordt in gebruik genomen
int pin = 9; // Kanaal 0 gebruikt pin 9 voor de wit-rode balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]); // Initialiseerd kanaal en kiest de FadeMode
Channels[channelNo].AddPoint(8, 0, 0); // Voeg punt toe (Kunt ook decimale waarden gebruiken van 0 tot 1 als dat de voorkeur heeft)
Channels[channelNo].AddPoint(8, 30, 25);
Channels[channelNo].AddPoint(9, 0, 76);
Channels[channelNo].AddPoint(9 , 30, 255);
Channels[channelNo].AddPoint(18, 0, 76);
Channels[channelNo].AddPoint(20, 0, 25);
Channels[channelNo].AddPoint(21, 0, 10);
Channels[channelNo].AddPoint(23, 0, 0);




// Channel 1:In te voeren
channelNo = 1; // Kanaal 1 wordt in gebruik genomen
pin = 10; // Kanaal 1 gebruikt pin 10 voor de wit-blauwe balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);
Channels[channelNo].AddPoint(8, 0, 0);
Channels[channelNo].AddPoint(9, 30, 25);
Channels[channelNo].AddPoint(10, 0, 127);
Channels[channelNo].AddPoint(10, 30, 255);
Channels[channelNo].AddPoint(20, 30, 127);
Channels[channelNo].AddPoint(21, 30, 76);
Channels[channelNo].AddPoint(22, 0, 25);
Channels[channelNo].AddPoint(23, 0, 0);



// Channel 2:
channelNo = 2; // Kanaal 2 wordt in gebruik genomen
pin = 11; // Kanaal 2 gebruikt pin 11 voor de witte balk
Channels[channelNo] = Channel(pin, MaxPoints, fademode_linear, Points[channelNo]);
Channels[channelNo].AddPoint(10, 0, 0);
Channels[channelNo].AddPoint(10, 30, 127);
Channels[channelNo].AddPoint(11, 00, 255);
Channels[channelNo].AddPoint(17, 30, 127);
Channels[channelNo].AddPoint(18, 00, 0);



}

// ----------------------- Functies -----------------------
long lastUpdateTime = 0;

// Update licht intensiteit waarden

void UpdateLights(DateTime CurrentTime)
{
long now = Seconds(CurrentTime.hour(), CurrentTime.minute(), CurrentTime.second()); // Zet de huidige tijd naar seconden sinds middernacht
if(now != lastUpdateTime) // Geeft alleen een update als er een duidelijk waarneembaar verschil in tijd.
{
for(int channel = 0; channel < MaxChannels; channel++) // Voor elk kanaal
{
analogWrite(Channels[channel].GetPin(), Channels[channel].GetLightIntensityInt(now)); // Krijgt de geupdate licht intensiteit en schrijft de waarde naar de desbetreffende pin
// update wordt uitgevoerd wanneer de waarde ingelezen wordt



//Bereken het percentage output gebasserd op de huidige licht intensiteit.

{
int channel=0;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;

lcd.setCursor(2,1);
lcd.print(" "); //schoont de derde positie op regel 1

lcd.setCursor(0,1);
lcd.print((currentPercent),0); //Print het licht intensiteits percentage (niet nauwkeurig) afgerond van channel 0.
}

{
int channel=1;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;

lcd.setCursor(2,2);
lcd.print(" "); //schoont de derde positie op regel 2

lcd.setCursor(0,2);
lcd.print((currentPercent),0); //Print het licht intensiteits percentage (niet nauwkeurig) afgerond van channel 1.
}

{
int channel=2;
float intensityNow=Channels[channel].GetLightIntensityInt(now);
float maxIntensity=255;
float a=intensityNow/maxIntensity;
float currentPercent=a*100;

lcd.setCursor(2,3);
lcd.print(" "); //schoont de derde positie op regel 3

lcd.setCursor(0,3);
lcd.print((currentPercent),0); //Print het licht intensiteits percentage (niet nauwkeurig) afgerond van channel 2.

}
}
}
lastUpdateTime = now;
}


// Converteerd de uren:minuten naar seconden sinds middernacht

long Seconds(int hours, int minutes, int seconds) {
return ((long)hours * 60 * 60) + (minutes * 60) + seconds ;
}

// ----------------------- Setup -----------------------
void setup() {
//Activeer LCD module

lcd.begin (20,4); //voor een 20x4 LCD module
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH); //achtergrondverlichting LCD aan.

Serial.begin(9600);

delay(1000); // wacht to de Serial monitor geopend wordt.

if (! rtc.begin()) {
Serial.println("Kan de RTC niet vinden");
while (1);
}

if (rtc.lostPower()) {
Serial.println("RTC zonder stroom geweest, nu op tijd zetten!");
// De volgende regel zet de RTC op de datum en tijd toen de sketch was gecompileerd.
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Deze regel zet de RTC op een bepaalde datum en tijd, bijvoorbeeld:
// Januari 21e, 2014 op 3 uur na de middag zou je zo in moeten voeren:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
{
//De % tekens en de (led-)balknamen worden op de LCD scherm gezet.

lcd.setCursor(3,1);
lcd.print("%");
lcd.setCursor(3,2);
lcd.print("%");
lcd.setCursor(3,3);
lcd.print("%");
lcd.setCursor (5,1);
lcd.print("Wit-rode balk");
lcd.setCursor(5,2);
lcd.print("Wit-blauwe balk");
lcd.setCursor(5,3);
lcd.print("Witte balk");
}


// Initialiseer de kanaal schema's
InitializeChannels(MaxChannels);

// Clock
Wire.begin();
rtc.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Stelt de RTC tijd in op de sketch samenstelling, wordt gebruikt voor één run. De tijd wordt gereset op het moment dat een apparaat wordt gereset!

}
// ----------------------- Loop -----------------------


void loop() {
// Stelt in op de huidige tijd

CurrentTime = rtc.now();

//Print dagdatum, maand en jaar.

lcd.home(); //zet de cursor op de eerste kolom, op de eerste rij.
if (CurrentTime.day() <10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}

lcd.print(CurrentTime.day());
lcd.print('-');
if (CurrentTime.month()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(CurrentTime.month());
lcd.print('-');
lcd.print(CurrentTime.year());
lcd.print(" ");

//Print de tijd in uren, minuten en seconden
if (CurrentTime.hour()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(CurrentTime.hour());
lcd.print(':');
if (CurrentTime.minute()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(CurrentTime.minute());
lcd.print(':');
if (CurrentTime.second()<10)
{
lcd.print("0"); //zet een nul voor een enkel cijfer
}
lcd.print(CurrentTime.second());



// Update lights
UpdateLights(CurrentTime);





}][/code]



Nu de ChannelManager.h gegevens:

cpp code
[code#include "Arduino.h"
#include "ChannelManager.h"

// ---------------- Point ------------------------
Point::Point()
{
_minutes = 0;
_intensity = 0;
}

// Initialize Point with given values
Point::Point(byte h, byte m, float intensity)
{
_minutes = (60 * (int)h) + m;
if(intensity > 1)
{
_intensity = intensity / (float)255;
}
else
{
_intensity = intensity;
}
}

long Point::GetTimeSeconds()
{
return _minutes * 60;
}

byte Point::GetHours()
{
return (byte)(_minutes / 60);
}

byte Point::GetMinutes()
{
return (byte)(_minutes % 60);
}

float Point::GetIntensity()
{
return _intensity;
}

byte Point::GetIntensityInt()
{
return (byte)((float) 255 * _intensity);
}

byte Point::GetIntensityPercent()
{
return (byte)(100 * _intensity);
}

bool Point::IsValid()
{
return _minutes >= 0 && _minutes < 60 * 24 && _intensity >= 0 && _intensity <= 1;
}

bool Point::IsZero()
{
return _minutes == 0 && _intensity == 0;
}

void Point::PrintPoint()
{
Serial.print("Point: ");
Serial.print(GetHours());
Serial.print("-");
Serial.print(GetMinutes());
Serial.print("-");
Serial.print(GetIntensityPercent());
if(IsValid())
{
Serial.println(" VALID");
}
else
{
Serial.println(" NOT VALID");
}
}

// ------------------- Channel ---------------------------

Channel::Channel() {}

// Initialize channel w. no points
Channel::Channel(int pin, int maxLength, FadeMode fadeMode, Point* m)
{
_pin = pin;
_lightValue = 0;
_fadeMode = fadeMode;
_maxLength = maxLength;
_length = 0;
_currentPosition = 1;
_storage = m;
}

int Channel::GetPin()
{
return _pin;
}

// Add Point to first available position (wrapper function)
void Channel::AddPoint(int h, int m, float intensity)
{
Point p = Point(h, m, intensity);
if(_length == 0)
{
_previous = p;
_next = p;
_currentPosition = 1;
_length = 1;
}
else
{
_previous = p;
_currentPosition++;
_length++;
}
SetPoint(_currentPosition, p);
}

void Channel::SetPoint(int index, int h, int m, float intensity)
{
SetPoint(index, Point(h, m, intensity));
}

void Channel::SetPoint(int index, Point p)
{
_storage[index] = p;
}

void Channel::ClearPoint(int index)
{
SetPoint(index, Point());
}

Point Channel::GetPoint(int index)
{
return _storage[index];
}

void Channel::GoToCurrentPosition(long time)
{
if(_length <= 1) return;
while(true)
{
if (_previous.GetTimeSeconds() <= time && _next.GetTimeSeconds() > time)
{
// Between 'previous' point and 'next'
break;
}
else if (_previous.GetTimeSeconds() <= time && _next.GetTimeSeconds() < _previous.GetTimeSeconds())
{
// Between 'previous' point and 'next', currently before midnight and 'next' beeing after midnight
break;
}
else if (_previous.GetTimeSeconds() > time && _next.GetTimeSeconds() > time && _previous.GetTimeSeconds() > _next.GetTimeSeconds())
{
// Between 'previous' point and 'next', currently after midnight and 'previous' point being before midnight
break;
}
else
{
// Better luck next time
MoveForward();
}
}
}

void Channel::MoveForward()
{
int nextPosition = 1;
if(_currentPosition < _length - 1)
{
_currentPosition++;
nextPosition = _currentPosition + 1;
}
else if(_currentPosition == _length - 1)
{
_currentPosition++;
nextPosition = 1;
}
else if(_currentPosition == _length)
{
_currentPosition = 1;
nextPosition = _currentPosition + 1;
}
_previous = _storage[_currentPosition];
_next = _storage[nextPosition];
}

int Channel::GetLightIntensityInt(long time)
{
UpdateCurrentLightValue(time);
return _lightValue;
}

float Channel::CorrectForFadeMode(float intensity)
{
switch(_fadeMode)
{
case fademode_exponential:
return intensity * intensity;
default:
return intensity;
}
}

void Channel::UpdateData()
{
_length = 1;
Point _c;
Point _n;
for(_length; _length < _maxLength; _length++)
{
// End of channel has been reached if:
_c = _storage[_length];
//_c.PrintPoint();
if(!_c.IsValid() || _length == _maxLength)
{
// Current point is invalid (can only happen at the first one) or Max length of channel has been reached
return;
}
_n = _storage[_length + 1];
if(!_n.IsValid() || _n.GetTimeSeconds() < _c.GetTimeSeconds() || (_c.IsZero() && _n.IsZero()))
{
// Next point is invalid or earlier than current point (different kind of invalid)
return;
}
}
}

int Channel::GetLength()
{
return _length;
}

void Channel::UpdateCurrentLightValue(long time)
{
GoToCurrentPosition(time);
long timeDiff = 0;
long prevPointTime = _previous.GetTimeSeconds();
float prevPointIntensity = _previous.GetIntensity();
long nextPointTime = _next.GetTimeSeconds();
float nextPointIntensity = _next.GetIntensity();

if(prevPointTime > nextPointTime) // Midnight rollover
{
timeDiff = (nextPointTime + 24 * 60 * 60) - prevPointTime;
}
else
{
timeDiff = nextPointTime - prevPointTime;
}

long progress = 0;
if(time >= prevPointTime) // Currently before midnight
{
progress = time - prevPointTime;
}
else // Currently after midnight
{
progress = (time + 24 * 60 * 60) - prevPointTime;
}
float intensityDiff = nextPointIntensity - prevPointIntensity; // Difference in light intesity between points
float intensity = prevPointIntensity + (progress * (intensityDiff / timeDiff)); // Current intensity
_lightValue = 255 * CorrectForFadeMode(intensity); // Light value
}

void Channel::Reset()
{
_currentPosition = 1;
_previous = GetPoint(1);
_next = GetPoint(1);
}][/code]


en de laatste:

cpp code
Code: Alles selecteren
#include "Arduino.h"

// ----------------------- Fade Mode -----------------------
enum FadeMode
{
    fademode_linear,
    fademode_exponential
};

// ----------------------- Point -----------------------
class Point
{
public:
   Point();
   Point(byte h, byte m, float intensity);
   long GetTimeSeconds();
   byte GetHours();
   byte GetMinutes();
   float GetIntensity();
   byte GetIntensityPercent();
   byte GetIntensityInt();
   bool IsValid();
   bool IsZero();
   void PrintPoint();

private:
   long _minutes;
   float _intensity;
};

// Channel data type
class Channel
{
public:
   Channel();
   Channel(int pin, int maxLength, FadeMode fadeMode, Point* m);
   int GetPin();
   void AddPoint(int h, int m, float intensity);
   void SetPoint(int index, int h, int m, float intensity);
   void SetPoint(int index, Point p);
   void ClearPoint(int index);
   Point GetPoint(int index);
   void GoToCurrentPosition(long time);
   void MoveForward();
   int GetLightIntensityInt(long time);
   float CorrectForFadeMode(float intensity);
   void UpdateCurrentLightValue(long time);
   void UpdateData();
   int GetLength();
   void Reset();

private:
   int _pin;
   int _lightValue;
   FadeMode _fadeMode;
   int _currentPosition;
   int _length;
   int _maxLength;
   Point _previous;
   Point _next;
   Point* _storage;
};

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

Re: Loop probleem

Berichtdoor nicoverduin » 28 Dec 2016, 16:30

Er kan best een fout in die library zitten dat die omrekening tov middernacht niet helemaal lekker gaat. time als parameter is ook niet handig omdat dat volgens mij ook een standaard variabele is in de C taal.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Loop probleem

Berichtdoor benvo » 28 Dec 2016, 20:06

Hallo allemaal.

Nico, weer ben je er goed bij!

Na veel zoeken, het spijt me ik kan dit niet opgeven, komen we in de (library) ChannelManager cpp onder "void Channel::UpdateCurrentLightValue(long time) de volgende regels tegen:

else //Currently after midnight
{
progress = (time+24*60*60)-prevPointTime;
}

Daarbij komt een foutmelding;

ChannelManager.cpp:265:30:warning:integer overflow in expression [-Woverflow]
progress = (time+24*60*60)-prevPointTime;


In de seconden berekeningen na middernacht gaat er iets fout. Snappen jullie het? Ik niet! Hoe zou het wel goed werken?

Dank alvast voor jullie hulp, het zou toch moeten lukken, met al die kennis die hier is, om dit programma op een juiste manier draaiend te krijgen?

Groet,
Ben.

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

Re: Loop probleem

Berichtdoor shooter » 28 Dec 2016, 21:27

staan ze allemaal in long?
paul deelen
shooter@home.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Loop probleem

Berichtdoor benvo » 29 Dec 2016, 12:44

Hallo Paul,

onder "void Channel::GoToCurrentPosition(long time)" en onder "void Channel::UpdateCurrentLightValue(long time)" wordt time inderdaad als long aangegeven. Is time hier nu een locale variabele? Dit vraag ik ook omdat time, zoals Nico al eerder opmerkte een lastige naam is voor een variabele, niet wordt gedefiniëerd in het deel zelf waar zowel "progress" als "prevPointTime" wel als long worden aangegeven. Zou een fout kunnen zijn?

Overigens heb ik hierboven de complete library Channel.h afgedrukt. (Channel.cpp en arduino.h) Dit deed ik omdat het mij nog steeds niet mogelijk is om de juiste procent waarden in mijn sketch te krijgen. Meer en meer begin ik te vermoeden dat daar het probleem ligt. In de sketch zelf kan ik geen fouten vinden. Op advies van Nico heb ik alle waarden terug gezocht middels Serial. De waarden die ik krijg kloppen wel t.o.v. de sketch maar zijn niet juist en worden dientengevolge ook fout afgedrukt. Hoewel, nu ik het programma ontelbare keren heb bekeken en getracht te ontleden, meer en meer begrijp kom ik nog steeds kennis tekort om het probleem op te sporen. Maar dit moet toch mogelijk zijn?

Dank voor je reactie!

Groet,
Ben.

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

Re: Loop probleem

Berichtdoor nicoverduin » 29 Dec 2016, 13:16

Het is de enige manier... en je bent niet de eerste...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Loop probleem

Berichtdoor benvo » 29 Dec 2016, 15:52

Net als jij ben ik, Nico, ook een muziekliefhebber. (En van Fender gitaren en amps ;-)) Wanneer mensen iets willen weten en leren in de muziek moeten ze vooral veel zelf doen. Net als hier is dat inderdaad de manier. Soms als men vast zit geef ik een raad, "zoek het in die of die richting, probeer het zus of zo". Lukt het helemaal niet doe ik iets voor, geef een raad of een hint, maar ze doen het zelf! Zo ook hier. Ik heb nog nooit gevraagd om een Sketch, wel om raad. Nu ben ik eigenlijk uitgezocht, er is een probleem maar ik heb geen idee (meer) in welke richting het te zoeken. Houdt dat in dat ik stop? Nee, want dat is mijn eer te na. Hier WIL ik gewoon uitkomen. Soms is het fijn dat een goede raad er voor zorgt dat ik een richting vind én bijleer! Dat laatste, dat bijleren, ben ik, ook al ben ik de pensioen gerechtige leeftijd voorbij, nog steeds niet te beroerd voor!


Groet,
Ben.

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Loop probleem

Berichtdoor Dries » 29 Dec 2016, 16:22

Ben, dit heeft thans altijd goed gewerkt bij mij, ik kende toen ik dit programma vond, nog minder van het programmeren als nu, ik kan je helaas niet helpen omdat dit ver uit mijn bereik ligt, ik hoop dat je eruit komt want tot vandaag werkt dit programma perfect voor mijn aquarium. ik ben trouwens ook wild van Fenders en ben toen ooit begonnen met leren gitaar spelen maar het bleef bij wat basisakkoorden.....

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten