Vorhandes Programm Ergänzen, aber wie?

Hallo liebe Gemeinde!
Ich bin Christian und versuche mich seit einiger Zeit an einem eigenem Projekt auf meinem Arduino Mega2560R3.
Ich hab einen Sketch und würde diesen gerne ergänzen, um weitere 12 Soundsensoren und 12 LED´s.
Leider finde ich nichts im Netz wo ich die anderen Sensoren einbinden kann und sobald ich was einfüge jagt eine fehler meldung die nächste :confused:
Wenn mir wer von euch Profis das mal erläutern könnte wäre ich super dankbar!

int Sensor = A0;

 

int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
boolean status_lights = false;

void setup() {
pinMode(Sensor, INPUT);
pinMode(13,OUTPUT);
}

void loop() {
int status_sensor = digitalRead(Sensor);
if (status_sensor == 0)
{
if (clap == 0)
{
detection_range_start = detection_range = millis();
clap++;
}
else if (clap > 0 && millis()-detection_range >= 50)
{
detection_range = millis();
clap++;
}
}
if (millis()-detection_range_start >= 400)
{
if (clap == 2)
{
if (!status_lights)
{
status_lights = true;
digitalWrite(13, HIGH);
}
else if (status_lights)
{
status_lights = false;
digitalWrite(13, LOW);
}
}
clap = 0;
}
}

Also einen Sketch ohne jede sinnvolle Formatierung und ohne jeglichen Kommentar durchzuarbeiten macht einfach keinen Spaß.
Formatiere den Sketch bitte vernünftig (+T in der IDE hilft Dir dabei) und versehe ihn mit sinnvollen Kommentaren was die Teile inhaltlich machen und warum.

Also nicht

clap++; // hier wird clap um 1 erhöht

sondern welche Bedeutung clap hat und was das ganze Programm eigentlich tut / tun soll.

Welche Sensoren benutzt Du? Da bitte einen Link dazu.

Gruß Tommy

christian030:

... Code ohne jede Formatierung ...

Tommy war schneller als ich. Was er über den Spaß am Lesen unformatierten Codes sagt, kann ich nur fett unterstreichen. Selten so einen übel (gar nicht) formatierten Sketch gesehen.

Gruß

Gregor

Hallo,

Du musst einfach nur sämtliche Pins definieren und bei den LEDs einfach digitalWrite(led, HIGH); verwenden. Bei den Sensoren... kommt ganz auf den Sensor an.

byte sensor1 = 2;
byte sensor2 = 3;
byte led1 = 13;
byte led2 = 12;

byte leds[6] = {25,26,27,28,29,30}; // Ein Array geht auch, hier kannst Du auch 12 Leds reinschreiben.

void setup() {
  pinMode(sensor1, INPUT);
  pinMode(led1,OUTPUT);
  pinMode(sensor2, INPUT);
  pinMode(led2,OUTPUT);

  digitalWrite(led1, HIGH); // Da wo Du es brauchst.
  digitalWrite(leds[4], HIGH); //<- Array!
}

Grüße,
Donny
edit: Sektch Formatieren: Ja, bitte! Ich hab die loop gar nicht wahr genommen weil alles so... ist wie es ist.

christian030:
....
Leider finde ich nichts im Netz wo ich die anderen Sensoren einbinden kann und sobald ich was einfüge jagt eine fehler meldung die nächste :confused:

Und warum zeigst du uns die Fehlermeldungen nicht ?
Dann könnten wir dir evtl. deine Fehler erklären.

So ist alles unzureichend.

erst einmal vielen dank für die konstruktive Kritik!

die von mir verwendeten Sensoren:

Sensoren Sound

anbei noch eine bessere erläuterung zum Sketch:

Ich habe 13 Module (diese beinhalten jeweils
-2 rote LED´s
-2 blaue LED´s
-1 Sound Sensor )

beim Starten des Programmes sollen alle 13 Module rot leuchten,
wird der jeweilige Sensor im Modul angesprochen wechselt die Farbe zu blau

später soll noch eine Stoppuhr über eine 4stellige 7Segment Anzeige die zeit messen, bis alle 13 Sensoren auf "blau" geschalten haben

Wenn ich den geposteten Sketch erweitere, reagiert ein Modul auf den Sensor im anderen Modul.

Die Schlamperei beim Formatieren und die fehlende Erklärung dazu wird natürlich abgeändert, auch für zukünftige Sketche.

