Go Down

Topic: Ping/RFID Reader not working. (Read 516 times) previous topic - next topic

ziplock

I wrote some code for the TouchShield and Arduino to make a basic GUI that I'm calling pArduOS. For some reason, the RFID reader (Parallax) and the Ping)) won't report their data to the computer.

Code follows:

TouchShield Code
Code: [Select]
void setup() {
 Serial.begin(9600);
 background(0,0,0);
 stroke(255);
 text("pArduOS, Version .1",205,2);
 text("Written by Adam Aitoumeziane",150,10);
 text("Includes code samples from arduino.cc",95,18);
 fill(0,0,255);
 rect(0,0,50,50);
 text("Ping",12,22);
 fill(0,255,0);
 rect(0,75,50,50);
 text("RFID",12,97);

}

void loop() {
 gettouch();

 if(mouseX > 0 & mouseX < 50 & mouseY > 0 & mouseY < 50) {
   Serial.print('A');
 }

 if(mouseX > 0 & mouseX < 50 & mouseY > 75 & mouseY < 125) {
   Serial.print('B');
 }
}


Arduino Code
Code: [Select]
#include <AFSoftSerial.h>
#define RXPIN 3
#define TXPIN 2


int pingPin = 7;
char myChar;
int  val = 0;
char code[10];
int bytesread = 0;

AFSoftSerial tss = AFSoftSerial(RXPIN,TXPIN);


void setup() {
 tss.begin(9600);
 Serial.begin(2400); // RFID reader SOUT pin connected to Serial RX pin at 2400bps
 pinMode(4,OUTPUT);   // Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin
 digitalWrite(4, LOW);                  // Activate the RFID reader
}

void loop() {
 if(Serial.available() > 0) {
   myChar = tss.read();
 }


 if(myChar == 'A') {
   pingProg();
 }

 if(myChar == 'B') {
   rfidProg();
 }
}

int pingProg() {
 long duration, inches, cm;

 // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
 // We give a short LOW pulse beforehand to ensure a clean HIGH pulse.
 pinMode(pingPin, OUTPUT);
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(5);
 digitalWrite(pingPin, LOW);

 // The same pin is used to read the signal from the PING))): a HIGH
 // pulse whose duration is the time (in microseconds) from the sending
 // of the ping to the reception of its echo off of an object.
 pinMode(pingPin, INPUT);
 duration = pulseIn(pingPin, HIGH);

 // convert the time into a distance
 inches = microsecondsToInches(duration);
 cm = microsecondsToCentimeters(duration);

 Serial.print(inches);
 Serial.print("in, ");
 Serial.print(cm);
 Serial.print("cm");
 Serial.println();
 

 delay(100);
}

int rfidProg() {
 if(Serial.available() > 0) {          // if data available from reader
   if((val = Serial.read()) == 10) {   // check for header
     bytesread = 0;
     while(bytesread<10) {              // read 10 digit code
       if( Serial.available() > 0) {
         val = Serial.read();
         if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading
           break;                       // stop reading
         }
         code[bytesread] = val;         // add the digit          
         bytesread++;                   // ready to read next digit  
       }
     }
     if(bytesread == 10) {              // if 10 digit read is complete
       Serial.print("TAG code is: ");   // possibly a good TAG
       Serial.println(code);            // print the TAG code
     }
     bytesread = 0;
     delay(500);                       // wait for a second
   }
 }
}

 long microsecondsToInches(long microseconds)
{
 // According to Parallax's datasheet for the PING))), there are
 // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
 // second).  This gives the distance travelled by the ping, outbound
 // and return, so we divide by 2 to get the distance of the obstacle.
 // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
 return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
 // The speed of sound is 340 m/s or 29 microseconds per centimeter.
 // The ping travels out and back, so to find the distance of the
 // object we take half of the distance travelled.
 return microseconds / 29 / 2;
}

ziplock

Nevermind!

I fixed the error.

This is what the problem was:
Code: [Select]
 if(Serial.available() > 0) {
   myChar = tss.read();
 }


It should say:

Code: [Select]
 if(tss.available() > 0) {
   myChar = tss.read();
 }

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy