Arduino Code in C/C++

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb Arduino code in 'Arduino taaltje' en ik wil daar C/C++ code van maken (soort van)
Dit lijkt mij niet heel moeilijk, aangezien je volgens mij van void loop() gewoon int main() kan maken, met een oneindige loop erin. Helaas lukt dit niet!
Het is erg simpele code. Kan iemand mij helpen, om hier C/C++ code van te maken?
Alvast bedankt! ;)

Master code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <Wire.h>
#include <avr/io.h>
#include <util/delay.h>

int x = 0;

void setup()
{
  Wire.begin(); 
  DDRB = 0xFE;
}

void loop()
{
  
  while(1) {
    if(PINB == 1) {
      _delay_ms(20);
      if(PINB == 0) {
        Wire.beginTransmission(4); 
        Wire.send("DOE ET!!");    
        Wire.send(x);         
        Wire.endTransmission(); 
        x++;       
      }
    }
  }
}


Slave code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <Wire.h>
#include <avr/io.h>
#include <util/delay.h>

void setup()
{
  Wire.begin(4);            
  Wire.onReceive(receiveEvent); 
  Serial.begin(9600);        
  DDRB = 0x20;
}

void loop()
{
  delay(100);
}


void receiveEvent(int howMany)
{
   while(Wire.available() > 1) 
   {
    char c = Wire.receive(); 
    Serial.print(c);       
   }
   Serial.print("\n");
  
  int x = Wire.receive();    
  if(x % 2 == 0) {
    PORTB = 0x20;
  } else {
    PORTB = 0x00;
  }
}


P.S Wist even niet meer die mooie opmaak.. Zodra iemand dit mijn vertelt, verander ik het meteen!

Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 08-09 13:10

IWriteCode

Less = more

[code ] tags gebruiken volgens mij :-) Maar dit is volgens mij a> het verkeerde forum... en b> is het niet echt duidelijk wat je nu wil doen... wat het doel is, etc

Less = more


Acties:
  • 0 Henk 'm!

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 11-08 04:52

Sprite_tm

Semi-Chinees

Code doe je door het tussen de [code]...[/code]-tags te plaatsen.

Verder hebben wij Geen Idee wat er precies fout aan je code is: ik denk niet dat er hier veel compilers rondlopen. Wij zijn ook je slaafje niet, dus we gaan het niet voor je omzetten. Als je ons nou eens vertelt waar je precies vast komt te zitten, kunnen we misschien vertellen waar het probleem zit.

En of ik nou in het koninklijk meervoud of voor heel GoT spreek mag je zelf uitvogelen. En tags zijn hier overbodig: die heb ik dus even uit je topictitel gesloopt.

[ Voor 7% gewijzigd door Sprite_tm op 04-10-2010 21:54 ]

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar hebben jullie natuurlijk gelijk in ;)
Het is zo, dat dit niet C/C++ code is, maar Arduino code.
Misschien weet iemand hoe ik dit kan omzetten naar C/C++ code.
void setup() en void loop() is niet echt C/C++; dat kan ook in een int main(). Maar hierdoor werkt de I2C niet meer bij mij. Hij verzend dan niks meer naar de slave! Misschien weet iemand hoe ik dit kan veranderen ;)

Acties:
  • 0 Henk 'm!

  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 11-09 12:39

DaWaN

'r you wicked ??

Ten eerste:
Wat voor comipiler / IDE gebruik je ?
Geeft de compiler waarschuwingen / errors ?
Wat werkt er wel en wat werkt er niet ?

Ten tweede:
Je roept in jouw main de de setup functie niet eens op
Ik weet niet of setup.wire(); voldoende is om de ISR op de slave juist te initialiseren

If you do not change direction, you may end up where you are heading


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Arduino IDE 0020 gebruik ik ;)

Acties:
  • 0 Henk 'm!

  • NiteSpeed
  • Registratie: Juli 2003
  • Laatst online: 21-07 18:35
Er bestaat niet zoiets als Arduino code. Wat je nu eigenlijk doet is in een framework (eigenlijk de Processing environment) JAVA code compilen. Je vraag is dus hoe je JAVA code kan omzetten in C/C++?

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Arduino-code is gewoon C. Er zitten wat dingen omheen om het makkelijker te maken voor beginnende programmeurs (een eigen versie van Processing inderdaad). Voor zover ik weet is int main(..) ongeveer als volgt geimplementeerd;

C++:
1
2
3
4
5
6
int main() {
   setup();
   while(true) {
      loop();
   }
}


