Processing-Problem

Sehr verehrtes Forum

Ich bin zur Zeit daran verschiedene kleine Projekte in Processing zu integrieren. Bin jetzt aber noch in der Anfangsphase und habe nun ein Problem das ich mit meinen Kenntnissen nicht zu lösen weiss.

Das Szenario: Wird ein Knopf gedrückt, sendet das Arduino erst einen knopfspezifischen Wert und anschliessend ein 1 oder ein 0.
Das ganze funktioniert auch, jedoch wenn ich einen der beiden Knöpfe drücke werden plötzlich beide mit einer 1 angezeigt und wenn ich loslasse werden auch beide mit einem 0 gezeigt.

Hier der Code:

Arduino:

int button1 = 4;
int button2 = 5;

int einser = 10;
int An = 1;
int Ab = 0;

int zweier = 20;

boolean eins = false;
boolean zwei = false;

void setup()
{
  Serial.begin(9600);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
}


void loop()
{
  if(digitalRead(button1) == HIGH && eins == false)
  {
    eins = true;
    Serial.write(einser);
    Serial.write(An);
    //Serial.println("1");
  }
  else if(digitalRead(button1) == LOW && eins == true)
  {
    eins = false;
    Serial.write(einser);
    Serial.write(Ab);
  }
  
  if(digitalRead(button2) == HIGH && zwei == false)
  {
    zwei = true;
    Serial.write(zweier);
    Serial.write(An);
    //Serial.println("2");
  }
  else if(digitalRead(button2) == LOW && zwei == true)
  {
    zwei = false;
    Serial.write(zweier);
    Serial.write(Ab);
  }
}

und der Processing-Code:

import processing.serial.*;
int[] dataIn = new int[2];
Serial port;
int counter;
void setup()
{
  port = new Serial(this, Serial.list()[1], 9600);
}


void draw()
{
  if(port.available() > 0)
  {
    dataIn[counter] = port.read();
    println(dataIn[counter]);
    
    counter = (counter+1) % 1;
  }
}

In Processing wird in der Konsole beim drücken des Knopfes 1 folgendes reingeschrieben:

10
1
20
1

Ich bedanke mich schon im vorhinein über Lösungsvorschläge.

mfG

bluebubble

Wenn Du den Arduino normal an der seriellen betreibst (ohne Processing) funktioniert das richtig oder falsch?

wenn dort alles ok ist liegt es evtl. an

counter = (counter+1) % 1;

aber mit Modulo habe ich noch nichts gemacht. Ich nehme mal an counter soll immer zwischen 0 und 1 wechseln?

was passiert wenn Du erstmal

println(port.read());

probierst?

itac:
wenn dort alles ok ist liegt es evtl. an

counter = (counter+1) % 1;

aber mit Modulo habe ich noch nichts gemacht. Ich nehme mal an counter soll immer zwischen 0 und 1 wechseln?

Wenn ein Wert zwischen 0 und 1 wechseln soll, kann man es auch so schreiben:
counter = 1 - counter;Ist übersichtlicher und auch schneller.

itac:
Wenn Du den Arduino normal an der seriellen betreibst (ohne Processing) funktioniert das richtig oder falsch?

Dann funktionierts richtig. Beim Debuggen mit Serial.println gehts.

MaFu:

counter = 1 - counter;

Danke hat geklappt. Hätte nicht gedacht das es daran hätte legen können.

mfg

bluebubble

bluebubble:

itac:
Wenn Du den Arduino normal an der seriellen betreibst (ohne Processing) funktioniert das richtig oder falsch?

Dann funktionierts richtig. Beim Debuggen mit Serial.println gehts.

MaFu:

counter = 1 - counter;

Danke hat geklappt. Hätte nicht gedacht das es daran hätte legen können.

mfg

bluebubble

Wenn Du einen Wert durch 1 teilst kommt wieder der Wert raus (5/1=5), somit ergibt Modulo 1 immer 0. 8)