Sida 2 av 3

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 30 oktober 2015, 13:31:15
av Icecap
I Pascal väljer man om en array börjar med 1 eller 0! Det är inte fastställd någon default efter vad jag vet.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 30 oktober 2015, 13:41:33
av sodjan
Pascal kan starta och sluta på valfria nummer, även negativa.
Även enumerated typer är OK.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 30 oktober 2015, 23:26:15
av orvar-e
Jag är tacksam för alla svar, mycket lärorikt för mig.

Om vi tar ett exempel som alla arduino programmerare känner till, det första man får lära sig. Få en lysdiod att blinka.
Hur skulle samma funktion se ut med ren C programmering. Är den för enkel så kan vi ta en annan kod som är lätt att ladda upp och testa.
Kan man köra ren C kod i en arduino?
Lättare för mig att förstå om jag kan relatera till nått bekant.

Kod: Markera allt

int led = 13;

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 00:09:08
av sodjan
Vad är "ren C programmering"?
Svaret är att det finns inget sådant. Man använder
nästan alltid olika inbyggda funktioner och bibliotek.
I ditt fall funktionerna pinMode(), digitalWrite() och delay().

> Kan man köra ren C kod i en arduino?

Det *är* C.
Tillsammans med en del bibliotek som då blir "Arduino".

> Lättare för mig att förstå om jag kan relatera till nått bekant.

Om du rent generellt vill lära dig grunderna i C, så är det kanske
bättre att inte göra det i Arduino miljön. Någon enkel C miljö
till en PC t.ex. Skriv några konsol-applikationer, då går det att
ligga på en relativt grundläggande C nivå.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 00:12:48
av TomasL
Eller MPLAb och PIC.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 00:14:56
av nifelheim
Någon annan har skrivit huvudprogrammet och en massa lib som du använder typ digitalWrite()


Om du kollar main.cpp nedan ser du att det först anropar setup()
och lite senare fastnar i en evighets for-sats som anropar loop().

I ditt "Arduinoprogram" skriver du "bara" dom två funktionerna.



Kolla i mappen motsv: "arduino-1.6.5-r5-windows\arduino-1.6.5-r5\hardware\arduino\avr\cores\arduino"


filen: wiring_digital.c
innehåller bland annat definitionen av digitalWrite()
skriven i C

Kod: Markera allt

