Show Posts
Pages: [1]
1  International / Nederlands / Re: hulp nodig bij het maken van een scanner voor codes on: November 14, 2012, 03:18:44 am
Bedankt jantje,
had het al veranderd voor ik dit zag. toch heel erg bedankt voor de moeite om de codes door te lezen. ik heb het opgelost door een nieuwe waarde toe toevoegen de "pos" maar dan word ie pas bij gewerkt als de count 7 is die word gebruikt voor de if. Hij loopt nog steeds niet soepel dus ga daar nog even goed naar kijken als ik er niet uitkom laat ik wel weer iets horen.
2  International / Nederlands / hulp nodig bij het maken van een scanner voor codes on: November 13, 2012, 09:09:53 am
hallo, iedereen
ik ben bezig met een eigengemaakte bar code scanner. ik gebruik daarvoor de arduino mega2560. De bedoeling is dat de scanner de zwart witte blokjes leest met 2 line tracking sensoren.
eentje is om waar te nemen dat de blokjes veranderen en de andere is voor de daadwerkelijke code.
het zijn in het totaal acht blokjes, Zodat ik de output kan gebruiken als een binaire code en die om te zetten in decimalen.
om de codes automatisch te lezen heb ik een papiertje met 4 codes vastgemaakt aan een band van een robot.
die band laat ik rond draaien en zo komen de codes langs de sensor.
dit alles werkt nog.
nu heb ik er iets ingezet waardoor hij een opdracht krijgt om te stoppen op een willekeurig nummer. van 1 t/m 3 (het horen er 4 te zijn maar ik heb per ongeluk 2x de binaire code 1 uitgeprint)
dus er zijn 2 mogelijkheden voor 1. ook dat doet hij netjes, als hij gestopt heeft krijgt hij een nieuw willekeurig nummer ook die vind ie op en stopt hij netjes na alle 8 blokjes.
maar nu wil ik er nog iets aan toevoegen. Namelijk dat hij nog een willekeurig nummer binnekrijgt en die bepaalt na hoeveel blokjes hij stopt. bijvoorbeeld: dat hij de code die hij heeft binnen gekregen bijvoorbeeld 2.
daar zou hij dan naar toe moeten rijden en dan inplaats van te stoppen zijn vaart halveren en stoppen bij de volgende code bij een willekeurig aantal blokjes bijvoorbeeld 5.
dus dan zou hij moeten stoppen nadat hij 2 heeft gelezen en nog 5 blokjes. Ook heb ik hier een lcd aan vastgemaakt om een paar handige dingen te kunnen zien die zijn niet relevant voor mijn vraag en hoeft ook niet naar gekeken te worden. ik heb hier de code met uitleg:

Code:
///Arduino Sample Code
#include <Wire.h>                     //voor de lcd
#include <LiquidCrystal_I2C.h>
#include <Time.h>  
#define TIME_MSG_LEN  11
#define TIME_HEADER  'T'
#define TIME_REQUEST  7  
int oldval=1;                          //om te zien of de bovenste rij veranderd
int count=0;                           //veranderd elke keer als de onderste rij veranderd, elke keer als hij veranderd komt er 1 bij tot hij bij 8 komt dan word hij ge reset
int val = 1;                           //word gebruikt om binary om te zetten in decimal
int maxnum=8;                          //het maximale dat een count kan doen voor word gereset
int pos = 0;                           //word gebruikt om binary om te zetten in decimal
int scans = 0;                         //variable die veranderd elke keer dat hij een code leest
int E2 = 9;                            //voor het motortje
int M2 = 10;                           //voor het motortje
//int change = 0;                      
long randNumber;                       //een willekeurig nummer die word gebruikt voor de bovenste rij. van 1 t/m 3
long randCount;                        //een willekeurig nummer van 0-7 die word gebruikt voor de onderste rij
//int displayval = 0;                  

LiquidCrystal_I2C lcd(0x27,20,4);      //voor het lcd scherm


