Go Down

### Topic: Het begin (Read 16410 times)previous topic - next topic

#### thabram

#30
##### Jun 18, 2012, 11:13 pmLast Edit: Jun 18, 2012, 11:32 pm by thabram Reason: 1
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: [Select]
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);
//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.

Go Up

Please enter a valid email to subscribe