INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Senden bei Datenänderung
21.03.2014, 20:10
Beitrag #1
Senden bei Datenänderung
Hallo, folgender Sachverhalt:

Ich habe meine 6 Analogeingänge mit Potis beschalten, in der Software möchte ich das, sobald sich Poti 1 ändert, der neue Wert von Poti 1 per MIDI gesendet wird. Da MIDI ja nur max. 127dez übertragen kann, wird der Analogwert durch 8 geteilt. daraus ergibt sich Folgender codeausschnitt:

analog1 = analogRead(analog)/8 ;
if (analog1 != analogalt1);
{
noteOn (0x82, 0x00, analog1);
}
analogalt1 = analog1;}


... leider ist es aber so, das die ganze zeit der Wert gesendet wird, selbst wenn ich den Analogeingang auf 5V lege also ich wirklich keinerlei änderung habe. Wo liegt der fehler?

P.s. ich bin frischlingWink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 02:25
Beitrag #2
RE: Senden bei Datenänderung
Dann gibt bitte den ganzen Code

Uwe

Martin Luther King sagte am 28 August 1963 :

I have a Dream !!

Ich bin weiter:

I have a Schaltplan !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 09:42
Beitrag #3
RE: Senden bei Datenänderung
#include <SoftwareSerial.h>

//Eingaenge

const int analog = A0;
const int analoge = A1;
// Variablen:
int analog1;//Kanal 1
int analogalt1;//Kanal 1
int analog2;//Kanal 2
int analogalt2;//Kanal 2
SoftwareSerial midiSerial(8, 9);

void setup() {
midiSerial.begin(31250);
}

void loop() {

//Kanal 1

analog1 = analogRead(analog)/8 ; //Analogwert einlesen
if (analog1 != analogalt1); //Vergleich ob Wert sich geaendert hat
{
noteOn (0x82, 0x00, analog1); // ... wenn ja dann sende neue wert auf MSG 130_0_Wert
}
analogalt1 = analog1; // ueberschreibe alten Wert

//Kanal 2

analog2 = analogRead(analoge)/8 ; //Analogwert einlesen
if (analog2 != analogalt2); //Vergleichen ob Wert sich geaendert hat
{
noteOn (0x82, 0x01, analog2); //... wenn ja dann sende neuen Wert auf MSG 130_1_Wert
}
analogalt2 = analog2; // ueberschreibe alten Wert
}

