Hallo liebe Gemeinde,
ich möchte einen Funktionsgenerator mit einem Arduino Due bauen und habe da ein paar kleinere Probleme.
Ich soll für ein Schulprojekt mehrer Signale, als Testsignale ausgeben:
-Rauschen
-Quadrat
-Rampe
-Peek
- usw.
Hier beispielsweise eine Rampe die von 0 bis 100% geht (also 0-4095 Schritten), in einer bestimmten Zeit.
Die Funktionen an sich sind nicht das Problem. Leider scheiter ich gerade an der Zeit.
Die Signale sollen jeweils in 1s, 5s, 10s, 20s, und 50s von 0-100% gehen und sie sollen nicht wiederholt werden. Nur einmalig in der Zeit x von 0-100% gehen.
Ich habe es schon mit den Befehl delay(x), delayMicroseconds(x) usw. versucht, hat aber leider nicht funktioniert. Habe mich auch schon durch die Foren und andere Suchmaschinen gearbeitet, jedoch ohne Erfolg.
Kann mir jemand einen Denkanstoß geben?
int saw[] = {
0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0x110, 0x132, 0x154,
0x176, 0x198, 0x1ba, 0x1dc, 0x1fe, 0x220, 0x242, 0x264, 0x286, 0x2a8,
0x2ca, 0x2ec, 0x30e, 0x330, 0x352, 0x374, 0x396, 0x3b8, 0x3da, 0x3fc,
0x41e, 0x440, 0x462, 0x484, 0x4a6, 0x4c8, 0x4ea, 0x50c, 0x52e, 0x550,
0x572, 0x594, 0x5b6, 0x5d8, 0x5fa, 0x61c, 0x63e, 0x660, 0x682, 0x6a4,
0x6c6, 0x6e8, 0x70a, 0x72c, 0x74e, 0x770, 0x792, 0x7b4, 0x7d6, 0x7f8,
0x81a, 0x83c, 0x85e, 0x880, 0x8a2, 0x8c4, 0x8e6, 0x908, 0x92a, 0x94c,
0x96e, 0x990, 0x9b2, 0x9d4, 0x9f6, 0xa18, 0xa3a, 0xa5c, 0xa7e, 0xaa0,
0xac2, 0xae4, 0xb06, 0xb28, 0xb4a, 0xb6c, 0xb8e, 0xbb0, 0xbd2, 0xbf4,
0xc16, 0xc38, 0xc5a, 0xc7c, 0xc9e, 0xcc0, 0xce2, 0xd04, 0xd26, 0xd48,
0xd6a, 0xd8c, 0xdae, 0xdd0, 0xdf2, 0xe14, 0xe36, 0xe58, 0xe7a, 0xe9c,
0xebe, 0xee0, 0xf02, 0xf24, 0xf46, 0xf68, 0xf8a, 0xfac, 0xfce, 0xff0
};
int j=0;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(23, OUTPUT);
pinMode(24, INPUT);
pinMode(DAC0, OUTPUT);
}
// the loop function runs over and over again forever
void loop()
{
digitalWrite(23,LOW);
if(digitalRead(24)==LOW) // Wenn Pin 24 LOW
{
if(j<=120) // Solange j kleiner 120
{
j++;
for ( int i=0;i<120;i++) // Array auslesen
{
analogWriteResolution(12); // 12 Bit
analogWrite(DAC0,saw[i]); // gebe Werte aus
delay(1000); // Warte 1 Sekunde
}
}
if(j>=120) // Wenn j größer gleich 120
{
analogWriteResolution(12); // schreibe max Wert
analogWrite(DAC0,4095);
}
}
}