Thursday, May 31, 2012

LCD Keypad Shield for Arduino Duemilanove, DealExtreme

If you have ordered "LCD Keypad Shield for Arduino Duemilanove & LCD 1602" from DealExtreme and are wondering about how to get this thing working without datasheet, you are in the right place :-) This product seems to be very similar(!) a product called "DFRobot LCD Keypad Shield for Arduino" and the Datasheet and even a library (LCD4bit_mod) for easy programming of it is available at following link, http://www.robotshop.com/dfrobot-lcd-keypad-shield-arduino.html, under useful links.

 The only issue with the library is that this is built for old versions of Arduino and if one to make it work with newest version (Arduino 1.0), then some parts of the code should change. First you need to install the additional library in your Arduino on your computer ( tutorial on how to install). Afterwards one should change the content of LCD4bit_mod.cpp 


#include "LCD4Bit_mod.h"
#if (ARDUINO < 100)
  extern "C" {
    #include   //not needed yet
    #include //needed for strlen()
    #include
    #include "WProgram.h"
  }
#else
  #include
#endif

String to Double issues in C# .NET


If you are simply using 

double test = Double.Parse("12.45");

and it doesn't work due to formating issues, here is the right post for you. Almost certainly you're using the wrong CultureInfo. Try specifying CultureInfo.InvariantCulture to parse in. I suspect it's currently assuming that "." is a thousands separator rather than a decimal point.

CultureInfo Invc = new CultureInfo("");
Invc = CultureInfo.InvariantCulture;

x1 = Double.Parse("12.45", Invc);

alternative:

x1 = Double.Parse("12.45", CultureInfo.InvariantCulture);

Wednesday, May 30, 2012

Tab Order in C# Windows Form - Visual Studio 2010

Setting Tab order in C# (Visual Studio 2010):

1 - Select View - Tab Order. This activates the tab-order selection mode on the form. A number (representing the TabIndex property) appears in the upper-left corner of each control.
2-  Click the controls sequentially to establish the tab order you want.
3 - When you are done, click View - Tab Order to deactivate the indexing.

Source: http://msdn.microsoft.com/en-us/library/bd16a8cw.aspx

Sunday, May 20, 2012

Flame Detector Sensor, Arduino Tutorial


This is a sample code to show how this cheap component from DealExtreme works with Ardunio (2.5$ with free shipping). These are very useful sensors for building [b]firefighting robots[/b]  :D  Look at the sample code for more info.
Sensor detecting match flame


purchase link:
http://www.dealextreme.com/p/arduino-flame-sensor-for-temperature-detection-blue-dc-3-3-5v-118075

OBS1: I assume this component uses Infrared and should be in direct sight to detect flame. This would work easily on big flames but for a match flame (very small), it could miss it.
OBS2: I read the values with analogRead but I guess they are readable with Digital Read as well as differences are quite high.
-------------------------
/*
  FLAME detector connected to Arduino
  http://www.dealextreme.com/p/arduino-flame-sensor-for-temperature-detection-blue-dc-3-3-5v-118075

 Developer:
 Akbar (Shahab) F. Moghaddam
 20.05.12

 Comment : I assume this component uses Infrared and should be in direct sight to detect flame. This would work easily on big flames but for a match flame (very small), it could miss it.

 */

//CONSTANTS
const int pinD0 = 0;
const int pinA0 = 1;

//VARIABLE
int A = -999;
int D = -999;
int readVal = 0;
boolean logging = false;
boolean fire = false;
boolean changed = true;


void setup() {              
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  Serial.begin(19200);
}

void loop() {
  initialAll();
  readValues();
  loggingProcess();
  if (changed)
    printState();
  delay(1000);// wait for a second
}

void initialAll(){
  readVal = 0;
}

void readValues(){
  A = analogRead(pinA0);
  D = analogRead(pinD0);
  fireCheck();
  if (Serial.available()>0){
    readVal = Serial.read();
  }
}

void loggingProcess(){
  if (readVal == 'l'){
    if (logging)
      logging = false;
    else
      logging = true;
  }
 
  if (logging){
    Serial.println("------------");
    Serial.println("SYUMMARY");
    Serial.print("A0:");
    Serial.println(A);
    Serial.print("D0:");
    Serial.println(D);
    Serial.println("------------");
  }
}

void printState(){
  if (fire){
    Serial.println("------------");
    Serial.println("FLAME Detected");
    Serial.println("------------");  
  }
  else{
    Serial.println("------------");
    Serial.println("NO FLAME");
    Serial.println("------------");  
  }
  changed = !changed;
}

void fireCheck(){
  if (A < 350 && D < 350){
    fire = true;
    changed = !changed;
  }
  else{
    fire = false;
    changed = !changed;  
  }
}

Quality Joystick from DealExtreme (very cheap)