void setup()
{
  Serial.begin(9600);
  int ledPin = 8;                      // veranderd pin 8 naar 5v
  pinMode(ledPin, OUTPUT);  
  digitalWrite(ledPin, HIGH);
  int ledPin2 = 7;                     // veranderd pin 7 naar 5v
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, HIGH);
  int ledPin3 = 4;                     // veranderd pin 4 naar 5v
  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);        
  attachInterrupt(0, Poort, CHANGE);   //de attachinterrupt (0 = pin2 zit vast aan de onderste scanner) die word gebruikt om te zien of de onderste rij veranderd zodat ie weet of hij naar de bovenste rij moet kijken
  lcd.init();                          //om de lcd aan te houden
  lcd.backlight();                     //om het achtergrond liht van het lcd scherm aan te houden
  randNumber = random(1, 4);           //maakt een willekeurig nummer aan 1 t/m 3

  analogWrite (E2,75);                 //om de motor te laten draaien
  digitalWrite(M2,HIGH);

  lcd.setCursor(15,3);                 //voor het lcd scherm
  lcd.print(randNumber);          
  lcd.setCursor(13,2);
  lcd.print("Dest:");
  lcd.setCursor(0,0);
  lcd.print("Aantal Gescanned:");
  lcd.setCursor(0,1);
  lcd.print(scans);
  lcd.setCursor(0,2);
  lcd.print("Waarde: ");
}

void loop(){    

  if (count == 7)                      //als de count 7 heeft bereikt print hij iets op het lcd scherm
  {
    lcd.setCursor(0,3);  
    lcd.print(pos);
    lcd.print(" ");
    scans++;                           //een scan erbij als count 7 is
    lcd.setCursor(0,1);
    lcd.print(scans);                 //print scans
  }
  if (pos == randNumber)              // als de binary code is veranderd in decimal word die opgeslagen in pos als pos gelijk is aan het willekeurig nummer laat het de motor langzamer rijden
  {
    analogWrite (E2,110);
    lcd.setCursor(15,3);              //print scans en de bestemming
    lcd.print(randNumber);
    randCount = random(0, 7);
    if (randCount == count)          //als het willekeurige nummer voor randomcount gelijk is aan count
    {
      analogWrite (E2, 200);  
      randNumber = random(1, 4);
      delay(3000);
      randCount = random(0, 7);
      analogWrite (E2, 75);          //na 3 seconde begint de loop opnieuw
    }
  }
}

void Poort(){                        //de interrupt waarin de hij ziet of de onderste rij veranderd en zet binary om in decimal
  Serial.print(count);
  Serial.print(" - ");
  Serial.print(digitalRead(2));
  Serial.print(" - ");
  Serial.print(digitalRead(3));
  Serial.print(" - ");  
  Serial.print(randCount);
  Serial.print(" - ");
  Serial.print(randNumber);
  Serial.print(" - ");

  count++;                                     //veranderd elke keer dat de onderste rij veranderd +1
  pos = pos + (val * (1-digitalRead(3)));      //zet binary om naar decimal
  val = val * 2;                               //zet binary om naar decimal

  Serial.print(pos);                           //output van de berekening naar monitor
  Serial.println(" ");


  if (count == maxnum)                         //als de count 8 is zet hij de nosige variablen terug
  {
    count = 0;
    pos = 0;
    val = 1;

  }
}












ik hoop dat jullie hier iets van snappen als er vragen zijn alsjeblieft stel ze.

ik heb ook nog een me seriele monitor na 1 rondje
eerste rij: de "count" telt elke keer tot 7 vanaf 0 dus dat is 8 (werkt)
tweede rij: de onderste sensor zijn output die zwart,wit,zwart,wit leest (werkt)
derde rij: de bovenste rij voor de daadwerkelijke code (werkt, Fouten liggen aan de sensor niet aan de code)
vierde rij: laat de randCount zien dit is de willekeurige waarde om te stoppen op het aantal blokjes (werkt niet)
vijfde rij: laat de randNumber zien die bepaalt waar hij moet vertragen (werkt alleen hij vertraagd niet)
zesde rij: laat de "pos" zien de decimale waarde die is omgerekend van binair

