Tak for jeres svar.
Jeg tror det har noget at gøre med data transmissionen mellem Arduino og computeren til Processing. I hvert fald har det givet mig problemer med programmeringen senere hen - jeg har måttet sætte frameraten helt ned til 5 for at Processing ikke kører for hurtigt i forhold til Arduinoen, så jeg kunne køre nogle if-statements... Jeg prøvede at pille lidt ved baud rate i Arduino, men det gjorde kun tingene værre.
Jeg har slet ikke styr på det med at få tingene til at synkronisere ordentligt, så hvis der er nogle der har forstand på sådan noget er de meget velkomne til at belære mig
Hvad angår spørgsmålet om, hvornår jeg får null - jeg har virkelig ingen anelse. Den kommer og går fuldstændig tilfældigt, og derfor har jeg svært ved at identificere problemet. Som sagt tror jeg det har noget at gøre med, at Processing ikke når at opfatte data-inputs fra Arduino, men det er kun et gæt. Jeg prøvede også at sætte delay væk fra Arduino, men ak.
Dette har ført meget mærkelige problemer med sig da jeg senere forsøgte at bruge OOP, og jeg har måttet ty til mindre smarte programmeringsmetoder for at få det til at fungere, men ja, som sagt - det "virker"
float(string) fungerer som den skal, men der er et eller andet ved den linje.
Jeg bør nok fortælle, hvad jeg virkelig er i gang med: nemlig et p-plads system, der skal registrere ledige p-pladser og sende disse informationer til en "gps" (processing). Det er self. for sjov - en model til et teknologiprojekt. Jeg har en arduino med 5 lyssensorer, der registrer, om der er lyst eller mørkt. Arduino er programmet til at registrere, hvor mange p-pladser, der er ledige (ledig = lyst, fordi bilen ikke skygger), og disse data bliver send til Processing, som skal vise det grafiske (GPS'en).
I kan se hele koden her:
Arduino
Kode: Vælg alt
int threshold = 80;
int sensors[] = {0,0,0,0,0};
int led1 = 5;
int led2 = 6;
void setup(){
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop(){
//konverter sensor range (0 - højt tal) til color-range (0 - 255)
//** why is threshold 191 and not 255???
//A0 - 1. stik
if(map(analogRead(A0),0,1023,0,255) > threshold){
sensors[0] = 1;
} else{
sensors[0] = 0;
}
//A1 - 2. stik
if(map(analogRead(A1),0,1023,0,255) > threshold){
sensors[1] = 1;
} else{
sensors[1] = 0;
}
//A2 - 3. stik
if(map(analogRead(A2),0,1023,0,255) > threshold){
sensors[2] = 1;
} else{
sensors[2] = 0;
}
//A3 - 4. stik
if(map(analogRead(A3),0,1023,0,255) > threshold){
sensors[3] = 1;
} else{
sensors[3] = 0;
}
//A4 - 5. stik
if(map(analogRead(A4),0,1023,0,255) > threshold){
sensors[4] = 1;
} else{
sensors[4] = 0;
}
int seats_available = sensors[0] + sensors[1] + sensors[2] + sensors[3] + sensors[4];
if(seats_available > 0){
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
} else{
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
}
Serial.println(seats_available);
delay(200);
}
Processing
Kode: Vælg alt
import processing.serial.*;
Serial myPort; // Create object from Serial class
String seats;
boolean green, stroke, available, p1;
int x1 = 280;
int y1 = 230;
int x2 = 730;
int y2 = 225;
int x3 = 590;
int y3 = 345;
p_pladser object1 = new p_pladser();
PImage aarhus;
PImage gps;
void setup(){
//something weird about the data transmission
frameRate(5);
size(1000,650);
background(255);
String portName = Serial.list()[2]; //change the 0 to a 1 or 2 etc. to match your port
myPort = new Serial(this, portName, 9600);
aarhus = loadImage("bg.png");
gps = loadImage("gps.jpg");
}
void draw(){
background(255);
imageMode(CENTER);
gps.resize(800,500);
image(gps,width/2,height/2);
aarhus.resize(607,275);
image(aarhus,width/2-6,height/2-65);
if (myPort.available() > 0){
seats = myPort.readStringUntil('\n');
if(seats != null){
println(float(seats));
if(float(seats) > 0){
stroke(79,237,0);
green = true;
available = true;
} else{
green = false;
available = false;
stroke(255,0,0);
}
}
if(seats == null){
println("No valid data, wait a second");
}
}
rectMode(CENTER);
object1.new_pplads(280,230,size);
stroke(255,0,0);
object1.new_pplads(730,225,size);
object1.new_pplads(590,345,size);
if(green){
fill(79,237,0);
} else{
fill(255,0,0);
}
textAlign(CENTER);
text("P",280,235);
fill(255,0,0);
text("P",730,230);
text("P",590,350);
rectMode(CORNER);
textAlign(CORNER);
if(mouseX > x1 - 15/2 && mouseX < x1 + 15/2 &&
mouseY > y1 - 15/2 && mouseY < y1 + 15/2)
{
p1 = true;
object1.menu(x1,y1);
} else{
p1 = false;
}
if(mouseX > x2 - 15/2 && mouseX < x2 + 15/2 &&
mouseY > y2 - 15/2 && mouseY < y2 + 15/2)
{
object1.menu(x2,y2);
}
if(mouseX > x3 - 15/2 && mouseX < x3 + 15/2 &&
mouseY > y3 - 15/2 && mouseY < y3 + 15/2)
{
object1.menu(x3,y3);
}
}
//ny fane
int x, y, size;
class p_pladser{
// constructor
p_pladser(){
}
void new_pplads(int x, int y, int size){
size = 15;
fill(255);
rect(x,y,size,size);
}
void menu(int x, int y){
fill(255);
stroke(0);
rect(x,y,300,120);
fill(0);
if(available && p1){
text("Der er ledige p-pladser tilgængelige.",x+25,y+25);
text("Antal ledige p-pladser: " + seats,x+25,y+45);
} else{
text("Der er ingen ledige p-pladser i øjeblikket.",x+25,y+25);
}
}
}
Der er sikkert mange nybegynder-agtige programmerings"tricks", men jeg har lidt mistet overblikket pga. null-problemet, og det var tit, den ikke ville lade mig gøre noget, der var smartere, fordi programmet ellers ville crashe. Som I kan se har jeg måttet putte en del ind i tjekket om, at værdien ikke er null