Hallo,
möchte gerne eine Motorsteuerung mit einer SD-Karte einsetzen. Allerdings sollte der Motor nicht starten, wenn die SD -Karte nicht bereit oder nicht vorhanden ist. Habe folgenden Sketch bei Arduino gefunden. Wenn SD nicht initialisiert wird, soll eine LED angehen, das tut sie auch, aber wenn ich analogWrite(3,0) hinschreibe, startet der Motor trotzdem. Was sollte man ändern?
Serial.begin(9600); //Kommunikation herstellen,
while (!Serial)
{
;
}
Serial.print("Initialisierung der SD-Karte...");
pinMode(10, OUTPUT);
if (!SD.begin(10))
{
Serial.println("Fehlgeschlagen, SD-Karte nicht vorhanden");
digitalWrite(13, HIGH);
analogWrite(3,0);
return;
}
Serial.println("SD-Karte initialisiert.");
}
Un Du glaubst wirklich das ist bessere als Kaffeesatzlesen?
Der Kodeschnipsel den Du uns gegönnt hast, sagt gar nichts aus. Wo ist die Motoransteuerung?
Außerdem wird pin 13 für die SPI-Schnittstelle der SD-Karte verwendet. Du kannst sie nicht als Ausgang für die LED verwenden.
Der SD Slot hat 2 Kontakte, einen um zu sehen ob der Schreibschutzschieber de SD-Karte aktiviert ist und den zweiten ob eine Karte eingelegt ist. Vieleicht unterstützt dein SD-Slot Adapter diese Funktionen.
[Wie wäre es damit analogWrite() nur zu machen wenn die SD-Karte initialisiert wurde?]
Sehr guter Tipp, danke. Funktioniert.
Habe jetzt anders gemacht:
Serial.print("Initialisierung der SD-Karte...");
pinMode(10, OUTPUT);
if (!SD.begin(10))
{ Serial.println("Fehlgeschlagen, SD-Karte nicht vorhanden");
digitalWrite(13, HIGH);
analogWrite(3,0);
return;
} Serial.println("SD-Karte initialisiert.");
analogWrite(3,pwm);
}
Eine Frage zu SD-Karte hinterher.
Als chipSelect wählt man bei Arduino den Pin 10. Heißt das, dass dieser Pin damit reserviert ist und nicht mehr verwendbar für andere Zwecke? Wenn 13 auch belegt ist, muss wohl auf einen anderen ausweichen. Habe kaum mehr übrig, da ich noch LCD Display anschließen will.
richtig, der geht auch über I2C anzusteuern. Und schon hast du wieder pins frei!
Du mußt nur die Lib "LiquidCrystal.h" gegen die "LiquidCrystal_I2C.h" tauschen, das LCD-Modul an die beiden I2C Pins SDA und SCL anschliessen.
Vermutlich mußt du die Adresse des LCD (in den Beispielen in der Lib meist 0x20) anpassen, je nach dem, wie bei deinem Modul die Jumper gesetzt sind.
Wenn ich aus der Library "LiquidCrystal_I2C.h" die Funktion LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); in den Arduino Sketch einfüge schreibt der Kompiler: error: expected `)' before 'lcd_Addr'. Also die Adressierungsjumper A0, A1, A2 sind aktiviert ("open"), in der Tabelle heißt es Hex: 40. Schreibe ich das in die Funktion von oben rein?
User_ino:
Wenn ich aus der Library "LiquidCrystal_I2C.h" die Funktion LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); in den Arduino Sketch einfüge schreibt der Kompiler: error: expected `)' before 'lcd_Addr'. Also die Adressierungsjumper A0, A1, A2 sind aktiviert ("open"), in der Tabelle heißt es Hex: 40. Schreibe ich das in die Funktion von oben rein?
Bitte den ganzen Beispielsketch und alle Zeilen der Fehlermeldung.
Grüße Uwe
Urk, gerade einen Fehler gemacht. Die Anleitung enthält auch noch irgendeinen Kram über ein LED Display :o
Beim LCD ist das ne Definitionssache. Wenn alle offen sind, hängen die Adress-Eingänge über die Pullups an High! Daher könnte es dann die Adresse 0x4E haben und 0x40 wäre alle Jumper gesteckt.