Anfänger sucht Hilfe Code UNO+Sprachrecorder

Hallo erstmal :slight_smile:

beschäftige mich mit dem Adruino UNO und NANO

ich habe vor den UNO mit dem ISD1820 Sprachmodul zu verbinden.
Habe im www auch schon ähnliche Codes gefunden.

Der Code soll folgendes können.

Signal vom Taster kommend (Stromkreis quasie geschlossen)
dann soll der Recorder Aufnehmen solange der TASTER gedrückt wird,
danach soll er Automatisch PLAY-E ausführen.(Eventuell noch ein Signal geben ala Stromkreis geschlossen solange PLAY-E wiedergibt.)

Mein Code sieht so aus.

#define REC 8
#define PLAY 7
#define TASTER 6 
void setup() { 
  pinMode(REC,OUTPUT);
  pinMode(PLAY, OUTPUT); 
  pinMode(TASTER, INPUT); 
  digitalWrite(REC,LOW);
  digitalWrite(PLAY,LOW);
}
void loop() {
  if (digitalRead(TASTER) == 1)
    digitalWrite(PLAY, HIGH);  
    delay(55); //eine kleine Pause
       digitalWrite(PLAY, LOW);  
  }


Aber irgendwie hab ich wohl was falsch gemacht.Hab leider nicht viel plan.

Würde mich über hilfe freuen.

Gruß
StruppiX

Gehe in deinen Post und markiere den Code.
Dann drückst Du auf das </> Smbol und speicherst den Post ab.

Dann... wird das auch was.

In der Zwischenzeit kannst ja mal erläutern, wie Du den Taster an den PIN 6 angeschlossen hast. (So mit oder ohne oder irgendwie und welcher Höhe Widerstand...)

Hier fehlen zwei Klammer { }

void loop() {
  if (digitalRead(TASTER) == 1)
  {
    digitalWrite(PLAY, HIGH);
    delay(55); //eine kleine Pause
    digitalWrite(PLAY, LOW);
  }
}

Hallo .

Der Taster der das ganze auslösen ist wie soll ich es sagen, ist eigentlich kein Taster, es ist ein Transistor BC547 der den Taster darstellt (Wenn aufgenommen werden soll) . Der soll dem UNO den Befehl auslösen lassen.

Sorry für meine schlechtes erklären.

Gib mall Link woher Du das hast, wo möglich ist dort ein Schaltplan

In dem Fall - weil das delay da drin ist - nicht.
Das delay ist nur zu kurz.

Ich sehe noch nciht, wo der Rec ausgelöst wird.

schaltplan hab ich nicht, ist einfach nen BC547, Widerstand und Diode.. der bekommt nen Signal von xyz ... und dann soll der UNO starten mit seinem Programm

Aaahhh...
Dann brauchst du eine State-machine.
Du nimmst auf und wenn die Aufnahme beendet, gibst Du wieder.
Ich such mir mal das Sprachmodul und dann schaun wa mal...

ja genau Adruino bekommt ein Signal vom BC547 dann REC und nach REC automatisch PLAY starten. Kann man auch Papagei funktion zu sagen :slight_smile:

Das ist aber ein zusätzlicher Aufgabenpunkt...
Der Chip kann 20 sekunden.
Variante 1: Aufname starten - Aufnahmezeit merken - Wiedergeben solange Wiedergabezeit != Aufnahmezeit
Variante 2: Aufnahme starten - Wiedergeben über die maximale Zeit von 20 Sekunden -> Da bleibts dann eben ggfls. am Ende lautlos.

Variante 1: Aufname starten - Aufnahmezeit merken - Wiedergeben solange Wiedergabezeit != Aufnahmezeit

Jepp genau PL-E auf dem ISD Board. Gibt noch einen Taster Wiedergeabe solange Taster gedrückt, aber den brauch ich nicht.

Ich hab jetzt mal ne Kurzversion.
Das mit dem merken der Aufnahmezeit kommt dann, wenn das geht:

// Forensketch - Sprachmodul steuern
// basiert auf https://forum.arduino.cc/t/anfanger-sucht-hilfe-code-uno-sprachrecorder/1040075
// war Original von https://funduino.de/nr-48-isd1820-sprachrekorder-und-sprachwiedergabe-mit-arduino

const byte recPin = 8;
const byte playPin = 7;
const byte startPin = 6;
const bool isOn = HIGH;
const uint32_t maxPlayTime = 20002;
enum state {warten, aufnehmen, wiedergeben};
byte status = warten;

void setup()
{
  digitalWrite(recPin, LOW);
  digitalWrite(playPin, LOW);
  digitalWrite(startPin, LOW);
  pinMode(recPin, OUTPUT);
  pinMode(playPin, OUTPUT);
  pinMode(startPin, INPUT);
}
void loop()
{
  voiceRecorder();
}

void voiceRecorder()
{
  uint32_t static lastmillis = millis();
  switch (status)
  {
    case warten:
      digitalWrite(recPin, LOW);
      digitalWrite(playPin, LOW);
      if (digitalRead(startPin) == isOn)
      {
        digitalWrite(recPin, HIGH);
        status = aufnehmen;
      }
      break;
    case aufnehmen:
      if (digitalRead(startPin) == !isOn)
      {
        digitalWrite(recPin, LOW);
        digitalWrite(playPin, HIGH);
        lastmillis = millis();
        status = wiedergeben;
      }
      break;
    case wiedergeben:
      if ((millis() - lastmillis > maxPlayTime ||
           digitalRead(startPin) == isOn))
      {
        status = warten;
      }
      break;
  }
}

Klasse, danke dafür erstmal, werde ich die Tage mal probieren.
Leider schon spät.
Würde das auch mit einem Arduino NANO funktionieren.? Aber irgendwie wird der nicht erkannt. Aber erstmal zweitrangig .

Ja. (*)

Dann wird das ein NANO aber kein ARDUINO NANO sein.
Die Clones haben meist einen CH340 drauf, da brauchst nen Treiber.
Ist aber nicht schwer. Was hast für ein Betriebssystem?

(*)
Bei einem Nano mit einem 328 als Chip kannst davon ausgehen, das der einem Uno gleich ist.
Es gibt auch Nanos mit einem 168er Chip - aber auch da funktionierts.

Bitte versuche erst den sketch von da oben...

Wenn der geht dann den hier - der nimmt die Zeit mit...

// Forensketch - Sprachmodul steuern
// basiert auf https://forum.arduino.cc/t/anfanger-sucht-hilfe-code-uno-sprachrecorder/1040075
// war Original von https://funduino.de/nr-48-isd1820-sprachrekorder-und-sprachwiedergabe-mit-arduino

const byte recPin = 8;
const byte playPin = 7;
const byte startPin = 6;
const bool isOn = HIGH;
const uint32_t maxPlayTime = 20002;
uint32_t recordStart = 0;
uint32_t playStart = 0;

enum state {warten, aufnehmen, wiedergeben};
byte status = state::warten;

void setup()
{
  digitalWrite(recPin, LOW);
  digitalWrite(playPin, LOW);
  digitalWrite(startPin, LOW);
  pinMode(recPin, OUTPUT);
  pinMode(playPin, OUTPUT);
  pinMode(startPin, INPUT);
}
void loop()
{
  voiceRecorder();
}

void voiceRecorder()
{
  switch (status)
  {
    case warten:
      digitalWrite(recPin, LOW);
      digitalWrite(playPin, LOW);
      if (digitalRead(startPin) == isOn)
      {
        digitalWrite(recPin, HIGH);
        recordStart = millis();
        status = state::aufnehmen;
      }
      break;
    case aufnehmen:
      if (digitalRead(startPin) == !isOn)
      {
        digitalWrite(recPin, LOW);
        digitalWrite(playPin, HIGH);
        playStart = millis();
        status = state::wiedergeben;
      }
      break;
    case wiedergeben:
      if ((millis() - playStart > maxPlayTime ||
           millis() - playStart > recordStart ||
           digitalRead(startPin) == isOn))
      {
        status = state::warten;
      }
      break;
  }
}

Nabend
Habe ebend mal versucht den NANO in gang zu bekommen. Treiber sind drauf CH340
Atmega328 Chip, hat auch schon mal funktioniert, hab schon mal was aufgespielt der sketch ist auch noch drauf. Habs auf beiden PC versucht, beide WIN10 . Der Nano erscheint nur im Gerätemanager ,das wars auch .
Hmmm

Wenn der sauber im GM erscheint, muss der auch unter WERKZEUGE - PORT einstellbar sein.

grafik

Jap, genauso sieht das bei mir auch aus.Auf PORT7 ist der NANO unter Werkzeuge taucht er auch auf. Gibt dann Fehlermeldung programmer is not responding und not in sync ect.

Kannst Du mal bitte mit der Fehlermeldung komplett rausrücken...
Da gibt es nen Button unten rechts "Fehlermeldung kopieren"
Und hier in Codetags einfügen.

Ich rate, das der Bootloader weg ist.
Hast Du noch einen zweiten (UNO/NANO/Mega) den Du mal kurz "missbrauchen" kannst um dem ggfls. wieder Leben einzuhauchen?

Ich hab noch einen UNO bestellt, nen NANO hab ich auch irgendwo noch, aber wenn man was braucht findet man es nicht.

Arduino: 1.8.13 (Windows 10), Board: "Arduino Nano, ATmega328P"

Der Sketch verwendet 1174 Bytes (3%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.

Globale Variablen verwenden 22 Bytes (1%) des dynamischen Speichers, 2026 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xb0

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xb0

Problem beim Hochladen auf das Board. Hilfestellung dazu unter http://www.arduino.cc/en/Guide/Troubleshooting#upload.



Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.