Here I am about to write a tutorial about a cheap joystick I came across lately which can be bought for only 3.5$ with free shipping to Norway. It is a PS2 repair kit which can easily be used with Arduino concept as well (the input voltage is 5+). It can detect all 8 directions in 2D dimension and also Clicked feature.

Joystick tutorial

Purchase link:
http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340

Here the outputs from the joystick are only VRx, VRy, SW, GND and +5V.
VRx = x value (see program)
VRy = y value (see program)
SW = if Clicked or Not -> Clicked = 0, NOT clicked = 1

-----------------------

/*
  JOYSTICK Program connected to Arduino
 http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340

 Developer:
 Akbar (Shahab) F. Moghaddam
 20.05.12

 Comment : Front, Back, left, right
 */

//CONSTANTS
const int pinX = 2;
const int pinY = 1;
const int pinSW = 0;

//VARIABLE
int VRx = -999;
int VRy = -999;
int SW = -999;
int readVal = 0;
boolean logging = false;


void setup() {              
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  Serial.begin(19200);
}

void loop() {
  initialAll();
  readValues();
  loggingProcess();
  printState();
  delay(1000);// wait for a second
}

void initialAll(){
  readVal = 0;
}

void readValues(){
  VRx = analogRead(pinX);
  VRy = analogRead(pinY);
  SW = analogRead(pinSW);
  if (Serial.available()>0){
    readVal = Serial.read();
  }
}

void loggingProcess(){
  if (readVal == 'l'){
    if (logging)
      logging = false;
    else
      logging = true;
  }

  if (logging){
    Serial.println("------------");
    Serial.println("SYUMMARY");
    Serial.print("X:");
    Serial.println(VRx);
    Serial.print("Y:");
    Serial.println(VRy);
    Serial.print("SW is:");
    Serial.println(SW);    
    Serial.println("------------");
  }
}

void printState(){
  if (SW == 0){
    Serial.println("------------");
    Serial.println("CLICKED");
    Serial.println("------------");  
  }
  else if (VRx > 330 && VRx < 350 && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("NORMAL");
    Serial.println("------------");  
  }//NORMAL
  else if (VRx > 660 && VRx < 700 && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("FRONT");
    Serial.println("------------");
  }//FRONT
  else if (VRx < 5/*==0*/ && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("BACK");
    Serial.println("------------");
  }//BACK
  else if (VRx > 330 && VRx < 350 && VRy < 5 /*==0*/){
    Serial.println("------------");
    Serial.println("LEFT");
    Serial.println("------------");  
  }//LEFT
  else if (VRx > 330 && VRx < 350 && VRy > 665 && VRy < 700){
    Serial.println("------------");
    Serial.println("RIGHT");
    Serial.println("------------");  
  }//RIGHT
  else if (VRx > 350 && VRx < 680 && VRy > 350 && VRy < 670){
    Serial.println("------------");
    Serial.println("FRONT-RIGHT");
    Serial.println("------------");  
  }//FRONT-RIGHT
  else if (VRx >= 0 && VRx < 350 && VRy > 350 && VRy < 680){
    Serial.println("------------");
    Serial.println("BACK-RIGHT");
    Serial.println("------------");  
  }//BACK-RIGHT
  else if (VRx >= 0 && VRx < 330 && VRy >= 0 && VRy < 325){
    Serial.println("------------");
    Serial.println("BACK-LEFT");
    Serial.println("------------");  
  }//BACK-LEFT
  else if (VRx > 350 && VRx < 680 && VRy >= 0 && VRy < 325){
    Serial.println("------------");
    Serial.println("FRONT-LEFT");
    Serial.println("------------");  
  }//FRONT-LEFT
  else{
    Serial.println("------------");
    Serial.println("UNKNOWN");
    Serial.println("------------");  
  }//UNKNOWN
}

Friday, May 4, 2012

ABB Robotstudio Tutorial, part 1 - Basic Station



I have started a series of tutorials for teaching how to work with Robotstudio for students at Robotica Osloensis

Reading a value from FlexPendant in ABB Robots, TPRead

On ABB robots, one have access to a syntax in RAPID programming language called TPRead. TPRead allows the programmer to read live values from the user (operator) while your code is being run.

TPReadNum reg1,"Text";


PROC readJNumFromPendant()
TPErase;
TPReadNum reg1,"Enter Input Number?";
readValue := reg1;
TPWrite "Read Value is: " + ValToStr(testRead);
ENDPROC

RAPID_refer4.0

Tuesday, May 1, 2012

Arduino Mega 2560 driver could not be found on Windows 7

Issue: Arduino Mega 2560 driver could not be found on Windows 7
Solution: Simply go to Start - right click on Computer - Properties - Device Manager -  Under Other Devices, Find Arduino Mega 256 - right click and choose update driver - Choose Browse computer for driver software - Click Browse and Navigate to your Arduino home folder(where you installed Arduino) and choose drivers folder and  click Next. The windows 7 would find the right driver inside the folder.

Happy coding with Arduino :-)