Génération de Potentiel d’Action
int potPin = A0;
const int ledPin = 9;
float lambda = 8.0;
int spikeDuration = 15;
int refractoryPeriod = 200; // ms
unsigned long lastSpikeTime = 0;
bool poissonEvent(float lambda) {
float dt = 0.01;
float p = lambda * dt;
return random(0, 10000) < p * 10000;
}
void setup() {
pinMode(ledPin, OUTPUT);
randomSeed(analogRead(0));
}
void loop() {
unsigned long now = millis();
int val = analogRead(potPin);
float lambda = map(val, 0, 1023, 1, 30);
// réfractaire
if (now - lastSpikeTime < refractoryPeriod) {
digitalWrite(ledPin, LOW);
return;
}
if (poissonEvent(lambda)) {
digitalWrite(ledPin, HIGH);
delay(spikeDuration);
digitalWrite(ledPin, LOW);
lastSpikeTime = now;
}
delay(5);
}
Courbes caractéristiques NMOS
const int gatePWM = 9;
const int shuntPin = A0;
const int vdsPin = A1;
const float VREF = 5.0;
const float RSHUNT = 1.0;
void setup()
{
Serial.begin(115200);
}
void loop()
{
for(int pwm = 0; pwm <= 255; pwm += 5)
{
analogWrite(gatePWM, pwm);
delay(200);
float vshunt =
analogRead(shuntPin) * VREF / 1023.0;
float ids =
vshunt / RSHUNT;
float vds_adc =
analogRead(vdsPin) * VREF / 1023.0;
float vds =
vds_adc * (133.0 / 33.0);
float vgs =
pwm * VREF / 255.0;
Serial.print(vgs,3);
Serial.print(";");
Serial.print(vds,3);
Serial.print(";");
Serial.println(ids,3);
}
delay(3000);
}