Bonjour à tous,
Je me bricole un petit éclairage LED pour mon portail, avec un ruban et un AtTiny44.
Sur le principe, rien d'exceptionnel.
-2,5m de ruban RGB au portail
-Une boite électrique avec une carte prototype maison (alime/transistors/ AtTiny 44)
-un boitier déporté avec des potentiomètres
En entrée, j'ai 3 pots, 1 bouton.
En sortie, j'ai 3 rangées de MOS pour piloter le ruban RGB.
J'ai fait des tests avec un UNO, pour piloter ma carte électronique (fils volant branché sur le support de CI à la place de l'AtTiny).
Tout est OK ! Juste le ruban qui tire un peu sur le bleu…
Problème :
Par contre, quand je mets le programme sur l'AtTiny44, plus rien… J'ai une sortie qui "Blink" toute les 5s (rien à voir avec le programme) et quand je touche mes Pots, j'ai une vague impression que l'intensité change…
Dans ma réflexion, j'ai bien pris garde d'utiliser les fonctions basiques, car j'ai lu qu'une grosse partie des commandes "Arduino" n'était pas supporté.
Je ne sais pas trop où chercher maintenant. Peut être le n° d'affectation des pattes ? (de 0 à 10 sur AtTiny44 ?).
Une idée ?
Code :
byte R = 5; //pins des sorties
byte V = 6;
byte B = 7;
byte BTN = 3; //pin entrée bouton
byte etat_BTN = 0; //bits état du bouton
byte last_BTN = 0;
byte cycle = 0; //variable de gestion des tempos, des cycles
int tempo = 0;
int chroma = 0;
unsigned long currentMillis = 0;
long previousMillis = 0;
int pot_R = 0; //pins des entrées ANA
int pot_V = 1;
int pot_B = 2;
int varR, varV, varB; // stockage de la valeur ANA
byte outR, outV, outB; // stockage de la sortie PWM
// Tableaux de valeurs pour réaliser un cercle chromatique (les tableaux sont remplient normalement, j'ai vidé les valeurs pour alléger la lecture sur le forum)
byte chromaR[] = {};
byte chromaV[] = {};
byte chromaB[] = {};
void setup()
{
//Serial.begin(9600);
pinMode(BTN,INPUT);
pinMode(R,OUTPUT);
pinMode(V,OUTPUT);
pinMode(B,OUTPUT);
delay(1000);
}
void loop()
{
//Serial.println(cycle);
varR = analogRead(pot_R);
varV = analogRead(pot_V);
varB = analogRead(pot_B);
currentMillis = millis();
/*Serial.print("pot ");
Serial.print(varR);
Serial.print(" ");
Serial.print(varV);
Serial.print(" ");
Serial.println(varB);
Serial.print("millis ");
Serial.print(currentMillis);
Serial.print(" ");
Serial.println(previousMillis);
Serial.print("Chroma ");
Serial.println(chroma); */
//test de l'état du bouton pour changer de "cycle"
etat_BTN = digitalRead(BTN);
if(etat_BTN != last_BTN)
{
if(etat_BTN > 0)
{
delay(300);
cycle++;
last_BTN = etat_BTN;
}
last_BTN = etat_BTN;
}
switch (cycle)
{
case 1:
//tricolor, réglage par couleur
outR = varR/4;
outV = varV/4;
outB = varB/4;
break;
case 2:
//Cercle Chromatique, réglage de la vitesse
tempo = 10+varR+5*varV+10*varB;
outR = chromaR[chroma];
outV = chromaV[chroma];
outB = chromaB[chroma];
if (currentMillis - previousMillis > tempo)
{
previousMillis = currentMillis;
chroma++;
if(chroma >359)
{
chroma =0;
}
}
break;
/*case 3:
//Random, ++/-- de chaque couleur en fonction des POTS
break;
*/
default:
// cycle BLANC avec PWM
int BLANC;
BLANC =varV/4;
outR = BLANC;
outV = BLANC;
outB = BLANC;
}
analogWrite(R, outR);
analogWrite(V, outV);
analogWrite(B, outB);
if(cycle > 2)
{
cycle = 0;
}
delay(10);
}