Hur kommer man igång med arduino?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
orvar-e
EF Sponsor
Inlägg: 5973
Blev medlem: 9 mars 2007, 09:01:32
Ort: Borlänge

Re: Hur kommer man igång med arduino?

Inlägg av orvar-e »

Alla har olika sätt att lära, vissa tittar på en massa tutorials andra behöver kommunicera, personligen har jag en tendens att bli irriterad på tutorials. Och orkar inte bli idiot förklarad på EF så jag lär mig bäst när jag får try n error. Och i yttersta nödfall ställa en fråga på EF.

Till TS, kul att de börjat programmera, du kommer hitta massor av användningsområden du som innan inte hade en aning om att man behövde en µC för.
Kul är det iaf.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

:)
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Kod: Markera allt

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
}

void loop()
{
  // set the cursor to (0,0):
  lcd.setCursor(0, 0);

  ...
}
Varför gör man så?
Varför skapas inte lcd i funktionen "setup"?
Är det för att lcd ska vara global?
Kan man skriva vad som helst för instruktioner
utanför "setup" och utanför (före/efter?) "loop"?
nifelheim
Den första
Inlägg: 2406
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Hur kommer man igång med arduino?

Inlägg av nifelheim »

Om du tittade i mappen som jag hänvisade till tidigare hittar du main.cpp,
det är "huvudprogrammet" som körs när du gjort en "sketch".

Som du ser anropas setup() först och sedan körs loop() i "evighet".

setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}


Så kodrader du har skrivit någon annanstans,
som inte körs av dom två funktionerna kommer inte att köras alls. :)


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() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
	init();

	initVariant();

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

main.cpp
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Okej, men det förklarar ju inte
varför man gör vissa saker före "setup".

Jag har fått ett problem också:
Programmet startas inte när jag sätter i
usb-kabeln för att driva Arduinon.
Windows xp talar om med ljudeffekter
när jag kopplar in och ur den.
Utvecklingsmiljön säger "Board at COM3 is not available".
Det hjälper inte att trycka på nollställning.
Vad är det som är fel?

Tillägg:
Ibland fungerar det efter ett tag.

Tillägg 2:
Det verkar fungera om man har
serie-monitorn avstängd, kopplar in Arduinon
och kör igång serie-monitorn.
Ska det vara så?
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Hur kommer man igång med arduino?

Inlägg av Lennart Aspenryd »

Under Kontrollpanelen Enhetshanteraren.
Där ser du direkt när du sätter i och ur USB kabeln vilken com port den får.
Kolla också att du har markerat ditt board rätt1
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

I enhetshanteraren blir den com3 varje gång,
men i utvecklingsmiljön finns den inte
förrän jag stänger av serie-monitorn och
kopplar in Arduinon.

Sen startas Arduinon när jag startar serie-monitorn.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Det blir likadant med Hyperterminal
som med serie-monitorn:
När jag lyfter på luren i Hyperterminal
så startas programmet i Arduinon
och börjar sända.

Programmet fortsätter att sända när jag lägger på,
och verkar starta om när jag lyfter på luren igen.

Kan det ha något med flödesreglering att göra?
Men då skulle väl programmet stanna när man
lägger på luren?

Det är samma med serie-monitorn:
När jag stänger av den så fortsätter Arduinon
att sända, och verkar startas om när jag
startar serie-monitorn igen.

När serie-monitorn har varit avstängd en stund
så stannar Arduinon. Antagligen på grund av
flödesregleringen och att någon buffert blir full.
Senast redigerad av BJ 2 november 2017, 15:59:28, redigerad totalt 2 gånger.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Hur kommer man igång med arduino?

Inlägg av arvidb »

BJ skrev:Varför gör man så?
Varför skapas inte lcd i funktionen "setup"?
Är det för att lcd ska vara global?
Kan man skriva vad som helst för instruktioner
utanför "setup" och utanför (före/efter?) "loop"?
Som du är inne på är det för att variabeln "lcd" behöver vara global som den deklareras innan/utanför funktionerna i filen. Deklarationen måste göras innan variabeln används (alltså högre upp i filen). Hade du deklarerat den i setup() så hade den hamnat på stacken och gått ur "scope"/destruerats så fort setup() returnerar, och du hade fått ett kompilationsfel om du försökte använda den i loop() också.

(Det finns även en annan lite mer subtil effekt av att initialisera lcd så som görs, nämligen att lcd-objektet blir statiskt allokerat, men det är nog lite överkurs för tillfället.)

Nej, du kan inte skriva vad för instruktioner som helst utanför funktionerna. I princip bara deklarera och initialisera globala variabler.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Tack för ett bra svar. :tumupp:
Användarvisningsbild
SeniorLemuren
Inlägg: 8071
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hur kommer man igång med arduino?

Inlägg av SeniorLemuren »

BJ skrev:När jag lyfter på luren i Hyperterminal
så startas programmet i Arduinon
och börjar sända.
Programmet fortsätter att sända när jag lägger på,
och verkar starta om när jag lyfter på luren igen.
Lista gärna vilket program du laddat ner tlli Arduinon som börjar sända till terminalen?
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Jag har ändrat lite på DigitalReadSerial:

Kod: Markera allt

/*
  DigitalReadSerial

  Reads a digital input on pin 2, prints the result to the Serial Monitor

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/DigitalReadSerial
*/

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  // Serial.println(buttonState);
  Serial.println("+----------------------------+");
  Serial.println("| (Text)                     |");
  Serial.println("+----------------------------+");
  delay(250);        // delay in between reads for stability
}
Jag använder 9600 bps, och standard-formatet 8n1:
https://www.arduino.cc/en/Serial/Begin
Mr Andersson
Inlägg: 1404
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur kommer man igång med arduino?

Inlägg av Mr Andersson »

Använd ett terminalprogram som inte pillar på DTR-linan om du inte vill att arduinon ska starta om.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hur kommer man igång med arduino?

Inlägg av BJ »

Okej, var man hittar sådana är inte lätt att veta.
I så fall gör nog utvecklings-miljön det också,
och den måste jag ju nästan ha igång
när jag programmerar... :humm:
Mr Andersson
Inlägg: 1404
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur kommer man igång med arduino?

Inlägg av Mr Andersson »

Varför måste du ha monitorn öppen för att skriva kod?
Skriv svar