Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Ha simpel 
En de lijst word korter (lijn 160 tot 164):
#if ARDUINO >= 100
virtual size_t write(uint8_t);
#else
virtual void write(uint8_t);
#endifLijn 48 van print.h: virtual size_t write(uint8_t) = 0;
[Bericht gewijzigd door Damic op (95%)]
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Op 5 oktober 2014 23:07:23 schreef blurp:
Hernoem je source file eens naar .cpp.
Zei ik ook al, werkt dus aanzienlijk beter.
De gcc compiler is normaal ook de C++ compiler, alleen MOET de extensie cpp zijn. (Voor de puristen: gcc is een wrapper front-end die de echte c of c++ compiler aanroept)
Wat die laatste error betreft: Voeg bovenaan in je code (voor alle #include files)
#define ARDUINO 100
Of zo en kijk eens of alle errors weg zijn.
Alleen de vraag even wat die variable nu echt is geweest (arduino versie of zo denk ik).
Je kunt ook een makefile var definieren en aan de compiler meegeven:
-DARDUINO=100
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Mag ik a kussen
veel te lang niet meer geprogrammeerd code bij elkaar gesmeten 
Nvm de lijst word ineens langer
krijg hem niet gecompileerd.
[Bericht gewijzigd door Damic op (28%)]
Moeten de arduino libs niet tussen "" geplaatst worden?
voorbeeldje:
#include "arduino.h"
Nu ben ik niet een wonder in programmeren hoor. Begin nog maar net.
Maar de paden moeten toch altijd met \ ipv /
Voorbeeldje:
c:\lokatie\ed
niet
c:\lokatie/ed
[Bericht gewijzigd door Dazzled op (47%)]
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Speelt geen rol, vind de bestanden toch 
wat betreft de <> en de "" heb ik dat op gezocht en heeft te maken of je het bestand de eerste keer include of de 2de keer, om het simpel te zeggen.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Misschien moet die ARDUINO define een andere waarde krijgen.
In de originele arduino tooling uitzoeken wat het zou moeten zijn.
Er worden waarschijnlijk conditioneel dingen wel of niet meegenomen.
Dus er zit niks anders op dan per error uit te zoeken wat het probleem precies is. En laat je niet misleiden door alle foutmeldingen, soms zit de fout ergens anders en zijn een bak errors "collateral damage" van een fout ergens anders.
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Hahaa ik denk dat de compilerlinker iets serieus verkeerd doet.
Als ik voor avr-g++ volgende command line mee geeft -ansi of -std=c++98 dan krijg ik een hele lijst met reference error's (undefined reference to ...) maar gaat ie wel door
Execute: avr-g++ -I"C:\arduino\libraries" -I"C:\Arduino\hardware\arduino\cores\arduino" -I"D:\tech tekeningen\elektronica\oledgps" -I"D:\tech tekeningen\elektronica\oledgps" -mmcu=at90can64 -DF_CPU=8000000UL -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -Wall -gdwarf-2 -MD -MP -MT oledgps.o -c -ansi "D:/tech tekeningen/elektronica/oledgps/oledgps.cpp"
Execute: avr-ar rcs liboledgps.a
Execute: avr-gcc -mmcu=at90can64 -Wl,-Map=oledgps.map -Wl,--gc-sections -Os liboledgps.a oledgps.o -L"C:\arduino\libraries" -L"C:\Arduino\hardware\arduino\cores\arduino" -o oledgps.elf
####Error: ELF file not created at D:\tech tekeningen\elektronica\oledgps\output\oledgps.elf
Deleting: oledgps.o liboledgps.a oledgps.d liboledgps.a
Deleted: 'oledgps.o', 'liboledgps.a', 'oledgps.d',
Build Failed with 0 errors
De avr-g++ command line opties heb ik hier gevonden, want als ik standaard -std=gnu99 mee geef of iets dat hem niet kent dan geeft ie daar een fout op met als melding "Undefined reference to main"
Dus nu is de vraag wat gaat er verkeerd ow wacht het is de avr-gcc dat in de fout gaat bij het aanmaken van het elf bestand, moet dat trouwens ook niet die avr-g++ zijn?
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Ik dacht dat de arduino geen main() functie gebruikt voor je programma maar iets anders.
Het probleem is dat de linker verwacht dat er een main is.
Bij arduino zit er ook een main in de arduino code zelf verstopt maar die zie je niet.
Rename je hoofd functie loop zodat je zoiets krijgt:
void main(void) {
/* Je Code komt hier */
}
Op 7 oktober 2014 21:48:34 schreef Damic:
Hahaa ik denk dat de compiler iets serieus verkeerd doet.
Ik denk het niet, ligt in 99,99% van de gevallen aan de gebruiker of foute code.
[Bericht gewijzigd door henri62 op (14%)]
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Als ik loop gebruik zoals in arduino ide dan geeft ie een error dat ie geen main kan vinden
de code ziet er zo uit:
// oledgps.cpp created for project oledgps on 10/07/2014 08:53:29
/* http://gathering.tweakers.net/forum/list_messages/1596164 */
#define ARDUINO 100
#include "Arduino.h"
#include <GOFi2cOLED/GOFi2cOLED.h>
#include <TinyGPSPlus-0.94b/TinyGPS++.h>
TinyGPSPlus gps;
GOFi2cOLED GOFoled;
int Snelheid=0;
int Satelliet = 0;
int Tijd = 0;
int GMTOffset = 2;
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (Serial.available())
gps.encode(Serial.read());
} while (millis() - start < ms);
}
static void printTime(TinyGPSTime &t)
{
char sz[32];
int hour = t.hour() + GMTOffset;
if (hour > 23)
{hour = hour - 24;}
sprintf(sz, "%02d:%02d:%02d ", hour, t.minute(), t.second());
GOFoled.print(sz);
}
void setup()
{
//default address is 0x3D.
GOFoled.init(0x3C);
// init done
GOFoled.display(); // show splashscreen
delay(5000);
GOFoled.clearDisplay();
Serial.begin(9600);
}
int main(void)
{
setup();
Satelliet = (gps.satellites.value());
GOFoled.setTextSize(1);
GOFoled.setTextColor(WHITE);
GOFoled.setCursor(0,0);
GOFoled.clearArea(0,0,127,8);
GOFoled.print("Sat : ");
GOFoled.print(Satelliet);
GOFoled.println();
GOFoled.setTextSize(1);
GOFoled.clearArea(0,8,127,8);
GOFoled.print("Tijd : ");
printTime(gps.time);
Snelheid = (gps.speed.kmph());
GOFoled.clearArea(0,30,127,34);
GOFoled.setCursor(0,30);
GOFoled.setTextSize(5);
GOFoled.print(Snelheid);
GOFoled.setTextSize(1);
GOFoled.print("km/h");
GOFoled.display();
smartDelay(1000);
}Volgens mij is het echt de avr-gcc dat de 2de keer word aangeroepen, dat het avr-g++ moet zijn, dus in de plaats van:
Execute: avr-gcc -mmcu=at90can64 -Wl,-Map=oledgps.map -Wl,--gc-sections -Os liboledgps.a oledgps.o -L"C:\arduino\libraries" -L"C:\Arduino\hardware\arduino\cores\arduino" -o oledgps.elf
zou het
Execute: avr-g++ -mmcu=at90can64 -Wl,-Map=oledgps.map -Wl,--gc-sections -Os liboledgps.a oledgps.o -L"C:\arduino\libraries" -L"C:\Arduino\hardware\arduino\cores\arduino" -o oledgps.elf
en dat kan ik niet veranderen 
Op 8 oktober 2014 06:55:38 schreef Damic:
Volgens mij is het echt de avr-gcc dat de 2de keer word aangeroepen, dat het avr-g++ moet zijn
Die aanroep van avr-gcc is om te linken, want alle input-files zijn .a of .o.
Linken doe je met gecompileerde files, en dan is het verschil tussen C en C++ al niet meer zichtbaar.
en dat kan ik niet veranderen
En daarmee illustreer je een groot nadeel van IDE's. Alhoewel het in dit geval niet uitmaakt.
Wat verder terug:
Als ik voor avr-g++ volgende command line mee geeft -ansi of -std=c++98 dan krijg ik een hele lijst met reference error's (undefined reference to ...) maar gaat ie wel door
Fouten negeren is geen oplossing. Het is niet voor niets dat de meeste serieuze ontwikkelaars de optie '-Wall-Werror' aanzetten: Alle warnings als fouten zien.
De compiler klaagt dat ie referenties (naar classes of functies) niet kent. Dat betekend dat je iets niet meecompileert wat wel moet. Zoek dat op.
En begin bij de eerste fout.
Ohja, en zet eens een zip met alle sources online.
Edit: -Werror, niet (alleen) -Wall.
@hieronder: -wall is fout. '-w' onderdrukt alle warnings. Als je nu vind dat GCC een zeikprogramma is; '-Wpedantic' en gcc zeikt nog meer 
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
-Wall word meegegeven.*typoZal straks eens proberen alles te packen. en voila: http://www.mazda-club.be/downloads/oledgps.zip [500kB]
Heb die -Wall en -Werror eens getest, resultaat veranderd niet. Lijst blijft even lang.
Bij -Wpedantic krijg ik Undefined reference to 'main', jaokroll
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Omdat het C++ is moet je alle classes met een "new <classnaam>(...)" instantiëren. In arduino hebben ze dat allemaal weggemoffeld in macro's en in de IDE en headerfiles (waarschijnlijk).
Leuk bedacht maar c++ leer je er helemaal niet mee. Voor de beginner is het wel handig.
Maar nu moet je dat allemaal zelf doen.
Bijvoorbeeld de class GOFoled:
Zet dit eens in je globale main functie:
In de main:
GOFoled = new GOFi2cOLED(); // Het maken van de "instantie" van die class.
Voor de rest van de code. (Niet getest maar zoiets moet het worden voor alle classes)
Ook de setup() functie is zo weggemoffeld, maar dat heb je zelf al ontdekt zie ik: door deze in je main aan te roepen.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Ik zag net dat mijn voorbeeld fout is, die global is al gedefinieerd blijkbaar als typedef.
Is nu aangepast hierboven.
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
mmmh volgens deze tutorial over classes en objects moet dat niet: http://www.tutorialspoint.com/cplusplus/cpp_classes_objects.htm
Ja die setup hou ik tegenwoordig zelf aan
is handig om van alles in te stoppen die je echt in het begin moet aanroepen.
Edit: ik zien juist van dat AVR studio 6 nog geïnstalleerd staat eens zien wat ie daar in doet.
@goof: eens koeken 
ik heb een tijdje terug zoiets geprobeerd voor de rpi vanuit een arduino source. https://github.com/gnulnulf/RF24
Heb je hier iets aan?
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Op 8 oktober 2014 22:07:38 schreef Damic:
mmmh volgens deze tutorial over classes en objects moet dat niet: http://www.tutorialspoint.com/cplusplus/cpp_classes_objects.htm
Oops: Das waar ook...te lang geleden C++ geprogrammeerd. Ik probeer C++ zo veel mogelijk te vermijden omdat ik het te messy vind en er een belangrijk aantal conceptuele blunders in zitten.
in de arduino.mk worden nog wat extra dingen toegevoegd. (ik denk deze: https://github.com/sudar/Arduino-Makefile ) Het is een arduino.mk om zonder arduino ide toch te kunnen compileren.
De main zit daar in.
( krijg het gevoel dat het best lang geleden is.)
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
@goof: blijkbaar heel lang geleden want je hebt de arduino ide nodig 
In ieder geval dit gevonden: http://stackoverflow.com/questions/12573816/what-is-an-undefined-refer… daar eens doorlezen.
edit: nog een gevonden met een oplossingen:
http://stackoverflow.com/questions/18549526/undefined-references-to-fu…
[Bericht gewijzigd door Damic op (26%)]
Ik heb TS zijn source even gepakt en geprobeerd te bouwen.
Omdat ik geen zin heb een IDE te installeren heb ik gewoon mijn standaard Makefile genomen, en alle bijna sources erin gezet.
oledgps.cpp heb ik als target genomen. main.cpp heb ik weggelaten.
Dat gaf deze foutmelding:
wiring_digital.c:(.text+0x6a): undefined reference to 'digital_pin_to_bit_mask_PGM'
"digital_pin_to_bit_mask_PGM" heb ik even gegoogled, en dat leert dat die normaal in pins_arduino.h gedefinieerd wordt. Wat verder zoeken leert dat de pins_arduino.h die TS had incompleet was. Dus even een goede gezocht, en voila:
Alles bouwt (met een paar warnings)...
Conclusie: TS heeft zijn IDE verkeerd ingesteld.
Makefile:
# Makefile
TARGET = oledgps
MCU=atmega328p
# put at end of mem in bootloader memory
SRC = twi.c WInterrupts.c wiring_analog.c wiring.c wiring_digital.c wiring_pulse.c wiring_shift.c
INCLUDE = .
CXXSRC = GOFi2cOLED.cpp TinyGPS++.cpp CDC.cpp HardwareSerial.cpp HID.cpp IPAddress.cpp new.cpp Print.cpp Stream.cpp Tone.cpp USBCore.cpp Wire.cpp WMath.cpp WString.cpp
F_CPU = 16000000
OBJCOPY = /usr/bin/avr-objcopy
OBJDUMP = /usr/bin/avr-objdump
CC = /usr/bin/avr-gcc
CXX = /usr/bin/avr-g++
SIZE = /usr/bin/avr-size
NM = /usr/bin/avr-nm
AR = /usr/bin/avr-ar
RM = /bin/rm -f
CXXFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=100 -Os -I$(INCLUDE)
CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) $(C_DEFINES) -O2 -I$(INCLUDE)
LDFLAGS = -lm
# all objects
OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
#default target
all: hex lss sym bin size
elf: $(TARGET).elf
hex: $(TARGET).ihex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
bin: $(TARGET).bin
#Display size
HEXSIZE = $(SIZE) --target=ihex $(TARGET).ihex
ELFSIZE = $(SIZE) $(TARGET).elf
size:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi
.SUFFIXES: .elf .ihex .eep .lss .sym .bin
# standard rules for building
.elf.ihex:
$(OBJCOPY) -j .text -j .data -j .buildstamp -O ihex $< $@
.elf.bin:
$(OBJCOPY) -j .text -j .data -j .buildstamp -O binary $< $@
.elf.eep:
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex $< $@
# Create extended listing file from ELF output file.
.elf.lss:
$(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file.
.elf.sym:
$(NM) -n $< > $@
# Link: create ELF output file from library.
$(TARGET).elf: $(TARGET).cpp common.a
$(CC) $(CFLAGS) -o $@ $(TARGET).cpp -L. common.a $(LDFLAGS)
$(RM) buildstamp.o
common.a: $(OBJ)
@for i in $(OBJ); do echo $(AR) rcs common.a $$i; $(AR) rcs common.a $$i; done
$(RM) $(OBJ)
# Compile: create object files from C++ source files.
.cpp.o:
$(CXX) -c $(CXXFLAGS) $< -o $@
# Compile: create object files from C source files.
.c.o:
$(CC) -c $(CFLAGS) $< -o $@
clean:
$(RM) $(TARGET).ihex $(TARGET).eep $(TARGET).elf \
$(TARGET).map $(TARGET).sym $(TARGET).lss common.a \
$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) \
$(TARGET).bin
.PHONY: all build elf hex eep lss sym program coff extcoff clean depend sizebefore sizeafter readfuse bin
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Ha dan heeft den installer van Arduino problemen, want ik had nog bestanden dat er niet waren. Eens de zip downloaden en die uitpakken in de arduino map.
Trouwens de 328p gebruik ik niet
zal nog wel wat moeten aanpassen voor de 90can
Voor een 90can zul je zeker moeten aanpassen, want je gebruikt allerlei arduino-code die ervan uit gaat dat er een mapping is van het arduino pinnummer ('12' in digitalWrite(12,1) bijvoorbeeld) naar een bit in een Atmega SFR.
Als je dat niet goed hebt zal het wel bouwen en programmeren, maar in de praktijk waarschijnlijk niets doen.
Of roken als je pech hebt 
Edit: @damic hieronder. Apart, want mijn v1.0.5. heeft pins_arduino.h wel. En zonder die file gaat zelfs de blink scetch niet werken....
[Bericht gewijzigd door blurp op (16%)]
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Ja maar eerst is het van: compileerd het en dan is het van werkt het 
Edit: wat ik helemaal niet grappig vind is dat pins_arduino.h zelf niet bij in het zip bestand (v1.0.6) zit was in de verkeerde map aan het zien
nu de beta versie aan het downloaden.
Damic
Ben Belg sowat :D :: plaatjes zijn meestal klikbaar
Juist een atmega8 aangesloten via usbasp, wil ik de source compileren in de laatste beta versie van arduino, krijg ik een mooie domme melding, dat er iets is fout gegaan maar voor de rest noegabollen.
Arduino: 1.5.8 (Windows 7), Board: "Arduino NG or older, ATmega8"
Using library Wire in folder: C:\Arduino\hardware\arduino\avr\libraries\Wire
Using library GOFi2cOLED in folder: C:\Arduino\libraries\GOFi2cOLED (legacy)
Using library TinyGPSPlus in folder: C:\Arduino\libraries\TinyGPSPlus (legacy)C:\Arduino/hardware/tools/avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega8 -DF_CPU=16000000L -DARDUINO=158 -DARDUINO_AVR_NG -DARDUINO_ARCH_AVR -IC:\Arduino\hardware\arduino\avr\cores\arduino -IC:\Arduino\hardware\arduino\avr\variants\standard -IC:\Arduino\hardware\arduino\avr\libraries\Wire -IC:\Arduino\libraries\GOFi2cOLED -IC:\Arduino\libraries\TinyGPSPlus C:\Users\damic\AppData\Local\Temp\build7059498318240703907.tmp\hooks.c -o C:\Users\damic\AppData\Local\Temp\build7059498318240703907.tmp\hooks.c.o
Error compiling.
handig he 
HA nu zien ik het, als ik het project opendoen krijg ik:
File name TinyGPS++.cpp is invalid: ignoredFile name TinyGPS++.h is invalid: ignored