Bu uygulamayı tamamen kendi güncel ihtiyaçlarıma göre, gerek Zafer Şahin'den kopyalayarak, gerekse uygulama örneklerini inceleyip taklit ve tahmin ederek oluşturmaya çalıştım. Sd kart loglama kısmını, sdcard modülüm henüz olmadığı için test edemiyorum. Umarım çalışır
Kodun yapmasını umduğum iş özetle 1,5 saniyede bir iki kere led çakmak, bu sırada okuduğu voltaj değerlerini 0,1 sn arayla hem seri bağlantı, hem bt bağlantı üzerinden bilgisayara göndermek, hem de sd karta kaydetmek. Zafer abinin voltajı okuyan kodundan " V" ekini çıkardım ki, daha sonra logdan dataları excell'e atıp bir grafik almak kolay olsun. Hatta bir yerlerde grafik çizimini de arduinoya yaptırabileceğimi okumuştum sanırım, bir sonraki adım da bu olsun 
Kodu bir inceleyip olası yanlışları gösterirseniz çok sevinirim. Dediğim gibi sd kısmını deneme şansım olmadı ve daha bugün öğrendim. Saygılar..
Kodu bir inceleyip olası yanlışları gösterirseniz çok sevinirim. Dediğim gibi sd kısmını deneme şansım olmadı ve daha bugün öğrendim. Saygılar..
Kod:
/*
The circuit:
** ledpin 13
** voltagepin 2
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4 (ethernet shield kullanirken) (ethernet shield kullanilmadiginda 10 mu kullanilacak?)
*/
#include <Event.h>
#include <Timer.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
SoftwareSerial btSerial(7, :coolxf:; // Yazilimsal seri port nesnesini sıra ile RX, TX pinleri ile olustur
Timer t;
int ledpin = 13;
int voltagePin = 2; // Analog voltaj olcum pini
int vRefVal = 0; // Referans voltaj degeri
float vTruVal = 0; // Gercek voltaj degeri
void setup()
{
Serial.begin(9600); // Donanımsal seri portu 9600 Baud hizinda baslat
btSerial.begin(9600); // Yazilimsal seri portu 9600 Baud hizinda baslat
t.every(100, takeReading); // her 100ms'de bir okuma alacak
pinMode(ledpin, OUTPUT);
t.oscillate(ledpin, 150, LOW, 2);
t.after(1500, LOW);
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it: (ethernet shield kullanilmadiğinda bu satira yine de gerek var mi?)
pinMode(10, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
}
void loop() {
t.update();
vRefVal = analogRead(voltagePin); // Voltaj pinini oku
vRefVal = map(vRefVal, 0, 1023, 0, 5000); // Okunan 0-1023 arasındaki analog degeri, 0 - 5000 milivolt ile eslestir.
vTruVal = ((float)vRefVal * 16) / 1000 ; //Bulunan ve milivolt cinsinden voltaj degerini, voltaj bolucudeki 16 kat degerine gore ayarla
}
void takeReading() { //100ms'de bir okuduğu değeri yazacak
Serial.print(vTruVal); //Voltaj degerini seri port uzerinden bilgisayara gonder
btSerial.print(vTruVal); //Voltaj degerini yazılımsal seri port uzerinden bluetooth a gonder
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("voltajlog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(vTruVal);
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
}