Code:
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 1 - 0 - 2 - 1
2 - 0 - 1 - 0 - 2 - 1
3 - 1 - 1 - 0 - 2 - 1
4 - 0 - 1 - 0 - 2 - 1
5 - 1 - 1 - 0 - 2 - 1
6 - 0 - 1 - 0 - 2 - 1
7 - 1 - 1 - 0 - 2 - 1
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 0 - 0 - 2 - 3
2 - 0 - 1 - 0 - 2 - 3
3 - 1 - 1 - 0 - 2 - 3
4 - 0 - 1 - 0 - 2 - 3
5 - 1 - 1 - 0 - 2 - 3
6 - 0 - 1 - 0 - 2 - 3
7 - 1 - 1 - 0 - 2 - 3
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 1 - 0 - 2 - 1
2 - 0 - 1 - 0 - 2 - 1
3 - 1 - 1 - 0 - 2 - 1
4 - 0 - 1 - 0 - 2 - 1
5 - 1 - 1 - 0 - 2 - 1
6 - 0 - 1 - 0 - 2 - 1
7 - 1 - 1 - 0 - 2 - 1
0 - 0 - 1 - 0 - 2 - 0
1 - 1 - 0 - 0 - 2 - 2
2 - 0 - 1 - 2 - 3 - 2
3 - 1 - 1 - 6 - 3 - 2
4 - 0 - 1 - 6 - 3 - 2
5 - 1 - 1 - 6 - 3 - 2
6 - 0 - 1 - 6 - 3 - 2
7 - 1 - 1 - 6 - 3 - 2

ik ben geen expert met de arduino en ben pas 16 als jullie mij zouden kunnen helpen zou ik heel blij zijn alvast bedankt!
als je meer informatie nodig hebt vraag er naar!
3  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 08:43:22 am
nop, thank you il ask there!
4  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 08:38:36 am
what should i do instead?
5  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 08:27:51 am
dude you do understand my sentences without capitals, like i said.
Quote
it bassicly needs to scan those codes convert it into decimal. so he can recognize where he is by reading those codes if he is at a random code generated in the my code he has to stop (wich works)
but now i want to make it stop in the middle of a code.

like:
his destination is 4. he knows that after scanning all the 8 squares than he has to slow down and stop somewhere in the middle of the next code. at wich square of the eight is also completely random.
i also explained almost every single piece of code. Above.
6  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 08:14:00 am
i really have no idea's left, if anyone has suggestions it doesn't matter if it doesn't work. Or some other things i should try?
7  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 07:52:44 am
yes, if you need more information or if you don't understand anything. ask me.
8  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 07:42:02 am
im sorry.
the upper one is the binary code
and the bottom one is just to indicate if the sensor has to read the upper one

like:
black.white.white.white.white.white.white.white
white.black.white.black.white.black.white.black

9  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 07:32:09 am
it bassicly needs to scan those codes convert it into decimal. so he can recognize where he is by reading those codes if he is at a random code generated in the my code he has to stop (wich works)
but now i want to make it stop in the middle of a code.

like:
his destination is 4. he knows that after scanning all the 8 squares than he has to slow down and stop somewhere in the middle of the next code. at wich square of the eight is also completely random.
10  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 07:25:44 am
Whether or not English is your native language, you surely recognize that punctuation is required at the end of sentences. They define where one thought ends and another begins.  Try again.

Explain what your problem is. What does the code do? What do you want it to do? How are those different?

Some paragraphs are good, too.

can you please try again now that i have given all the information i have.
11  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 06:58:33 am
allright i don't know what to add more to this. this is all the information i got.
12  Using Arduino / Programming Questions / Re: Need help making a custom barcode reader on: November 13, 2012, 06:04:40 am
what do you need incase to help me i can give you the information im only 16 years old and english isn't my native language so i will try to provide you with the information you need but i have only worked with an arduino for about 3 weeks now
13  Using Arduino / Programming Questions / Need help making a custom barcode reader on: November 13, 2012, 05:30:49 am
hello,
i am making a custom code scanner using 2 rows of black and white the bottom row is black white black white etc it is 8 bit so 4 white 4 black. to indicate the upper row so if the bottom rows sees the upper row is changing, it converts the input into binary like: black white white white white white white white will be 1. i use 2 line tracking sensors for this im also using a servo motor to make the codes circle so the scanner can read them. what im trying to put in rigth now is that if the maxnum wich is 8 including 0 == a random number between 0-7  it stops the motor waits 3 seconds and returns to his routine. i have already added that it stops at a random number between 1-3. but i want to make it more accurate so it stops between 0-7 of the bottom row here is my code:
Code:
#include <Wire.h>                     //used for the lcd
#include <LiquidCrystal_I2C.h>
#include <Time.h>  
#define TIME_MSG_LEN  11
#define TIME_HEADER  'T'
#define TIME_REQUEST  7  
int oldval=1;                          //used to indicate if the upper row changed
int count=0;                           //changes everytime the bottom row changes and increases once it reached maxnum wich is 8 it resets itself
int val = 1;                           //used to calculate from binary to decimal
int maxnum=8;                          //the max number of counts that the scanner does before it resets itself
int pos = 0;                           //used to calculate from binary to decimal
int scans = 0;                         //the variable that changes everytime it scanned one code it shows the amount of scans he did
int E2 = 9;                            //for the servo motor
int M2 = 10;                           //for the servo motor
//int change = 0;                      
long randNumber;                       //the random number for the upper row the binary code converted to decimal with a max of 3 and a min of 1
long randCount;                        //the random number for the bottom row from 0-7
//int displayval = 0;                  

LiquidCrystal_I2C lcd(0x27,20,4);      //for the lcd to work


void setup()
{
  Serial.begin(9600);
  int ledPin = 8;                      // changing pin 8 to 5v
  pinMode(ledPin, OUTPUT);  
  digitalWrite(ledPin, HIGH);
  int ledPin2 = 7;                     // changing pin 7 to 5v
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, HIGH);
  int ledPin3 = 4;                     // changing pin 4 to 5v
  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);        
  attachInterrupt(0, Poort, CHANGE);   //the attachinterrupt to see if the bottom row changes so it knows to look at the upper row
  lcd.init();                          //to keep the lcd on
  lcd.backlight();                     //to keep the backlight of the lcd on
  randNumber = random(1, 4);           //generates a random number for the randNumb to stop (this works)

  analogWrite (E2,75);                 //to keep the servo motor running to circle the codes
  digitalWrite(M2,HIGH);

  lcd.setCursor(15,3);                 //is for the display don't need to look at this
  lcd.print(randNumber);          
  lcd.setCursor(13,2);
  lcd.print("Dest:");
  lcd.setCursor(0,0);
  lcd.print("Aantal Gescanned:");
  lcd.setCursor(0,1);
  lcd.print(scans);
  lcd.setCursor(0,2);
  lcd.print("Waarde: ");
}