// MIDI senden aus Standart Bibiliothek
void noteOn(byte cmd, byte data1, byte data2) {
midiSerial.write(cmd);
midiSerial.write(data1);
midiSerial.write(data2);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 10:52
Beitrag #4
RE: Senden bei Datenänderung
Moin LittleAngus,

zwei Sachen fallen mir auf / ein:

1. Da der Arduino mit 10 Bit Auflösung arbeitet, bedeutet eine Änderung der Spannung von 4,9 mV am Port schon eine Änderung bei analogRead().
Bist du sicher dass die verwendeten Potis so gut/genau sind, dass dies nicht schon zB. durch Änderung von Temperatur etc. hervorgerufen wird?
2. Was passiert bei Werten, die über die Division durch 8 dann Kommazahlen liefern?
Diese werden bei der Variablendeklaration als int komplett "übersehen".

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 11:58
Beitrag #5
RE: Senden bei Datenänderung
zu 1. das stimmt allerdings, darüber habe ich noch nicht nachgedacht... die potis sind in dieser hinsicht ungenau. bloß sehe ich in meinem MIDI display immer wieder den selben gesendeten wert....

zu 2. die nachkommastellen können vernachlässigt werden.... oder tut dies irgendetwas in der programmverarbeitung ändern?

Wenn ich das Ganze über einen digitalen Port mache und digitalRead verwende mit dem selben programmablauf funktioniert das ganze übrigens....
also könnte es doch an der 10-Bit Auflösung liegen?

Bitte verzeiht mir für die Amateurhaften ansätze, aber ich habe das Arduino noch nicht allzu langSad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 12:52 (Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2014 12:52 von rkuehle.)
Beitrag #6
RE: Senden bei Datenänderung
Hallo LittleAngus,

Zitat:zu 2. die nachkommastellen können vernachlässigt werden.... oder tut dies irgendetwas in der programmverarbeitung ändern?
Naja , am Programmablauf an sich nicht, aber so wird schon mal bei jedem Wert, der nicht ganzzahlig durch 8 teilbar ist, die Ausgabe gerundet.
Zitat:Wenn ich das Ganze über einen digitalen Port mache und digitalRead verwende mit dem selben programmablauf funktioniert das ganze übrigens....
Zeige mal bitte den Code dazu.
Zitat:Bitte verzeiht mir für die Amateurhaften ansätze, aber ich habe das Arduino noch nicht allzu lang
No problemo!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2014, 14:22
Beitrag #7
RE: Senden bei Datenänderung
Das die nachkommastellen entfallen ist für mich nicht Schlimm, der Wert kann um +/- 1 Differieren. Es geht mir am ende Darum einen Software Crossfader über MIDI zwischen 0-100% zu bewegen um dann eine LED über DMX zu dimmen.

Hier der digital Code


#include <SoftwareSerial.h>

//Eingaenge

int digitalin = 12;
// Variablen:
int digital;//Kanal 1
int digitalalt1;//Kanal 1


SoftwareSerial midiSerial(8, 9);

void setup() {
midiSerial.begin(31250);
pinMode (digitalin, INPUT);
digitalWrite (digitalin, LOW);
}


void loop() {

//Kanal 1

digital = digitalRead(digitalin) ; //digit einlesen
if (digital != digitalalt1); //Vergleich ob Wert sich geaendert hat
{
noteOn (0x82, 0x00, digital); // ... wenn ja dann sende neue wert auf MSG 130_0_Wert
}
digitalalt1 = digital; // ueberschreibe alten Wert


}

// MIDI senden aus Standart Bibiliothek
void noteOn(byte cmd, byte data1, byte data2) {
midiSerial.write(cmd);
midiSerial.write(data1);
midiSerial.write(data2);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.03.2014, 10:04
Beitrag #8
RE: Senden bei Datenänderung
Moin Leute,
jetzt habe ich ein großes Verständnisproblem HuhHuhHuh
Auszug aus der dtsch. Arduino Referenz:
Zitat:digitalRead() - Liest den Wert eines definierten digitalen Pins, entweder HIGH oder LOW.
Wie kann dann der Code von LittleAngus weitere Werte außer HIGH/LOW liefern, wenn er an den Pin digitalin ein Poti hängt und den Pin mit digitalRead() ausliest ???

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NRF24L01+ "Ping" senden, empfangen, bestätigen MeisterQ 8 389 23.08.2016 13:19
Letzter Beitrag: MeisterQ
  Problem mit ESP8266 und EMail senden torsten_156 1 609 13.06.2016 21:14
Letzter Beitrag: torsten_156
  Sensordaten per I2C senden ElAleMaNo 2 690 30.03.2016 23:44
Letzter Beitrag: ElAleMaNo
  Daten per Ethernet Shield 2 senden Mark79 3 869 22.03.2016 19:29
Letzter Beitrag: Mark79
  Datei von SD an anderen Arduino senden ProgrammierTier 1 545 02.02.2016 09:05
Letzter Beitrag: hotsystems
Bug Problem mit DMX senden Helyx 2 518 31.01.2016 23:20
Letzter Beitrag: Helyx
  array von Php --> Arduino zu senden (ethernet) Mourti 0 447 27.01.2016 22:11
Letzter Beitrag: Mourti
  Stringvariable senden beim ESP8266 geht nicht , warum ? arduinofan 9 1.139 12.01.2016 11:05
Letzter Beitrag: arduinofan
  Mit dem Webserverbeispiel senden und empfangen. arduinofan 3 685 09.12.2015 12:41
Letzter Beitrag: arduinofan
  Daten per USB senden/empfangen chhec 6 1.062 03.11.2015 09:15
Letzter Beitrag: arduinofan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste