Pages: 1 2 [3]   Go Down
Author Topic: Het begin  (Read 8371 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik ben met de serie schakeling aan de gang gegaan. De serie is gelukt. Ik heb 5 rijen en 2 kolommen (dus 10 leds).
Deze kan ik nu allemaal apart aan/uit zetten d.m.v. de kolom en rij aan/uit te zetten.

Echter 1 probleem, het eerste ledje van de kolom die aan staat brand altijd.

Code die ik gebruik:
Code:
int colPins[] = {8,9}; //Columns
int rowPins[] = {1,2,3,4,5}; //Rows
int rowCount  = 5; //Size of the rows array
int colCount  = 2; //Size of the columns array
int joyX      = A0; //Pin for joystick X
int joyY      = A1; //Pin for joystick X
int curCol    = 0; //Current column that is turned on
int curRow    = 2; //Current row that is turned on
 
//Determ wich columns and rows to be on or off
boolean ledPostion()
{
 
  //Get the right value for x
  int x = joyMove(analogRead(joyX)); //return 0,1,2 (middle,left,right)
  int y = joyMove(analogRead(joyY)); //return 0,1,2 (middle,down,up)
 
  //Left/right current row
  if(x == 1) //left
  {
    curRow++;
  }
  else if(x == 2) //right
  {
    curRow--;
  }
 
  //Down/Up current column
  if(y == 1) //down
  {
    curCol++;
  }
  else if(y == 2) //up
  {
    curCol--;
  }
 
  //Set min and max
  curRow = constrain(curRow,0,(rowCount-1));
  curCol = constrain(curCol,0,(colCount-1));
 
  //Set everything off first
  for(int thisPin = 0; thisPin < rowCount; thisPin++)
  {
     digitalWrite(rowPins[thisPin], LOW);
  }
 
  for(int thisPin = 0; thisPin < colCount; thisPin++)
  {
     digitalWrite(colPins[thisPin], HIGH);
  }
 
  //digitalWrite(rowPins[0],HIGH);
  //int test = digitalRead(rowPins[0]);
  //if(test == 1) Serial.println("staat aan");
 
  //Put the right ones on
  digitalWrite(rowPins[curRow],HIGH); //On
  digitalWrite(colPins[curCol],LOW); //Remeber LOW = on for an column
 
  /*
  Serial.println(rowPins[curRow]);
  Serial.println(colPins[curCol]);
 
  Serial.println(x);
  Serial.println("-");
  delay(1000);
  */
 
  delay(250); 
}


//Function to determ left or right, up or down by X or Y
int joyMove(int axe)
{
  int result;
 
  //left
  //if(x >= 0 && x <= 400)
  if(axe == 0)
  {
    result = 1;
  }
  //else if(x >= 600)
  else if(axe == 1023)
  {
    result = 2;
  }
  else
  {
    result = 0;
  }
 
  return result;
}

void setup()

  //For printing values
  Serial.begin(9600);
 
  //Define rows
  for(int thisPin = 0; thisPin < rowCount; thisPin++)
  {
     pinMode(rowPins[thisPin], OUTPUT);
  }
 
  //Define columns
  for(int thisPin = 0; thisPin < colCount; thisPin++)
  {
     pinMode(colPins[thisPin], OUTPUT);
  }
 
  //Define joystick
  pinMode(joyX,INPUT);
  pinMode(joyY,INPUT);
}

void loop()
{
 
  digitalWrite(colPins[0],LOW);
  digitalWrite(colPins[1],HIGH);
  digitalWrite(rowPins[0],LOW);
  digitalWrite(rowPins[1],LOW);
  digitalWrite(rowPins[2],HIGH);
  digitalWrite(rowPins[3],LOW);
  digitalWrite(rowPins[4],LOW);
 
  //ledPostion();
}

Let op: Ik heb er code tussen staan om via een joystick van led over te springen. Echter staat in de loop deze code uit en zet ik daar rowPins[2] aan, zie ook dat rowPins[0] op low is gezet!

Foto (led 3 brand en led 1 brand, terwijl 1 niet is aangezet):



Ik heb de oplossing gevonden:
Als ik de eerste rij van PIN1 wijzig naar PIN6 werkt het. Als ik hem op PIN0 zet werkt het niet (blijft hij ook branden). Hoe kan dit? Waarom werkt het op PIN0 en PIN1 niet en op PIN6 wel? Er lijkt altijd stroom door PIN0 en PIN1 te gaan?

EDIT: naar even zoeken kwam ik op http://arduino.cc/it/Reference/Board terecht. Staat dus bij dat PIN0/1 niet gebruikt kan worden voor digitalwrite/read. Ook weer geleerd!

Andere vraag: Ik neem aan dat er via deze serie schakeling ook weerstanden bij de leds moeten. Echter begrijp ik even niet waar ik deze precies moet plaatsen.
« Last Edit: June 18, 2012, 04:32:58 pm by thabram » Logged

Pages: 1 2 [3]   Go Up
Jump to: