Go Down

Topic: Array Problem - Allgemeines Problem mit if in Verbindung von einem A-Sensor (Read 2 times) previous topic - next topic

mrlowalowa

Hallo,

Vorab hier mal mein Code.

Habe vor an einer Fotozelle kurze und Lange Signale (Morsesignale) abzufragen.

Das abfragen an der Fotozelle klappt super und Punkte erkennt er mir auch ^^

Das aller erste problem ist jedoch, dass er gerne nur Punkte ausgibt...

Müsste ich jetz für einen "Strich" i auch genau definieren, da es ja mit i > 3 leider nicht klappt..



Code: [Select]
int count = 0;
int sensor = A0;
int i;
int c;
//int array[];

void setup(){
  Serial.begin(9600);
  i = 0;
  c = 0;
}

void loop() {
 
  int sensorValue = analogRead(sensor);
 
  if(sensorValue <= 100){
    count = 0;
  }
 
  if (sensorValue >= 100){
    i = i + 1;
  }
 
  if (i == 3 && count == 0){
   // array[c] = ".";
    c = c + 1; 
    i = 0;
    Serial.println ("Punkt");
  }
   
  if (i > 3 && count == 0){
   // array[c] = "-";
    c = c + 1;
    i = 0;
    Serial.println ("Strich");
  }
 
  delay(100);
 
}


Habe auch schon das Hier versucht was auch nur Punkte ausgibt:

Code: [Select]

int count = 0;
int sensor = A0;
int i;
int c;
//int array[];

void setup(){
  Serial.begin(9600);
  i = 0;
  c = 0;
}

void loop() {
 
  int sensorValue = analogRead(sensor);
 
  if(sensorValue <= 100){
    count = 0;
  }
 
  if (sensorValue >= 100){
    i = i + 1;
  }
  if (i >3){
    if (i > 3 && count == 0){
     // array[c] = "-";
      c = c + 1;
      i = 0;
      Serial.println ("Strich");
    }
  }
  else {
    if (i == 3 && count == 0){
     // array[c] = ".";
      c = c + 1; 
      i = 0;
      Serial.println ("Punkt");
    }
  }
   
 
   
 
  delay(100);
 
}


Das ist mein eines Problem,

das andere ist, dass ich mein ergebnis nun in irgendeiner Form am stück speichern möchte um es dann am schluss auszulesen und in klartext wie "hallo" oder aber auch sätzen wieder zu geben. Dabei habe ich an einen Array gedacht.

Das gegenstück zu diesem Progamm befindet sich auf meinem iPhone mit dem ich über einen NSMutablArray einen "Array" mit unbestimmter länge erzeugen konnte und so einfach x beliebig lange Arrays haben konnte.

Dummerweise muss ich hier die länge des array's angeben..

Habt ihr da vielleicht eine Idee / Vorschlag wie man dafür eine Lösung findet??


Noch dazu bin ich im besitz eines Ethernet shilds und Arduino Uno, wobei ich eventuell als Auslagerung eine SD karte einschieben könnte wenn der Platz nicht reicht, was ich aber nicht glaube  :smiley-mr-green:

Schon mal Vielen dank für eure Hilfe!  ;)

uwefed

Dein Programm funktioniert nicht, da zuerst die Bedingung für Punkt wahr wird und die Variablen zurückgesetzt werden und dann nie die Werte für einen Strich erreicht werden.
Noch 2 Fehler.
Um die Länge des Impulses zu Kontrollieren mußt Du die Zeit messen. Dein Programm mißt die Intensität des Impulses.
Verwende ein Digitales Pin und einen Fototransistor. Ein Fotowidertand ist zu langsam.
Grüße Uwe

mrlowalowa

Das habe/ wollte ich eben verhindern durch das if (i == 3 && count == 0)

also sollte die Punkt Bedingung nur eintreten, wenn Drei Werte über 100 waren und nun unter null ist..

Ich glaub der Fehler liegt darin, dass ich count bei Sensor Value über 100 dann auch auf 1 etc setzten muss, da dieser Wert sonst ja immer bleibt..

Okay ich suche mir mal was mit der Zeit. Ich hatte es davor so geregelt, dass nur alle 100ms der Wert abgefragt wird und ein Punkt eben 3 x 100 ms sind. Dadurch habe ich die Zeit indirekt schon abgefragt.

Habe solch einen Fototransistor wie auf dem Bild zu sehen ist.



Das habe ich auch vor (Die intensität zu messen), da in einem Normalen Raum bereits die Intensität sich in einem bereich zwischen 0 und 100 bewegt ( i.d.R. bei mir 30-50 ) Und wenn ich eben eine Taschenlampe (die App) direkt rein leuchten lasse ist der Wert weit über 100

Daher ist mir ein Analoger Pin eigentlich schon lieber.

Die frage ist nur, wie ich das jetz nun Speichern kann?

Ich könnte einfach mehrere Arrays bzw einen Großen erzeugen und mit foo voll schreiben bzw leer lassen und am schluss dann die leeren Speicher Löschen bzw Ignorieren. Ginge das?

MfG

EDIT: Habe gerade bei if (sensorValue >= 100) noch count = count + 1; eingefügt und ich kann nun Punkte und Striche unterscheiden :)

Jetz ist das nächste eben der Array oder eine andere Art des Speicherns gefragt.. (Siehe den auskommentierten Code)

EDIT2: keiner eine Idee??


uwefed


Go Up