Jag får bara klockan att funka, eller bara SD-kortet att funka. Men bägge tillsammans går inte. Det räcker att ha sladden i till SD-kortläsaren så ger klockan upp... Jag kör klocka och SD-kort parallellt med varsin CS, ben 6 för SD och ben 10 för klockan.
Ja förresten, här är koden:
- Kod: Markera allt
#include <SD.h> // SD bibliotek, hjälpprogram för sd-kortet
#include <DS3234.h>
char x; // x = A eller B som aktiv ECU
int ecuAktiv = 3; // pulsingång vevaxelgivare, (aktivt hög).
int inpin3 = 2; // pulsingång 2 pulser per varv till beräkning av motor/propvarv.
int gasvalue; // gasvärde från poten 0-1023
int sprSignalin = 8; // ansluts till valfri spridarutgång eller sprcontrol, valfritt
float sprTid; // spridaröppningstid i % (av halvt motorvarv)
float liter; // liter/timma
int chipSelect = 6; // chip select pin for the MicroSD Card Adapter
long varvtalprop; // propellerns varvtalsvärde i uS
long puls, varvtalmotor; // pulstid och motorvarvtalsvärde i uS
int readECUAvoltage; // innan volt på ECU A 1-1023
int readECUaltvoltage; // innan volt på ECU B 1-1023
int engineTemp; // motortemp 0-130 grader
int turboAirTemp; // laddlufttemp 0-130 grader
int ambientTemp; // omgivningstemp -20 -> 60 grader
int atmTryck; // atmosfärstryck 1030 till 700 mBar
float ECUAvoltage; // ECU A 0,0 till 6,0 volt
float ECUaltvoltage; // ECU B 0,0 till 6,0 volt
int turbotryck;
DS3234 rtc(10);
File motor; // filnamn "motor" är vald
void setup()
{
pinMode(ecuAktiv, INPUT_PULLUP); // satt aktiv ECU som ingång med pålappmotstånd
pinMode(sprSignalin, INPUT); // från en valfri spridare eller från sprControll
pinMode(inpin3, INPUT); // ingång för att beräkna motor/propvarvtal
Serial.begin(250000); // startar seriell data
pinMode(chipSelect, OUTPUT); // chip select pin satt som utgång
if (!SD.begin(chipSelect)) // väljer in sd-kortet
{
Serial.println("Could not initialize SD card."); // Hjälptext om kort/fil saknas
}
if (SD.exists("motor.txt")) // Om kort och fil finns
{
Serial.println("File exists."); // hjälptext om att filen finns
}
/*
rtc.begin(); // Här ställer mn in klockan en gång
rtc.setTime(13, 20, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014
*/
}
void loop()
{
rtc.begin(); // startar klockvisning
Serial.print(rtc.getDateStr());
Serial.print(" ");
Serial.println(rtc.getTimeStr());
Serial.print(" -- ");
// Send temperature
Serial.print("Internal temp: ");
Serial.print(rtc.getTemp());
Serial.println("C");
//rtc.close();
motor = SD.open("motor.txt", FILE_WRITE); // öppnar "motor.txt" för att skriva in data
if (motor) // om filen "motor" finns
{
//motor.print("TIME "); // skriver tidsangivelse
//motor.print(millis()/60000); // i minuter från strömsättning
motor.print(", PS "); // PS = Power Setting
motor.print(gasvalue); // gasvärde i %
motor.print(", RPM "); // skriver RPM
motor.print(varvtalmotor); // motorns varvtal per minut
motor.print(", TP "); // TP = Turbo Pressure i mBar
motor.print(turbotryck); // turbotrycksvärdet i mBar
motor.print(", ECU V "); // ECU V = ECU:ns batterispänning
motor.print(ECUaltvoltage); // skriver i volt med två decimaler
motor.print(", TOT "); // TOT = Turbons Out Temp
motor.print(turboAirTemp); // skriver temperaturen i celsius
motor.print(", CT "); // CT = Cooling Temp
motor.print(engineTemp); // skriver temperaturen i celsius
motor.print(", AP "); // AP = Ambient Pressure
motor.print(atmTryck); // skriver trycket i mBar
motor.print(", AT "); // AT = Ambient Temp
motor.print(ambientTemp); // skriver temperaturen i celsius
motor.print(", IT "); // IT = Injector onTime
motor.print(sprTid); // skriver ut i %
motor.println("%"); // % tecken
motor.close(); // efter skrivning så stängs filen
}
else
{
Serial.println("Could not open file (writing)."); // om kort saknas/trasigt skrivs detta istället.
}
delay(2500); // Ger ett nytt värde var tredje/fjärde sekund
gasvalue = analogRead(A0); // läser av gasreglagevärde 1-1023
turbotryck = analogRead(A4); // läser av turbotrycket 1-1023
atmTryck = analogRead(A6); // läser av atmosfärstrycket 1-1023
readECUAvoltage = analogRead(A7); // läser av ECU A spänning 1-1023
readECUaltvoltage = analogRead(A5); // läser av ECU B batterispänning 1-1023
engineTemp = (5.0* analogRead(A1)*100.)/1024; // LM-35 tempgivare blir motortemp C grader
turboAirTemp = analogRead(A2); // NTC motstånd som mäter laddlufttemp C grader
ambientTemp = analogRead(A3); // läser av omgivnings NTC motståndet 1-1023
gasvalue = map(gasvalue,0,1023,0,100); // gasreglaget blir 0 till 100 % effekt börvärde
turbotryck = map(turbotryck,0,1023,100,3000); // turbotrycket blir 400 till 4000 mBar
atmTryck = map(atmTryck, 0,1023,100, 3000); // atmosfärstrycket blir ocalibrerat mBar.
ECUAvoltage = readECUAvoltage *(8.0/1023.0); // ECU A drivspänning till 10 volt
ECUaltvoltage = readECUaltvoltage *(28.3/1023.); // ECU B batteripänning till 23,5 volt
ambientTemp =map(ambientTemp,0,1023,60,-20); // omgivningstemperatur -20 till 60 G c med en NTC
turboAirTemp = map(turboAirTemp,0,1023,60,-20);
sprTid = pulseIn(sprSignalin, HIGH); // mäter in valfri spridares ontid i uS
sprTid = sprTid/puls*100.; // gör om ontiden från uS till procent
liter = sprTid * varvtalmotor /150; // visar liter/timma baserat på spridaröppningstid
// och antal öppningar via motorns vartal, /150 skall provas ut...
if (digitalRead(ecuAktiv)== HIGH) // känner av vilken ECU som är aktiv
{
x = 'A'; // om A är hög visas A som aktiv
}
else
{
x = 'B'; // om A är låg visas B som aktiv
}
Serial.print("Gasvalue "); // skriver ut div realtidsvärden
Serial.print(gasvalue); // samtliga värden är självförklarande
Serial.print("% "); // via datorns monitor...
Serial.print("Turbovalue ");
Serial.print(turbotryck);
Serial.print(" mBar ");
Serial.print("Turbo Air Temp ");
Serial.print(turboAirTemp);
Serial.println(" Grader C.");
Serial.print("Absoluttryck ");
Serial.print(atmTryck);
Serial.print(" mBAR ");
Serial.print("ECU A ");
Serial.print(ECUAvoltage);
Serial.print(" Volt ");
Serial.print("ECU B ");
Serial.print(ECUaltvoltage);
Serial.println(" Volt");
Serial.print("Engine Temp ");
Serial.print(engineTemp);
Serial.print(" Grader C. ");
Serial.print("Ambient Temp ");
Serial.print(ambientTemp);
Serial.print(" Grader C.");
Serial.print(" ECU ");
Serial.print(x);
Serial.println(" Aktiv");
Serial.print("Motor ");
Serial.print(varvtalmotor);
Serial.print(" RPM");
Serial.print(" Propeller ");
Serial.print(varvtalprop);
Serial.println(" RPM ");
if (varvtalmotor >=3400) // max pulslängd tomgång, >= 3400 mikrosek
{
varvtalmotor = 3400; // om stillastående/startmotorvarv så blir motorvarvet noll till ev varvräknare
}
varvtalmotor = map(varvtalmotor,0,5100,0,255); // 100 till 5100 uS görs om till 0 till 255 (PWM)
Serial.print("Pulswidth "); // fortsättning div realtidsvärden
Serial.print(varvtalmotor);
Serial.print(" spridare ");
Serial.print(sprTid);
Serial.print(" % open ");
Serial.println("*Sent from SD-card Control*");
delay(1000);
puls = pulseIn(inpin3, LOW); // väntar in nästa puls, Triggar på nersidan
// vid stillastående motor blir det en timeout varje sekund.
varvtalmotor = (1000000/puls)*30.06; // pulsbrädden görs om till RPM motor
varvtalprop = varvtalmotor *0.625; // RPM motor görs om till RPM propeller
}
// end of loop____________________
Det här SD-kortet innehåller ju ingen processor utan kortet på plats, det är bara en signalomvandlare från/till 3,3/5volt, den borde väl inte störa?