Hier der Sketch mit allen Beschreibungen:

int Sensor1 = A7;                        
int Sensor2 = A6;




int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
boolean status_lights = false;

void setup() {
  ; pinMode(13, OUTPUT)  //LED1 rot
  ; pinMode(12, OUTPUT)  //LED1 blau
  ; pinMode(11, OUTPUT)  //LED2 rot
  ; pinMode(10, OUTPUT)  //LED2 blau
  ; pinMode(9, OUTPUT)   //LED3 rot
  ; pinMode(8, OUTPUT)   //LED3 blau
  ; pinMode(7, OUTPUT)   //LED4 rot
  ; pinMode(6, OUTPUT)   //LED4 blau
  ; pinMode(5, OUTPUT)   //LED5 rot
  ; pinMode(4, OUTPUT)   //LED5 blau
  ; pinMode(3, OUTPUT)   //LED6 rot
  ; pinMode(2, OUTPUT)   //LED6 blau
  ; pinMode(48, OUTPUT)  //LED7 rot
  ; pinMode(46, OUTPUT)  //LED7 blau
  ; pinMode(44, OUTPUT)  //LED8 rot
  ; pinMode(42, OUTPUT)  //LED8 blau
  ; pinMode(40, OUTPUT)  //LED9 rot
  ; pinMode(38, OUTPUT)  //LED9 blau
  ; pinMode(36, OUTPUT)  //LED10 rot
  ; pinMode(34, OUTPUT)  //LED10 blau
  ; pinMode(32, OUTPUT)  //LED11 rot
  ; pinMode(30, OUTPUT)  //LED11 blau
  ; pinMode(22, OUTPUT)  //LED12 rot
  ; pinMode(24, OUTPUT)  //LED12 blau
  ; pinMode(26, OUTPUT)  //LED13 rot
  ; pinMode(28, OUTPUT)  //LED13 blau

  ; pinMode(A1, INPUT)   //Sensor1
  ; pinMode(A2, INPUT)   //Sensor2
  ; pinMode(A3, INPUT)   //Sensor3
  ; pinMode(A4, INPUT)   //Sensor4
  ; pinMode(A5, INPUT)   //Sensor5
  ; pinMode(A6, INPUT)   //Sensor6
  ; pinMode(A7, INPUT)   //Sensor7
  ; pinMode(A8, INPUT)   //Sensor8
  ; pinMode(A9, INPUT)   //Sensor9
  ; pinMode(A10, INPUT)  //Sensor10
  ; pinMode(A11, INPUT)  //Sensor11
  ; pinMode(A12, INPUT)  //Sensor12
  ; pinMode(A13, INPUT)  //Sensor13
  ;
}

void loop() {
  int status_sensor1 = digitalRead(A7); //Sensor 7 wird gelesen
  if (status_sensor1 == 0)
  {
    if (clap == 0)
    {
      detection_range_start = detection_range = millis();
      clap++;
    }
    else if (clap > 0 && millis() - detection_range >= 50)
    {
      detection_range = millis();
      clap++;
    }
  }
  if (millis() - detection_range_start >= 40)
  {
    if (clap == 1)
    {
      if (!status_lights)
      {
        status_lights = true;
        digitalWrite(48, HIGH); //rote LED 7 ein
        digitalWrite(46, LOW);  //blaue LED 7 aus
      }
      else if (status_lights)
      {
        status_lights = false;
        digitalWrite(48, LOW); //rote LED 7 aus
        digitalWrite(46, HIGH);//blaue LED 7 ein
      }
    }
    clap = 0;
  }
}

ich hoffe das ist zufriedenstellender als der erste :slight_smile:

Fehlen nur noch die angedeuteten Fehlermeldungen.

  ; pinMode(13, OUTPUT)  //LED1 rot

Grausam.
Ändern in:

pinMode(13, OUTPUT);  //LED1 rot

Anstatt:

pinMode(48, OUTPUT);  //LED7 rot

würde ich folgendes machen:

#define LED7_ROT 48

Und dann kannst du den PIN überall über den definierten Identifier verwenden:

pinMode(LED7_ROT, OUTPUT);  //LED7 rot

sowie weiter unten:

digitalWrite(LED7_ROT, LOW); //rote LED 7 aus

Dann spart man sich auch ein paar Kommentare...

