Vis indlæg

Denne sektion tillader dig at se alle indlæg oprettet af dette medlem. Bemærk at du kun kan se indlæg der er oprettet i områder du i øjeblikket har adgang til.


Emner - Danni-Hansen

Sider: 1 2 [3] 4 5 ... 8
31
Artikler / Kommunikation imellem Raspberry PI og Arduino (Via USB) - Guide
« Dato: September 29, 2014, 10:17:58 »
Hey DEF'er.

Syntes lige jeg ville vise hvordan jeg fik et arduino board til at fortælle Linux at der var output.

I mit setup brugte jeg flg:
1 Windows maskine med usb porte
1 arduino nano board + afstands sensor (Udskift gerne sensor med andre sensore)
1 Raspberry PI board

Jeg lagde ud med at samle arduino udstyret, satte den til min windows maskine, hvor efter upload og hele koden virkede ordenligt, så satte jeg arduino boardet til Raspberry PI.

Jeg skulle installere en enkelt ting på RPI, men, det var lige til.

Installerede flg:
Kode:
sudo apt-get install cu

Også sluttede af med:
Kode:
sudo cu -l /dev/ttyUSB0 -s 9600

Og benyttede mig af flg. Arduino kode:
Kode:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  sensorValue=(6762/(sensorValue-9))-4; //Konventering til CM
  // print out the value you read:
  Serial.println(sensorValue);
  
  delay(1000);
}

---
Det skal dog siges, at jeg benyttede mig at et gammelt setup, så ved faktisk ikke om jeg har fået pillet ved nogle ting i RPI'en, som påvirker resultatet. Jeg undersøger dog gerne snarest muligheden for at et frisk setup kan selvsamme ting.

32
Off Topic / Watt til temperatur
« Dato: August 29, 2014, 19:53:15 »
Hej 'DEF'.

Spørgsmål fra flere krybdyrs holdere er hvordan vi konventere watt til temperatur, eller hvad vi kan gøre for at beregne en max temperatur udfra fx. Watt mv.

Mvh. Danni.

33
Arduino & Lign. / RC bil med nRF24l1 ping/pong problemer
« Dato: August 23, 2014, 13:51:40 »
Hey.

Jeg har et problem med at sende de nederstående F,B,A,S signaler fra min ene nRF24l01 til den anden.

Modtageren har denne kode, og jeg har fået slettet 'sende koden'
Kode:
/*
 Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 version 2 as published by the Free Software Foundation.
 */

/**
 * Example for Getting Started with nRF24L01+ radios. 
 *
 * This is an example of how to use the RF24 class.  Write this sketch to two 
 * different nodes.  Put one of the nodes into 'transmit' mode by connecting 
 * with the serial monitor and sending a 'T'.  The ping node sends the current 
 * time to the pong node, which responds by sending the value back.  The ping 
 * node can then see how long the whole cycle took.
 */

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Hardware configuration
//

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 

RF24 radio(9,10);

//
// Topology
//

// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

//
// Role management
//
// Set up role.  This sketch uses the same software for all the nodes
// in this system.  Doing so greatly simplifies testing.  
//

// The various roles supported by this sketch
typedef enum { role_ping_out = 1, role_pong_back } role_e;

// The debug-friendly names of those roles
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};

// The role of the current running sketch
role_e role = role_pong_back;

int right01 = 4;
int right02 = 5;
int left01 = 6;
int left02 = 7;



