Go Down

Topic: Bits einlesen - wie mache ich das am Besten? (Read 2692 times) previous topic - next topic

Jomelo

Bei _Signal_ms_puffer 10 ist es klar das kein gültiges Signal mehr raus kommt.
Das liegt daran das bei 10 die Signale ineinander übergehen zwischen Low und High durch die Zeiten  (+-10  von 32 =>  22-42,  von 46 => 36-56)

Hier mal ein Script zum ausgeben, wobei es könnte sein das die Serial.print funktion im Interrupt das Script so dermaßen bremst, dass man das erst in einen Array schreiben muss und dann ausgibt.

Code: [Select]

unsigned long signal_time =0;


/*
* Interrupt Funktion, wird von 0->1 wechsel ausgelöst
*/
void Get_Bit_Signal()
{
  //interne Variable wird, als Berechnungshilfe verwendet
  unsigned int time = 0;
   
  time = millis() - signal_time;
  signal_time = millis();
  Serial.println(time); 
}

void setup()
{
  // Pin x nicht 0 einfach mal nachschauen
  // Interrupt von  0 -> 1 = rising
  attachInterrupt(0, Get_Bit_Signal, CHANGE);
 
  // wichtig fuer das Beispiel weiter unten
  Serial.begin(9600); 
}

void loop()
{
}

DE8MSH

#16
Aug 03, 2011, 10:28 pm Last Edit: Aug 03, 2011, 10:30 pm by DE8MSH Reason: 1
Das klappte auch nicht so richtig mit dem Messen... Jetzt habe ich das hier kurz zusammengestrickt:

Code: [Select]
int pin = 2;
unsigned long duration;

void setup()
{
  pinMode(pin, INPUT);
    Serial.begin(9600);
    Serial.println("Give it to me...");
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  if ((duration>600)&&(duration<1000)) Serial.print("1,");
  if ((duration>1200)&&(duration<4000)) Serial.print("0,");
}


Nun kommt das heraus für 21,3° und 69%:

Quote
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,

"Vorspiel"                                          Vorzeihen?      Temp                                   Feucht                               Keine Ahnung
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   1,1,1,1,   1,1,0,0,1,0,0,0,0,1,0,0,   1,0,0,1,0,1,1,0,0,0,0,0,     1,1,1,0,1,0,0,1,1,1,1,1,


Jetzt möchte ich versuchen Deine vorher herausgefundene Bit-Schieberei durchzuführen, sodass ich die Werte angezeigt bekomme... Drückt mir die Daumen :)

Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

DE8MSH

So, habe mal kräftig mitgeloggt:

Code: [Select]

000000000000000000   1111   100010000100   011001100000   010011001111
000000000000000000   1111   100010000100   011001100000   010011001111

000000000000000000   1111   100010000100   011001100000   010011001111
000000000000000000   1111   100010000100   011001100000   010011001111

000000000000000000   1111   100010000100   011001100000   010011001111
000000000000000000   1111   100010000100   011001100000   010011001111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   011001100000   010011001111
000000000000000000   1111   100010000100   011001100000   010011001111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   101001100000   000000111111
000000000000000000   1111   100010000100   101001100000   000000111111

000000000000000000   1111   100010000100   001001100000   111101111111
000000000000000000   1111   100010000100   001001100000   111101111111

000000000000000000   1111   100010000100   001001100000   111101111111
000000000000000000   1111   100010000100   001001100000   111101111111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   101001100000   111101111111
000000000000000000   1111   000010000100   101001100000   111101111111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111

000000000000000000   1111   000010000100   001001100000   011100011111
000000000000000000   1111   000010000100   001001100000   011100011111


Es werden offensichtlich alle Daten 2x gesendet. Ist mir bei der Audacity-Auswertung garnicht aufgefallen. Naja, jedenfalls nehme ich bei der letzten 12er Kombination Checksumme oder so an. Kam aber aufrgrund Nachdenkens nicht auf der Algho...
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Go Up