//
// Made for Spikerling board V0.4
// 18. August 2022
// BackyardBrains
// Inputs:
// - light sensor
// - analog input jack (0-5V)
//
// Outputs:
// - analog output of V on jack
// - click sound whenever V crosses 50mV
// - TTL pulse whenever V crosses 50mV
// - serial communication @ 2Mbaud (text values of V)
//Reversal potentials
double EK = -84; //mV
double ECa = 120; //mV
double EL = -60; //mV
double Cm = 1.0; //microF/cm2
//Time step
double dt = 0.0001;
//Maximal conductances
double gL = 2; //mS/cm2
double gK = 8;
double gCa = 4;
double gKCa = 0.75;
// Other params
double V1 = -1.2;
double V2 = 18;
double V3 = 12;
double V4 = 17.4;
double phi = 4.6;
double eps = 0.07;
double kCa = 1.0;
double mu = 0.02;
double Iapp = 55;
double V = 0;
double n = 0;
double Ca = 0;
double minf;
double tau_n;
double ninf;
double z;
double IKCa;
void setup()
{
Serial.begin(2000000);
}
void loop() {
// put your main code here, to run repeatedly:
minf = 0.5*(1+tanh((V-V1)/V2));
tau_n = 1.0/cosh((V-V3)/(2*V4));
ninf = 0.5*(1+tanh((V-V3)/V4));
z = Ca/(Ca+1);
IKCa = gKCa*z*(V-EK);
V = V + ((-gL*(V-EL) - gK*n*(V-EK) - gCa*minf*(V-ECa)-IKCa +Iapp)/Cm)*dt;
n = n + phi*((ninf-n)/tau_n)*dt;
Ca = Ca + eps*(-mu*(gCa*minf*(V-ECa))-kCa*Ca)*dt;
Serial.print("Variable 1:");
Serial.println(V);
// Serial.print(",");
//Serial.println(Iapp);
/*
Serial.print(gKCa);
Serial.print(",");
Serial.print(gK);
Serial.print(",");
Serial.print(gCa);
Serial.print(",");
Serial.print(Ca);
Serial.print("%");
*/
//Serial studio output
/*
Serial.print("%");
Serial.print(V);
Serial.print(",");
Serial.print(gKCa);
Serial.print(",");
Serial.print(gK);
Serial.print(",");
Serial.print(gCa);
Serial.print(",");
Serial.print(Ca);
Serial.print("%");
*/
}