void setup(void)
{
  pinMode(right01, OUTPUT);
  pinMode(right02, OUTPUT);
  pinMode(left01, OUTPUT);
  pinMode(left02, OUTPUT);
  //
  // Print preamble
  //

  Serial.begin(57600);
  printf_begin();
  printf("\n\rRF24/examples/GettingStarted/\n\r");
  printf("ROLE: %s\n\r",role_friendly_name[role]);
  printf("*** PRESS 'T' to begin transmitting to the other node\n\r");

  //
  // Setup and configure rf radio
  //

  radio.begin();

  // optionally, increase the delay between retries & # of retries
  radio.setRetries(15,15);

  // optionally, reduce the payload size.  seems to
  // improve reliability
  //radio.setPayloadSize(8);

  //
  // Open pipes to other nodes for communication
  //

  // This simple sketch opens two pipes for these two nodes to communicate
  // back and forth.
  // Open 'our' pipe for writing
  // Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading)

  //if ( role == role_ping_out )
  {
    //radio.openWritingPipe(pipes[0]);
    radio.openReadingPipe(1,pipes[1]);
  }
  //else
  {
    //radio.openWritingPipe(pipes[1]);
    //radio.openReadingPipe(1,pipes[0]);
  }

  //
  // Start listening
  //

  radio.startListening();

  //
  // Dump the configuration of the rf unit for debugging
  //

  radio.printDetails();
}

void loop(void)
{
  //
  // Ping out role.  Repeatedly send the current time
  //

  if (role == role_ping_out)
  {
    // First, stop listening so we can talk.
    radio.stopListening();

    // Take the time, and send it.  This will block until complete
    unsigned long time = millis();
    printf("Now sending %lu...",time);
    bool ok = radio.write( &time, sizeof(unsigned long) );
    
    if (ok)
      printf("ok...");
    else
      printf("failed.\n\r");

    // Now, continue listening
    radio.startListening();

    // Wait here until we get a response, or timeout (250ms)
    unsigned long started_waiting_at = millis();
    bool timeout = false;
    while ( ! radio.available() && ! timeout )
      if (millis() - started_waiting_at > 200 )
        timeout = true;

    // Describe the results
    if ( timeout )
    {
      printf("Failed, response timed out.\n\r");
    }
    else
    {
      // Grab the response, compare, and send to debugging spew
      unsigned long got_time;
      radio.read( &got_time, sizeof(unsigned long) );

      // Spew it
      printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time);
    }

    // Try again 1s later
    delay(1000);
  }

  //
  // Pong back role.  Receive each packet, dump it out, and send it back
  //

  if ( role == role_pong_back )
  {
    /*
    // if there is data ready
    if ( radio.available() )
    {
      // Dump the payloads until we've gotten everything
      unsigned long got_time;
      bool done = false;
      while (!done)
      {
        // Fetch the payload, and see if this was the last one.
        done = radio.read( &got_time, sizeof(unsigned long) );

        // Spew it
        printf("Got payload %lu...",got_time);

	// Delay just a little bit to let the other unit
	// make the transition to receiver
	delay(20);
      }

      // First, stop listening so we can talk
      radio.stopListening();

      // Send the final one back.
      radio.write( &got_time, sizeof(unsigned long) );
      printf("Sent response.\n\r");

      // Now, resume listening so we catch the next packets.
      radio.startListening();
    }
    */
  }

  //
  // Change roles
  //

  if ( Serial.available() )
  {
    /*
    int analoger = analogRead(1);
    int fremad = 4800/(analoger - 20);
    
    int analogen = analogRead(2);
    int tilbage = 4800/(analogen - 20);
    */
    char c = toupper(Serial.read());
    
    
    
    
    //F = fremad
    if ( c == 'F' && role == role_pong_back )
    {
       forwards();
    }

    //F = fremad
    if ( c == 'B' && role == role_pong_back )
    {
       backwards();
    }
    
    //F = fremad
    if ( c == 'A' && role == role_pong_back )
    {
       around();
    }


    //F = fremad
    if ( c == 'S' && role == role_pong_back )
    {
       stopper();
    }

    /*
    if ( c == 'T' && role == role_pong_back )
    {
      printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r");

      // Become the primary transmitter (ping out)
      role = role_ping_out;
      radio.openWritingPipe(pipes[0]);
      radio.openReadingPipe(1,pipes[1]);
    }
    else if ( c == 'R' && role == role_ping_out )
    {
      printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r");
      
      // Become the primary receiver (pong back)
      role = role_pong_back;
      radio.openWritingPipe(pipes[1]);
      radio.openReadingPipe(1,pipes[0]);
    }
    */
  }
}
// vim:cin:ai:sts=2 sw=2 ft=cpp