würde ich folgendes machen:

#define LED7_ROT 48

Eher

const byte LED7_ROT = 48;

In allen anderen Dingen stimme ich dir unumwunden zu.

Hi

So ganz gefressen, was die 13 Module nun wirklich machen sollen, habe ich immer noch nicht.
Auch sind nicht wirklich viele sinnvolle Kommentare im Sketch aufgetaucht.

Bei
digitalRead(A7) //Lese Sensor an A7 aus
Kann der Kommentar auch wieder entfernt werden - DAS sehe ich, aber nicht, was der Sensor (Der hier an A7 hängt) machen soll.
Eher etwas wie // hat der Klatschhalter nach maximal 30ms ebenfalls ausgelöst? -> Erhöhe Klatsch-Counter

Was soll's werden, wenn's fertig ist?
Spontan wäre eine Positionsbestimmung möglich - wobei dafür 4 Sensoren reichen müssten (allerdings dann in allen drei Ebenen verteilt).

MfG

combie:
Eher

const byte LED7_ROT = 48;

In allen anderen Dingen stimme ich dir unumwunden zu.

Ich verwende gerne die defines, damit ich, wenn der PIN nicht definiert ist, die Funktionen dafür im Code auslassen kann.
Z.B. habe ich einen Sketch, der im Endgerät eingesetzt wird. Für Funktionserweiterungen etc... teste ich auf dem Steckbrett, bevor ich das Endgerät ändere.

Da mein Steckbrett aber längst nicht alle Bedienelemente wie das Endgerät hat, Kommentiere ich die PINs einfach aus.

//#define AUFBAU_RITTALBOX
//#define AUFBAU_STECKBRETT


//-----------------------------------------------------------------------------------------------------
#ifdef AUFBAU_RITTALBOX
//#define   PIN_ENC_RR          2
//#define   PIN_ENC_RL          3
#define   PIN_MP3_RX          5  //should connect to TX of the Serial MP3 Player module
#define   PIN_MP3_TX          6  //connect to RX of the module
#define   PIN_WS2812          7
//#define   PIN_TOUCH1          8
#define   PIN_TOUCH2          9
#define   PIN_TOUCH3          10
#define   PIN_TOUCH4          11
#define   PIN_7SEG_CLK        12
#define   PIN_7SEG_DIO        13
#define   PIN_VOLUME          A0
#define   PIN_TASTER          A1
#define   PIN_NFC_IRQ         4


#define     WS2812_PIXELS       4
//#define     USE_ADVERT
#endif


//-----------------------------------------------------------------------------------------------------
#ifdef AUFBAU_STECKBRETT
#define   PIN_ENC_RR          2
#define   PIN_ENC_RL          3
#define   PIN_MP3_RX          5  //should connect to TX of the Serial MP3 Player module
#define   PIN_MP3_TX          6  //connect to RX of the module
//#define   PIN_WS2812          7
//#define   PIN_TOUCH1          8
//#define   PIN_TOUCH2          9
//#define   PIN_TOUCH3          10
//#define   PIN_TOUCH4          11
#define   PIN_7SEG_CLK        12
#define   PIN_7SEG_DIO        13
#define   PIN_VOLUME          A0
//#define   PIN_TASTER          A1
//#define   PIN_PERI_POWER      A3      // Peripherie Power
#define   PIN_NFC_IRQ         4

#define     WS2812_PIXELS       4
//#define     USE_ADVERT
#endif

Könntest du mir ganz kurz und knapp erklären, welche Gründe für das const byte sprechen?
Für mich
Vorteil: Typensicherheit
Nachteil: RAM Verwendung
https://forum.arduino.cc/index.php?topic=158628.0

Hallo,

ich nutze dafür auch #define
Als Variable würde es für mich nur Sinn machen, wenn ich es zur Laufzeit ändern wollte.
Mit const geht das dann aber sowieso nicht.
Bleibt also unnützer Ramverbrauch.
Typensicherheit macht hier für mich keinen Sinn.
Wenn z.B. bei pinMode(LED7_ROT, OUTPUT); //LED7 rot LED7_ROT den Wert 123456 hat, meckert entweder der Compiler, daß er da mit einem int nichts anfangen kann oder er castet implizit auf Byte.

Gruß aus Berlin
Michael