void loop(){    

  if (count == 7)                      //if the count reaches 7 it updates the lcd
  {
    lcd.setCursor(0,3);  
    lcd.print(pos);
    lcd.print(" ");
    lcd.setCursor(0,1);
  }
  if (pos == randNumber)              // if the decimal number wich is converted from decimal in the interrupt == the random number generated in the setup it slows down the servo to be more accurate at his stop
  {
    analogWrite (E2,110);
    lcd.setCursor(15,3);              //for the lcd
    lcd.print(randNumber);
    lcd.print(scans++);               //adds a scan everytime it passes this
    randNumber = random(1, 4)
    if (randCount == count)          //if the random nummer generated for the bottom row == to the the count wich counts every square in the bottom row it stops the servo generates a new randomnumber waits 3 seconds generates a new random number for the count
    {
      analogWrite (E2, 200);  
      randNumber = random(1, 4);
      delay(3000);
      randCount = random(0, 7);
      analogWrite (E2, 75);          //after the 3 seconds it goes back to normal speed
    }
  }
}

void Poort(){                        //the interrupt where i build in a debug system to see what it does and if it does what i want
  Serial.print(count);
  Serial.print(" - ");
  Serial.print(digitalRead(2));
  Serial.print(" - ");
  Serial.print(digitalRead(3));
  Serial.print(" - ");  
  Serial.print(randCount);
  Serial.print(" - ");
  Serial.print(randNumber);
  Serial.print(" - ");

  count++;                                     //everytime it changes it adds one count for the blocks
  pos = pos + (val * (1-digitalRead(3)));      //calculates binary to decimal pin 3 is the sensor for the upper row
  val = val * 2;                               //calculates binary to decimal

  Serial.print(pos);                           //after it calculated it it outputs the decimal into to monitor for me to check it
  Serial.println(" ");


  if (count == maxnum)                         //once the count changed 8 times it resets the variables to startover
  {
    count = 0;
    pos = 0;
    val = 1;

  }
}

i have no clue how to fix it. right now when i run it it sometimes work. i think it may have to do with the loop and the interrupt but i don't know how to fix this.
the lcd.print is just to make it easier to read when im next to the arduino.

right now it doesnt slow down and it stops at one point in the code only. i dont think he uses the randCount

this is the what i see in my monitor.
first row: the count counts to 8 everytime in order to get a 8 bit binary code (works)
second row: the bottom row to indicate if the upper has to change aswell (works)
third row: the upper row shows a 0 for black square and 1 for a white square (works)
fourth row: shows the randCount a random nummer generated used to make it stop at a place in the count (does not work)
fifth row: shows the randNumb a number generated to stop at a certain code after the code is calculated wich is after 8 squares (works)
sixth row: shows the number calculated from the binary code (works)



Code:
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 1 - 0 - 2 - 1
2 - 0 - 1 - 0 - 2 - 1
3 - 1 - 1 - 0 - 2 - 1
4 - 0 - 1 - 0 - 2 - 1
5 - 1 - 1 - 0 - 2 - 1
6 - 0 - 1 - 0 - 2 - 1
7 - 1 - 1 - 0 - 2 - 1
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 0 - 0 - 2 - 3
2 - 0 - 1 - 0 - 2 - 3
3 - 1 - 1 - 0 - 2 - 3
4 - 0 - 1 - 0 - 2 - 3
5 - 1 - 1 - 0 - 2 - 3
6 - 0 - 1 - 0 - 2 - 3
7 - 1 - 1 - 0 - 2 - 3
0 - 0 - 0 - 0 - 2 - 1
1 - 1 - 1 - 0 - 2 - 1
2 - 0 - 1 - 0 - 2 - 1
3 - 1 - 1 - 0 - 2 - 1
4 - 0 - 1 - 0 - 2 - 1
5 - 1 - 1 - 0 - 2 - 1
6 - 0 - 1 - 0 - 2 - 1
7 - 1 - 1 - 0 - 2 - 1
0 - 0 - 1 - 0 - 2 - 0
1 - 1 - 0 - 0 - 2 - 2
2 - 0 - 1 - 2 - 3 - 2
3 - 1 - 1 - 6 - 3 - 2
4 - 0 - 1 - 6 - 3 - 2
5 - 1 - 1 - 6 - 3 - 2
6 - 0 - 1 - 6 - 3 - 2
7 - 1 - 1 - 6 - 3 - 2
Pages: [1]