void forwards(){
  digitalWrite(right02, LOW);
  digitalWrite(right01, HIGH);
  digitalWrite(left02, LOW);
  digitalWrite(left01, HIGH);  
}

void backwards(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, HIGH);
  digitalWrite(left01, LOW);
  digitalWrite(left02, HIGH);
}

void around(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, HIGH);
  digitalWrite(left02, LOW);
  digitalWrite(left01, HIGH);
  
}

void stopper(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, LOW);
  digitalWrite(left02, LOW);
  digitalWrite(left01, LOW);
}

Nogen der kan hjælpe?

34
Off Topic / Opstart af privat hold - Arduino Kendskab og programmering
« Dato: August 08, 2014, 15:28:36 »
Hej venner, bekendte og de resterende DEF'er :)

Jeg har en tanke om at jeg gerne vil lave et Arduino hold efterhånden.
Dog er jeg ikke sååå erfarren i C/C++ / arduino IDE som jeg gerne ville være, så tanken var at finde en underviser der kunne hjælpe til.

Idé'en er at vi er 2 undervisere, en der kan forklare lidt om elektronikken, og en der kan forklare om Programmeringen, holdet består måske af 4 til max 8 'elever'.

Jeg vil gerne stille elektronik til rådighed for et lille symbolsk 'låne beløb', (er man alt for uansvarlig til at rode med det, fortrækker jeg et depositum oven i, da elektronik ikke altid er lige billigt, tilbage betaling er ikke et problem så længe man ikke brænder noget af)

Tanken køre også på, hvor i landet det eventuelt skulle være,
Og at man skulle have sin egen bærbar/barebone eller letvægts/strømbesparende pc med, så vi kan måle efter alle i landet.
Afsat tid ville måske være en enkelt eller 2 dage, også at vi måske bestiller noget fornuftigt spiseligt, overnatning kan jeg ikke stå for dog, der må i nok snakke med hinanden, familie eller venner i har i området.

Sådan rent praktisk skulle det nok være en by hvor toget går direkte til, så vi kan afhente folk på den station og følge dem til 'undervisningen'

Er der nogen der ude med forslag? Idé'er? Andre sjove tanker?

PT har jeg til brugen 4 Arduino Nano (v3.0), 1 Arduino UNO R3 og 2 arduino Mega 2560 R3
Og nogle forskellige shields, sensore, masser af modstande, og transistore, moduler osv.

Sidste tanke er at lave nogle artikler, en længere vejledning/E-Bog om hvordan man bruger elektronik, og programmer, hvad man skal være opmærksom på, også sidst og ikke mindst at man bliver koblet op til dette forum hvor man kan stille øvrige spørgsmål, samt eventuelt en live chat på fx. Tinychat.com eller lign.

Fortæl hvad i tænker :)

35
Arduino & Lign. / ATTiny85 som I2C bus?
« Dato: Juli 16, 2014, 19:05:26 »
Hej DEF.dk ;P

I en af mine projekter, har jeg fundet en løsning som måske kan gavne min videre udvikling, dog vil jeg helst gerne holde lidt af udviklingen tilbage indtil projektet er færdigt.

Jeg har ledt efter en SDA/SCL kommunikator, og tænker på at bruge ATTiny85 til det, også skal jeg udover at bruge SDA og SCL bruge 2 Digitale pins, en til input og en til output.

Nogen der har et diagram til hvordan jeg får løst det problem?

Tanken er at jeg kan konnekte fx. 10 styk ATTiny85 som I2C bus, via SDA og SCL også kommunikere på Arduino Mega 2560 via dens SDA og SCL..

Nogen forslag til kredsløb setup?


Hvad jeg kan se her:
http://dexterindustries.com/howto/wp-content/uploads/2011/05/Attiny-Master.gif

Så er pin 1 reset, pin 2 og 3 kan bruges inden til AnalogRead eller Digital I/0 hvor pin 4 er GND, pin 5 er SDA og pin 6 ved jeg ikke hvad skal bruges til, og pin 7 SCL hvor pin 8 er 5v?

Kan jeg nøjes med at bruge pin 5 og pin 7 som I2C communication, pin 8 til 5v samt bruge pin 2 og pin 3 til digitalRead og digitalWrite?

På forhånd tak :)

36
Køb og Salg / LM2596 DC til DC
« Dato: Juni 30, 2014, 14:07:28 »
Hej.

Har sådan en 2 moduler her (Samme på alle 3 billeder)
https://drive.google.com/folderview?id=0B4l4hrdSBUAfeTAxb01SRWpkZHM&usp=drive_web&tid=0B4l4hrdSBUAfMEZKNHppQm05V1k

Pris pr modul:
60 kr + porto eller afhentning.

Info:
Modulet skal have DC input på min 4.5v og max 40v og kan give en output på ca min:1.5 til max:35-37v
Der sidder  en justerings skrue til at skrue op og ned for Volten.
Displayet fortæller hvor mange volt den spytter ud, (fx. 12.5v, 5.2v eller hvad du nu justere den til)

Ingen tilbehør, kun modulet.
Det modul på billedet er det jeg sælger, ikke noget jeg får hjem eller lign.

37
R/C & Modeltog / DC motor og strøm generering?
« Dato: Juni 29, 2014, 15:31:36 »
Hej alle sammen.

Jeg sidder med en DC motor og tænker om jeg kan generer strøm fra den, og forsøgte så at køre den rundt med en anden motor der fik fuld knald på (2 ens motor).

Gav dog ingen resultater, ville have målt det med mit voltmeter, men har glemt at slukke det også, så måtte tage en variabel regulator med display på for at se hvad den kunne give den.

Havde ingen held, så spørgsmålet er, kan denne motor overhovedet generer strøm?

https://www.modmypi.com/image/cache/data/motors/130-dc-motor-800x800.JPG

38
Programmering / C / C++ programmering af Arduino Libs
« Dato: Juni 23, 2014, 14:18:01 »
Hej DEF Udv's.

Jeg sidder og er lidt træt af at syntes det er klodset at programmere i arduino, også kommer spørgsmålet om jeg ikke 'bare' kan lave nogle C  / C++ koder i windows som kan compiles direkte ned i Arduino.
Jeg ved det kan lade sig gøre, kan simplenhen ikke huske hvordan.

Har 2 setup's:
Ubuntu og Windows 8.1
Kan benytte begge, selvom jeg faktisk fortrækker Ubuntu til projektet.

Mit største problem er dog at jeg er blevet meget dårlig til C / C++ sproget, da jeg hovedsaligt har gået og programmeret PHP det sidste lange stykke tid. Så hvis der er nogen der har et hint til hvor jeg kan lære at programmere C familien til arduino, ville jeg være glad :)

Tak.
PS. Har 3 slags boards:
2x Arduino Nano
1x Arduino UNO
2x Arduino Mega 2560
Alle af Version R3

39
Arduino & Lign. / Arduino Nano og I2C display module
« Dato: Juni 18, 2014, 01:24:17 »
Hej folkens.

