Go Down

Topic: Arduino waarde naar processing [OPGELOST!] (Read 2 times) previous topic - next topic

renaldo90

Mar 30, 2012, 12:15 pm Last Edit: Apr 04, 2012, 04:24 pm by renaldo90 Reason: 1
Hallo!

Ik ben op dit moment bezig met het bouwen van een morsecode installatie, met een knop. In arduino wordt dit verwerkt en in de Serial Monitor komen de letters tevoorschijn als er geklikt is op de knop. In processing wil ik de Serial Monitor lezen en deze weergeven in een scherm, maar hier gaat het fout. Ik krijg de letters niet te zien in het scherm.. Weten jullie misschien hoe ik dit werkend kan krijgen? Ik ben radeloos!



ARDUINO CODE
Code: [Select]
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int i = 0;
int itw = 0;
String morseVar;

void setup() {
 // initialize the LED pin as an output:
 pinMode(ledPin, OUTPUT);      
 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT);

 Serial.begin(9600);
}

void loop(){
 // read the state of the pushbutton value:
 buttonState = digitalRead(buttonPin);
 delay(buttonState + 100);

 if(buttonState == 1)
 {
   i++;
   itw = 0;
 }
 else
 {
   if (i == 1 || i == 2)
   {
    morseVar = morseVar + "K";
    i=0;
   }
   else if (i >= 3)
   {
    morseVar = morseVar + "G";
    i=0;
   }
 };
 
  if(buttonState == 0)
 {
   if(morseVar == ""){}
   else {itw++;};
   
   if (itw > 10)
   {
    morseVar = morseVar + "X";
    itw=0;
   }
 };
 
  if(morseVar.length() == 4)
 {
   if (morseVar == "KGXX")
   {
     Serial.println("A");
     morseVar = "";
   }
   else if (morseVar == "GKKK")
   {
     Serial.println("B");
     morseVar = "";
   }
   
   HET ALFABET --> ENZ...

   else if (morseVar == "GGKK")
   {
     Serial.println("Z");
     morseVar = "";
   }
   else
   {
     morseVar = "";
   }
 }
 
 if (buttonState == HIGH) {      
   digitalWrite(ledPin, HIGH);
   tone(6, 10, 1000);
 }
 else {
   digitalWrite(ledPin, LOW);
   noTone(6);
 }

}


PROCESSING CODE:
Code: [Select]
import processing.serial.*;

Serial port;
String input;
String zin;
int i = 0;

void setup() {
 // Setup the screen for output.
 textFont(createFont("Arial", 25));
 size(500, 300);
 background(0);
 fill(255);
 // List all the available serial ports:
 println(Serial.list());
 port = new Serial(this, Serial.list()[0], 9600);
 noLoop();
}

// Process a line of text from the serial port.
void serialEvent(Serial p) {
     input = (port.readString());
     if(input == null)
     {}
     else
     {
     
     zin = input;
     }
     loop();
}

void draw() {
 if(input== null)
 {}
 else{
 i++;  
 print(i);
   print(input);

   if(i==1)
   {text(input, 20, 60);noLoop();}
   if(i==2)
   {text(input, 37, 60);noLoop();}
 noLoop();
 }
}

Jantje

Dag Renaldo90
Als ik je setup zo bekijk zie ik niet direct iets fout.
Wat ik me wel afvraag is waarom je arduino code en proicessing code hebt. Heb je zelf je serial montitor geschreven?
Indien zo heb je al eens geprobeerd met de arduino IDE bijgeleverde monitor?
Wat ik zou doen is de setup code vervangen door deze:
Code: [Select]
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

  Serial.begin(9600);
  Serial.println("morse code sleutel is klaar voor gebruik");
}

Zo weet je zeker of serial werkt of niet.
Indien je de boodschap krijgt op je monitor zit het probleem in je morse code afhandeling. Anders zit het in je monitor setup.
Dan kan je best de IDE monitor proberen en zorg er zeker voor dat je daar ook 9600 gebruikt. Anders zie je ook niks.

Met vriendelijke groet
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

renaldo90


Dag Renaldo90
Als ik je setup zo bekijk zie ik niet direct iets fout.
Wat ik me wel afvraag is waarom je arduino code en proicessing code hebt. Heb je zelf je serial montitor geschreven?
Indien zo heb je al eens geprobeerd met de arduino IDE bijgeleverde monitor?
Wat ik zou doen is de setup code vervangen door deze:
Code: [Select]
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

  Serial.begin(9600);
  Serial.println("morse code sleutel is klaar voor gebruik");
}

Zo weet je zeker of serial werkt of niet.
Indien je de boodschap krijgt op je monitor zit het probleem in je morse code afhandeling. Anders zit het in je monitor setup.
Dan kan je best de IDE monitor proberen en zorg er zeker voor dat je daar ook 9600 gebruikt. Anders zie je ook niks.

Met vriendelijke groet
Jantje


Beste Jantje,

Ik heb al veel tests uitgevoerd en ben erachter gekomen dat het probleem niet in de arduino code ligt, maar in de processing code. Ik heb inderdaad de code zelf geschreven. Het probleem is volgens mij dat de scope van de variable alleen in de functie void serialEvent(Serial p) blijft. Ik heb geen idee hoe ik deze variable globaal kan maken..

Jantje

Renaldo
Heb je al getest met de arduino serial monitor.
Als het daar mee werkt weet je zeker dat het aan je code ligt.
Als het aan je code ligt zal je toch wat meer info moeten geven wat je gebruikt om die code te schrijven.
In welke tool/taal schrijf je die code? Op basis van de import lijkt het me java te zijn. Java heeft echter geen goede ondersteuning voor serial monitors. Ikzelf heb er uren aan gespendeerd om het aan het werk te krijgen.
Waarom wil je je eigen serial monitor schrijven?

Met vriendelijke groet.
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

renaldo90

Beste Jantje,

De code die ik gebruik is de code van arduino. Volgens mij zie ik iets over het hoofd of heb ik het verkeerd uitgelegd.

De serial monitor werkt goed. Als ik deze test, dan krijg ik in processing de letter die ik in arduino in de serial monitor heb gezet. Alleen verlies ik de letter (die in de variable input zit) als hij buiten de functie "void serialEvent(Serial p)" is. Ik heb de input bovenaan de code genoemd, dus het zou een globale variable moeten zijn, maar toch pakt hij het niet in de functie void draw(). Misschien ligt het aan de volgorde dat de scripts worden gelezen?? Bij void draw() gaat er dus iets fout.. Weet jij misschien wat hier precies aan de hand is?

Met vriendelijke groet,

Renaldo

Go Up