Zu Beginn habe ich mir (auch bei sunfounder zu finden) Anleitungen für leichte Schaltungen angeschaut und diese nachgebaut. Neben der Existenz eines Schaltkreises müsst ihr auch ein Programm haben, welches euren programmierbaren Pins sagt, was sie machen sollen. Einfache Programme gibt es auch online zu genüge. Ich für meinen Teil konnte garnicht programmieren und habe mir unteranderem damit die Fähigkeit (fast) selbst beigebracht. Für den Raspberry Pi gibt es eine eigene Bibliothek, in welcher alle möglichen und nötigen Befehle drinstehen. Diese nennt sich WiringPi. Auch dazu findet man im Netz sehr viel Anleitungen. Ich habe vorallem oft hier geschaut.
Die ersten Schaltungen sind ein blinkendes farbiges LED, mehrere blinkende farbige LED's, einen piependen Lautsprecher, eine RGB, bei der man, wenn man ein bisschen herumprobiert einen Verlauf programmieren konnte. Das hat mir schon sehr gefallen! Weiter kam ein Thermistor bei welchem man einen analog-digital-Wandler mit einbauen musste, da die Pins logischerweise (ist ja ein Computer) nur digitale Werte einlesen können, der Thermistor jedoch einen analogen Output hatte. Mit dieser Schaltung und dem dazugehörigen Programm (auch dieses gab es noch auf sunfounder.com zu finden) ist es mir letztendlich durch ein paar Modifizierungen gelungen einen Temperaturgraphen über 24 Stunden zeichnen zu lassen.

Temperaturdiagramm


Das C-Programm, mit welchem ich die Daten 24 Stunden ausgelesen habe, sieht man im folgenden. Den Plot habe ich letztendlich mit dem Programm Gnuplot gemacht. Natürlich ist die ganze Prozedur noch verbesserungswürdig und viel mit Automation hat das auch noch nicht zu tun. Jedoch muss man bedenken, dass, bevor man etwas automatisieren kann, man erstmal Daten braucht, welche diese Automation einleitet. Sprich es muss ein bestimmtes Ereignis eintreten (beispielsweise eine Temperatur erreicht werden), um überhaupt eine Reaktion darauf geschehen zu lassen -action / reactio- sozusagen.

/etc/apache2/
#include 
#include 
#include 
#include 
#include 

typedef unsigned char uchar;
typedef unsigned int uint;

#define ADC_CS 0
#define ADC_CLK 1
#define ADC_DIO 2

uchar get_ADC_Result(void)
{
//10:CH0
//11:CH1
uchar i;
uchar dat1=0, dat2=0;

digitalWrite(ADC_CS, 0);

digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);

digitalWrite(ADC_CLK,
digitalWrite(ADC_DIO,1); delayMicroseconds(2); 
//CH0 10
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0);

digitalWrite(ADC_DIO,0); delayMicroseconds(2); 
//CH0 0

digitalWrite(ADC_CLK,1);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);

for(i=0;i<8;i++)
{
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0); delayMicroseconds(2);

pinMode(ADC_DIO, INPUT);
dat1=dat1<<1 | digitalRead(ADC_DIO);	
}

for(i=0;i<8;i++)
{
dat2 = dat2|((uchar)(digitalRead(ADC_DIO))<< i);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0); delayMicroseconds(2);
}

digitalWrite(ADC_CS,1);

pinMode(ADC_DIO, OUTPUT);

return(dat1==dat2) ? dat1 : 0;
}




double temp(uchar adcVal){			

double temperatur;
double ohms;
double invtemp;
double a=0.001579793159138;
double b=0.000182333930767;
double c=0.000000141033461;

/ohms = 100000.0/((1023.0/adcVal)-1.0);
//invtemp= (1.0/298.1) + (1.0/5500.0) * 
log(ohms/10000.0); //temperatur=1/(invtemp) - 273.15; //temperatur = adcVal; ohms=(256.0/adcVal-1.0)*10000; temperatur=1/(a+b*log(ohms)+c*log(ohms)*
log(ohms)*log(ohms))-273.15; return(temperatur); } int main(void) { uchar adcVal; struct tm *newtime; time_t long_time; if(wiringPiSetup() == -1){ printf("setup wiringPi failed !"); return 1; } pinMode(ADC_CS, OUTPUT); pinMode(ADC_CLK, OUTPUT); FILE *datei; datei=fopen("Tag.txt","w"); int i=0; double neu; //int zeit=0; while(i<576){ time( &long_time); newtime=localtime( &long_time); pinMode(ADC_DIO, OUTPUT); adcVal = get_ADC_Result(); neu= temp(adcVal); fprintf(datei, "%d.%d.%d %d:%-20d%f\n",
newtime->tm_mday, newtime-> tm_mon+1,newtime->tm_year+1900, newtime->
tm_hour,newtime->tm_min, neu); i++; delay(300000); //1000=1sec, 60000=1min, 300000=5min } fclose(datei); return 0; }