Met andere woorden, gebruik setup() alsof het main() is en vergeet loop, en dan ben je er? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MisterData schreef op maandag 04 oktober 2010 @ 22:25:
Arduino-code is gewoon C. Er zitten wat dingen omheen om het makkelijker te maken voor beginnende programmeurs (een eigen versie van Processing inderdaad). Voor zover ik weet is int main(..) ongeveer als volgt geimplementeerd;

C++:
1
2
3
4
5
6
int main() {
   setup();
   while(true) {
      loop();
   }
}


Met andere woorden, gebruik setup() alsof het main() is en vergeet loop, en dan ben je er? :)
Dat dacht ik dus ook, maar dan doet hij ineens niks meer.
Ik stopte dat overal een Serial.println tussen, en hij bleek te stoppen bij Wire.endTransmission!
Terwijl de code verder precies hetzelfde is :O

Acties:
  • 0 Henk 'm!

Verwijderd

Of je gebruikt het "arduino taaltje" of je gebruikt C. Er is geen "soort van" middenweg. Je kunt niet van je loop() een main() maken want daarmee help je de arduino code om zeep, tenzij je in je main *exact* hetzelfde doet als arduino in zijn main doet - maar waarom zou je dan een eigen main maken?

Het is heel goed mogelijk een C programma voor je arduino te maken maar dan moet 'ie volledig in C. Dan kan je dus geen gebruik maken van de Arduino libraries.

Acties:
  • 0 Henk 'm!

  • gibraltar
  • Registratie: Augustus 2004
  • Laatst online: 09-09 10:19
NiteSpeed schreef op maandag 04 oktober 2010 @ 22:21:
Er bestaat niet zoiets als Arduino code. Wat je nu eigenlijk doet is in een framework (eigenlijk de Processing environment) JAVA code compilen. Je vraag is dus hoe je JAVA code kan omzetten in C/C++?
Arduino code is C++ in combinatie met de Wiring libraries. Dat is onder andere zichtbaar als je even kijkt naar de source code van de IDE. Daar zul je ook zien dat het uiteindelijk niets anders is dan GCC en avr-libc. Nergens wordt in dat proces Java gebruikt. De IDE zelf is er wel in geschreven overigens.

Acties:
  • 0 Henk 'm!

  • mad_max234
  • Registratie: September 2003
  • Laatst online: 07-02 11:09

mad_max234

AMD Athlon II M320

C en C++ kan je gewoon gebruiken, veel header files zijn puur C of zelfs C++. Wat hiet fout gaat denk ik is dat je niet in de Arduino IDE zomaar c kan gebruiken die gaat c dan nog eens proberen om te zetten naar C, die verwacht een wiring gebaseerde taal om te compiler naar c.

Leesvoer:
http://www.wikihow.com/Write-Arduino-Software-in-C

Edit/
De IDE zelf is in java geschreven of in iedere geval gedeeltelijk, maar dat heeft verder niks met de controller te maken.

[ Voor 22% gewijzigd door mad_max234 op 05-10-2010 12:46 ]

-Andere hobby- -


Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

mad_max234 schreef op dinsdag 05 oktober 2010 @ 12:33:
... Wat hiet fout gaat denk ik is dat je niet in de Arduino IDE zomaar c kan gebruiken die gaat c dan nog eens proberen om te zetten naar C, die verwacht een wiring gebaseerde taal om te compiler naar c...
Dit is geen enkel probleem. De Arduino/Wiring preprocessor laat blokken C(++) en assembly code volledig intact. In het verleden heb ik voor studentenprojecten de nodige C en en ASM code via een simpele copy&paste "omgezet" naar Arduino. Het gaat alleen mis wanneer je zelf naar registers schrijft die ook door arduino worden gebruikt middels de wprogram.h include.

Wanneer je Arduino code om wilt zetten naar C is dit eigenlijk zeer eenvoudig. Na het compileren van de code worden de geconverteerde Cpp bestanden opgeslagen in de applet folder, inclusief de benodigde object files, waarvan je de headers en broncode in de arduino program folder kunt vinden.
Deze code kun je al direct compileren in Atmel Studio + WinAvr.
Om de code op te schonen kun je stap voor stap de arduino files vervangen door de c bestanden uit de arduino program folder. Waarschijnlijk zul je zien dat je veel van deze files kunt verwijderen omdat je de functionaliteit helemaal niet, of slechts gedeeltelijk, nodig hebt voor je programma. (Arduino initialiseert nogal veel registers en doet nogal wat extra parametercontroles waardoor je programma groot en traag wordt).
Pagina: 1