Go Down

### Topic: Het begin (Read 16658 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}; //Columnsint rowPins[] = {1,2,3,4,5}; //Rowsint rowCount  = 5; //Size of the rows arrayint colCount  = 2; //Size of the columns arrayint joyX      = A0; //Pin for joystick Xint joyY      = A1; //Pin for joystick Xint curCol    = 0; //Current column that is turned onint curRow    = 2; //Current row that is turned on  //Determ wich columns and rows to be on or offboolean 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 Yint 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