mde110:
Könntest du mir ganz kurz und knapp erklären, welche Gründe für das const byte sprechen?
Für mich
Vorteil: Typensicherheit
Nachteil: RAM Verwendung
When to use int, const int or define - Programming Questions - Arduino Forum

deinen angeführten Nachteil stelle ich in Abrede. Gerade mit dem BlinkWithtoutDelay ausprobiert:

// constants won't change. Used here to set a pin number:
   const int ledPin =  13;// Sketch/RAM= 862/15
// int ledPin =  13;      //             862/15
// byte ledPin = 13;      //             862/15
// #define ledPin 13     //              862/15
// uint16_t ledPin = 13; //              862/15

im Kommentar der Verbrauch des Programmspeichers/und des RAM:
Der Sketch verwendet 862 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 15 Bytes (0%) des dynamischen Speichers, 2033 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Resümee: alle 5 Varianten belegen gleich viel

für #define spricht imho nur die Verwendung als Precompiler Anweisung mit #ifdef...

Resümee: alle 5 Varianten belegen gleich viel

Dann hat der Compiler erkannt, dass ledPin gar nicht gebraucht wird.
Oft brauchen const keinen RAM.

Bleibt also unnützer Ramverbrauch.

Wer sagt das?
Schon mal getestet?
Konstanten werden in der Regel vollständig weg optimiert.
Und wo der Kompiler Probleme damit hat, gibts ja auch noch "constexpr"

Eins der Ziele der C++ Sprach Entwicklung, ist das weitestgehende eliminieren der Präprozessorstatements.
Da könnt ihr ja gerne gegen an strampleln.
Nur sollte dann klar sein, dass ihr gegen die Interessen der Erfinder arbeitet.

In manchen Situationen, geht es nicht ohne Präprozessor, aber das heißt doch nicht, dass man das Prinzip auch dort überall anwendet, wo es möglich ist. Sondern nur dort, wo nötig!

Noch dramatischer, als das #define, empfinde ich das durchnummerieren der Variablen.
Da bevorzuge ich doch Strukturen Klassen und Arrays.
In Arrays kann das Programm über den Index navigieren.
Aber in durchnummerierten Defines/Variablen nicht.

Ansonsten darf natürlich jeder tun, was er will...
Auch Anfänger auf ein schmales Brett schicken.

Aber dann bitte nicht damit rechnen, dass das kommentarlos ab geht.

noiasca:
für #define spricht imho nur die Verwendung als Precompiler Anweisung mit #ifdef...

Na, und für Macros wie F() z.B. sind sie auch sehr nützlich, wobei constexpr auch diese Bastion übernehmen wird.

michael_x:
Oft brauchen const keinen RAM.

Es mag Ausnahmefälle geben in denen const Objekte in den RAM gelegt werden müssen.

Hallo,

der Compiler optimiert einfach zu gut. :wink:
Er optimiert das const int einfach weg und setzt den Wert schon beim compilieren ein...

ein byte test[2000]; ergibt auch keine Änderung der Ramnutzung, erst wenn man mit test[0] = 10; irgendwo im Code das Array auch nutzt, legt er es auch an.

Gruß aus Berlin
Michael

christian030:
um meine frage nochmal etwas zu konkretisieren, ich weiß nicht wie ich in den, wenn auch schlechten, ursprünglichen sketch, die 12 anderen Soundsensoren einbinden soll, ich hätte mir das einfacher gewünscht :frowning:

Das liegt dann wohl eindeutig an dir.

Warum antwortest du nicht auf unsere Fragen bzw. siehst dir die gemachten Tipps an ?

Edit:
Das wird auch nicht besser, wenn du deine Beiträge wieder löschst.
Ignoranz ist hier fehl am Platz.

sorry für Löschen, ich dachte ich probier mal was bevor ich euch mit anfängerfragen auf den keks gehe.
Ich hab die letzen tage etwas wenig zeit um mich so wie ich es mir vorstelle um das projekt zu kümmern, also schimpf mich nicht :wink:

kann mir BITTE jemand erklären wie ich mehrere Sensoren in meinen ursprünglichen Sketch einbinde?
Ich bin offensichtlich hoffnungslos überfordert
grüße und danke im Vorraus

Du scheinst es immer noch NICHT zu verstehen.
In Post #1 wurden dir Fragen gestellt, warum beantwortest du die nicht.

Warum sollen wir dir noch helfen, wenn du unsere Hilfe ignorierst ?