Sidder med et display ( http://www.dfrobot.com/wiki/index.php/I2C/TWI_LCD1602_Module_%28SKU:_TOY0046%29 ) som bliver ved med at blinke, det blinker sjovt nok hvert 5sek.

Jeg bruger Arduino Nano til displayet, men, det burde da ikke gøre en forskel?
Tilkoblet 3 DS20B18 (Den del virker fint).

Spørgsmålet er, hvad problemet kan være? Den blinker som sagt hver 5 sek, og det er hver gang koden 'opfriskes' eller rettere sagt, det er der delay(5000) ender.

Skal jeg hen og have et nyt display? Har jeg brændt noget af?

Jeg bruger SDA og SCL på arduino nano, og det er sat rigtigt op iflg. Nettet, dog bruger jeg pin A4 og A5 og ikke de 'normale' pins.

40
Køb og Salg / Gratis PCB -komponenter
« Dato: April 22, 2014, 14:06:38 »
Tom

41
Dit Projekt / Designspark PCB 5.0
« Dato: April 14, 2014, 09:06:29 »
Hej alle.

Sidder med Designspark PCB 5.0 og prøver at få løst en mindre opgave.

Jeg har tilføjet et komponent, ATmega2560
Jeg kan se at på det komponent har alle 100 ben et navn, dvs. henvisning til hvad de skal bruges til, fx. er ben 11 GND.

Så jeg tænkte på om der ikke var en måde man kunne lave så alle ben på ATmega chippen kunne routes til den tilhørende pin/komponent/ eller lign..?
Så hvis jeg oprettede en digital pin på boardet, så ville den når jeg trykker Auto Route, selv finde det net den høre til :)

Forslag?
Idé'er?
Løsning måske? :)

Tak.

42
Arduino & Lign. / Sharp GP2Y0A21YK Prox sensor
« Dato: April 12, 2014, 18:32:34 »
Dav.

Efter et par dages byggeri mv, har det lykkes mig at bygge en dejlig fin 4 hjulet robot som skal reagere på 2 Sharp GP2Y0A21YK
En bag til og en for til

Er dog i tvivl om hvordan jeg får den til at spytte ud at den er for tæt på så den skal vende om eller dreje.

Jeg har brugt flg elektronik komponenter:
1 styk arduino mega 2560
2 styk H bridges, 1 koblet til hver side af robotten.
og 2 styk Sharp GP2Y0A21YK

Og koden ser sådan her ud:
Kode:
int sensorpin = 0;                 // analog pin used to connect the sharp sensor
int val = 0;                 // variable to store the values from sensor(initially zero)

int sensorpinback = 1;                 // analog pin used to connect the sharp sensor
int valback = 0;                 // variable to store the values from sensor(initially zero)


const int right01 =  7;
const int right02 = 8;
const int left01 =  4;
const int left02 = 2;

void setup() {
  pinMode(right01, OUTPUT);      
  pinMode(right02, OUTPUT);
  pinMode(left01, OUTPUT);
  pinMode(left02, OUTPUT);
}

void loop(){

    val = analogRead(sensorpin);       // reads the value of the sharp sensor
    int funken = 4800/(val - 20);

    valback = analogRead(sensorpinback);
    int backen = 4800/(valback - 20);

  if(funken > 0 && backen > 0){

    if(funken >= 35){
     forwards();
    } else {
     backwards();
     if(backen <= 10){
      around();
     }
    }
  } else {
   stopper();
  }
  
  delay(1000);
}

void forwards(){
  digitalWrite(right02, LOW);
  digitalWrite(right01, HIGH);
  digitalWrite(left02, LOW);
  digitalWrite(left01, HIGH);  
}

void backwards(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, HIGH);
  digitalWrite(left01, LOW);
  digitalWrite(left02, HIGH);
}

void around(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, HIGH);
  digitalWrite(left02, LOW);
  digitalWrite(left01, HIGH);
  
}

void stopper(){
  digitalWrite(right01, LOW);
  digitalWrite(right02, LOW);
  digitalWrite(left02, LOW);
  digitalWrite(left01, LOW);
}

Forslag modtages til at den kan klare sig selv lidt.


---
Senere vil jeg bygge den ud med en lade station så den kan lade op af sig selv på et tidspunkt.
Og når tid er, så skal den i en kravlegård hos de gamle, hvor den skal 'lære' at klare sig på et ujævnt område, og alt skal logges via mit raspberry board.