/*
  main.cpp - Main loop for Arduino sketches
  Copyright (c) 2005-2013 Arduino Team.  All right reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#include <Arduino.h>

// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

int main(void)
{
	init();

	initVariant();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}


Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 00:29:01
av Borre
Ja du kan skriva C direkt i Arduino, du är inte låst till Arduinos "funktioner".

Bara som ett exempel jag googlade fram lite snabbt, om det ger så mycket är en annan sak men det visar hur det kan göras på annat sätt.
Koden går att köra direkt i Arduino och motsvarar ditt exempel som blinkar lysdioden på (Arduino)pin 13.

Kod: Markera allt

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

int main (void)
{
  DDRB |= _BV(DDB5); // set pin 5 of PORTB for output

  while(1) {
    PORTB |= _BV(PORTB5); // set pin 5 high to turn led on
    _delay_ms(1000);

    PORTB &= ~_BV(PORTB5); // set pin 5 low to turn led off 
    _delay_ms(1000);
  }
}

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 10:50:52
av orvar-e
sodjan skrev: Om du rent generellt vill lära dig grunderna i C, så är det kanske
bättre att inte göra det i Arduino miljön. Någon enkel C miljö
till en PC t.ex. Skriv några konsol-applikationer, då går det att
ligga på en relativt grundläggande C nivå.
Kan jag använda arduino hårdvara till ex MPLAb? Menar så klart µC korten som det finns en uppsjö av varianter av, men som alla är lödfria och har allt som behövs för att fungera.
Och dessutom väldigt billiga på ebay.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 10:52:56
av orvar-e
Borre skrev:Ja du kan skriva C direkt i Arduino, du är inte låst till Arduinos "funktioner".

Bara som ett exempel jag googlade fram lite snabbt, om det ger så mycket är en annan sak men det visar hur det kan göras på annat sätt.
Koden går att köra direkt i Arduino och motsvarar ditt exempel som blinkar lysdioden på (Arduino)pin 13.
Okej, slipper fippla med ännu ett hjälpmedel.

Det körde ihop sig på en gång för mig, laddade ner kodsnutten och det blinkar som det ska, men beskriv för mig varför Pin13 blinkar, hur gör jag om jag vill använda Pin12 ex
Är det #include <Arduino.h> som styr det? Som nifelheim skriver i sitt inlägg.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 12:40:51
av sodjan
> laddade ner kodsnutten

Vilken "kodsnutt"???

> men beskriv för mig varför Pin13 blinkar,

Om det är den första så är det "int led = 13;".
Om det är den andra så är det DDB5 och PORTB5.

> hur gör jag om jag vill använda Pin12 ex

Om det är den första så ändrar du till "int led = 12;".
Om det är den andra så får du kolla vilken AVR pinne som
motsvarar Arduino Pin12, kanske att det är pinne nr 4 i
PORTB, och då blir det är det DDB4 och PORTB4 istället.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 13:28:12
av orvar-e
Ursäkt otydligheten i mitt inlägg innan. Jag avsåg koden som Borre delade med sig av i sitt inlägg.

Jag kan inte se att det stod "int" nånting i Borres kod. Men jag känner väl till att man kan (finns fler sätt) skriva int xx = 13; om man avser arduino port 13.

Sodjan ....... Om det är den andra så får du kolla vilken AVR pinne som
motsvarar Arduino Pin12,

Svar på min fundering
Arduino digital pins 0-7 goes to MCU port D.
Arduino digital pins 8-13 goes to MCU port B.
Arduino analog input pins 0-5 goes to MCU port C.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 15:31:23
av sodjan
Jag vet att det finns sidor som visar mappningen mellan
"AVR-pinnar" och "Arduino-pinnar", men jag orkade inte
leta efter den förrut, om man håller på med Arduino så
bör man känna till dom redan.

https://www.arduino.cc/en/Hacking/PinMapping

Sen så är det väl lite olika mappningar beroende på vilken
modell av Arduino man har, så man får kolla rätt sida...

> Jag kan inte se att det stod "int" nånting i Borres kod.

Nej, Borres exempel var "den andra" så där saknas det, så klart.

> ...int xx = 13; om man avser arduino port 13.

Enbart det i sig säger inget om någon port. Det sätter bara en
variabel till ett värde. Däremot senare när man använder samma
variabel i t.ex. PinMode() så får det betydelse. Men det går så klart
rent tekniskt lika bra att skriva pinMode(13, OUTPUT); direkt också.
Men det anses inte vara lika "snyggt".

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 15:32:59
av Mr Andersson
> [saker angående pin mappings] (till orvar-e. sodjan hann skriva ett inlägg just innan mig)

Notera att det bara stämmer för vissa arduinoversioner. T.ex. är arduino-pin 13 på port B7 på mega2560-versionen istället för på B5.
Det är absolut inget fel att direktaccessa portarna och skippa digitalRead/digitalWrite-funktionerna om du vill lära dig på lite lägre nivå närmare hårdvaran, men då är det viktigt att du förstår att koden inte kommer fungera på alla arduinos.

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 15:34:53
av sodjan
Jaha !? Det var kanske därför jag skrev:

> Sen så är det väl lite olika mappningar beroende på vilken
> modell av Arduino man har, så man får kolla rätt sida...

Eller misstolkar jag dig?

Re: Vad betyder [] tecknet i programmet, arduino.

Postat: 31 oktober 2015, 15:38:13
av Mr Andersson
> Eller misstolkar jag dig?
Inte alls. Jag ber om ursäkt att det var väldigt otydligt att jag svarade på orvar-e's inlägg. Du hann posta ett nytt inlägg medans jag skrev mitt.