Vil også have en retnings sensor og meget mere, så den har en idé  om hvor den er i forhold til når den skal vende om og tilbage.. Et lille rumprojekt.

43
Arduino & Lign. / atmega328 quad mux (32 outputs) m FTDI og LLC
« Dato: April 07, 2014, 10:22:38 »
Hej Folkens.

Jeg har fået taget mig sammen og lavet en Arduino UNO Klon, med forbedringer.

Det har ikke fået navn endnu, og håber det virker, og hvis det virker, så skulle det gerne kunne flg:
LLC = Logic Level Converter = Raspberry PI Connection
FTDI connector = Til usb RS-232 5v kabel, til at programmer enheden.
QUAD MUX = 32 Digitale Multiplexer udgange (Til fx. Leds)

Alt sammen på en simpel atmega328p chip som normalt set kun har 10-13 Digitale udagnge, og 5 analog, og boardet er under 10x10cm..

Hvad siger folket?

PS: Kan se jeg har oprettet den i den forkerte kategori.. Sorry. Ingen problem danni. Den flytter jeg.

44
Hej.

Står med overstående MCU (Arduino mega 2560) et Ethernet Shield der passer i, også en DHT11 temperatur og Fugtigheds sensor, og skal have modificeret koden dertil. Jeg er blevet elendig til at kode Arduino har jeg fundet ud af, kan godt noget af selve stilen, men, har af en underlig grund fået besvær med at sætte mig ind i existerende kode til nye enheder til MCU'en...

Jeg fandt denne kode:

Kode:
#include <Ethernet.h>
#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 140 };
byte server[] = { 192, 168, 1, 105 }; // RaspberryPI

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /?str="+ temperatur +":"+ fugt +" HTTP/1.0"); //Sender variabel temperatur og fugt til GET-Variabel str (str = string)
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Det skal jo gøres rigtigt, lave koden så den bruger DHT libraryet til at sende temp og fugtighed til mit Raspberry PI server.

Nogen der kan forklare mig eller vise mig den rigtige måde at lave koden på?
Jeg har modificeret koden lidt.

Tak.

45
Off Topic / SMD reflow ovn
« Dato: Marts 30, 2014, 23:57:53 »
Hej alle her inde.

Har set et par videoer omkring reflow ovne, og fandt ud af at jeg kunne anskaffe en ok billigt i mine øjne.

Spørgsmålet er dog om jeg umidelbart selv får nok brug for sådan en, eller om man skulle begynde at lave lidt SMD arbejde for folk?
Jeg laver ikke rigtigt noget til hverdag, og leder efter en solid hobby i de køligere og knabt så gode vejr dage.

Spørgsmålet er også, om folk her inde har brug for at få lavet noget?
Det så jo forfærteligt nemt ud i videoerne :)

Nogen der ved hvad det koster ved en proff at få lavet et print SMD klar?
Og kan man tillade sig at sige at man kun lodder SMD, og ikke THT?
Og hvad kan tillade sig at tage for sådan en omgang arbejde?

Jeg kan se at jeg skal benytte mig af en 1500 watt ovn, og ovnen er på 30x30cm inden i.
Hvis jeg skal placere fx. 250 komponenter på 30x30 board og det samlet tager 1½-2 timer at lave færdig.. Og de 20 minutter er i ovnen.. Så er det jo ikke så voldsomt dyrt?
Hvertfald strømmessigt.
ca: 2,5kr i timen for 1kW tror jeg det er jeg betaler, dvs. (2,5kr * 1,5kW) / 3 = 1,25 kr i strøm.
Også bruge noget tid på at justere system programmeringen (10-15 minutter), også resten på placering?

Forslag? Idé'er? Eller er det håbløst?

--
Tanken er at man kan levere print, en tynd stål plade (SMD stentsil tror jeg det hedder), også komponenterne, også betaler man for at få lavet projektet.

Sider: 1 2 [3] 4 5 ... 8