montage avec DIP SWITCHES = help !

chastain
mer, 07/19/2017 - 18:29
bonjour à tous ....
là je sèche.
j'ai conçu ce petit module que je nomme le sélecteur de modes ou de programmes....d
vous observez qu'il comprend une pro mini. Son programme doit permettre de donner une valeur de 0 à 255 à la sortie 3 PWM en fonction de la position des switchs. cette sortie disponible via adaptateur grove ou barrette HC sera reliée à une entrée analogique A0 d'une arduino UNO qui elle gère l'ensemble d'un système. Donc ce module à dip switchs est là pour indiquer au prog de la UNO quel mode ou sous programme il doit mettre en oeuvre pour le système.
Cela ne fonctionne pas avec les 2 codes suivants.....mon circuit est correct je l'ai vérifié plusieurs fois.
code du module à switch:
bool _ABVAR_1_etat_s1= false ;
boolean __ardublockDigitalRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
bool _ABVAR_2_etat_s2= false ;
bool _ABVAR_3_etat_s3= false ;
bool _ABVAR_4_etat_s4= false ;
int _ABVAR_5_valeur_sortie = 0 ;
void setup()
{
Serial.begin(9600);
pinMode( 3 , OUTPUT);
_ABVAR_1_etat_s1 = __ardublockDigitalRead(9) ;
_ABVAR_2_etat_s2 = __ardublockDigitalRead(8) ;
_ABVAR_3_etat_s3 = __ardublockDigitalRead(7) ;
_ABVAR_4_etat_s4 = __ardublockDigitalRead(6) ;
_ABVAR_5_valeur_sortie = 0 ;
}
void loop()
{
Serial.print(_ABVAR_1_etat_s1);
Serial.print(" ");
Serial.print(_ABVAR_2_etat_s2);
Serial.print(" ");
Serial.print(_ABVAR_3_etat_s3);
Serial.print(" ");
Serial.print(_ABVAR_4_etat_s4);
Serial.print(" ");
Serial.println();
Serial.print(_ABVAR_5_valeur_sortie);
Serial.print(" ");
Serial.println();
if (( ( _ABVAR_1_etat_s1 ) == ( HIGH ) ))
{
analogWrite(3 , 50);
_ABVAR_5_valeur_sortie = 50 ;
}
if (( ( _ABVAR_2_etat_s2 ) == ( HIGH ) ))
{
analogWrite(3 , 100);
_ABVAR_5_valeur_sortie = 100 ;
}
if (( ( _ABVAR_3_etat_s3 ) == ( HIGH ) ))
{
analogWrite(3 , 150);
_ABVAR_5_valeur_sortie = 150 ;
}
if (( ( _ABVAR_4_etat_s4 ) == ( HIGH ) ))
{
analogWrite(3 , 200);
_ABVAR_5_valeur_sortie = 200 ;
}
delay( 2000 );
}
code la UNO :
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(analogRead(A0));
Serial.print(" ");
Serial.println();
delay( 2000 );
}
PS : le code de la uno est un test de lecture de la valeur analogique reçue ....lecture dans le moniteur série.
Quand au premier code je n'ai rédigé que 4 tests pour chaque switch actif j'attribue une valeur à PIN3.
J'ai dans l'idée que ce n'est pas la bonne démarche je pense qu'il vaudrait mieux lire la valeur d'un demi octet par exemple me parait plus logique. mais je ne sais pas faire.
merci
trés cordialement
laurent chastain
chastain
mer, 07/19/2017 - 18:29
deuxième photo
chastain
ven, 07/21/2017 - 21:34
Merci brossden pour ces explications des plus claires et détaillées.
Je me suis emballé à fabriquer mon circuit en étant sur de mon coup.
Une interrogation reste ...comment lire la position des switchs en tant que demi octet ?
faudrait il utiliser l'i2c ?
Cordialement laurent chastain
chastain
sam, 07/22/2017 - 08:12
Bonjour,
merci une nouvelle fois
je vais tester.
chastain
sam, 07/22/2017 - 19:53
mon nouveau module :
pour le programme j'ai fait simple en utilisant la fonction ET
le switch 2 est sur l'entrée 2 et le switch 1 sur l'entrée trois
un aperçu du programme sous ardublock :
là une copie du code généré par celuici :
bool _ABVAR_1_switch1= false ;
boolean __ardublockDigitalRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
bool _ABVAR_2_switch2= false ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
_ABVAR_1_switch1 = __ardublockDigitalRead(2) ;
_ABVAR_2_switch2 = __ardublockDigitalRead(3) ;
if (( ( ( _ABVAR_1_switch1 ) == ( LOW ) ) && ( ( _ABVAR_2_switch2 ) == ( LOW ) ) ))
{
Serial.print("programme 1 en cours d'execution");
Serial.print(" ");
Serial.println();
}
if (( ( ( _ABVAR_1_switch1 ) == ( LOW ) ) && ( ( _ABVAR_2_switch2 ) == ( HIGH ) ) ))
{
Serial.print("programme 2 en cours d'execution");
Serial.print(" ");
Serial.println();
}
if (( ( ( _ABVAR_1_switch1 ) == ( HIGH ) ) && ( ( _ABVAR_2_switch2 ) == ( LOW ) ) ))
{
Serial.print("programme 3 en cours d'execution");
Serial.print(" ");
Serial.println();
}
if (( ( ( _ABVAR_1_switch1 ) == ( HIGH ) ) && ( ( _ABVAR_2_switch2 ) == ( HIGH ) ) ))
{
Serial.print("programme 4 en cours d'execution");
Serial.print(" ");
Serial.println();
}
delay( 1000 );
}
En jouant sur les switchs j'obtiens ça.....et ça me convient !!!
chastain
sam, 07/22/2017 - 09:41
Merci pour le suivi....
je teste pour en faire un programme en version ardublock, car plus adapté pour le collège.
Ensuite nouvelle conception de mon module dip switch pour platine grove.
je ferai suivre
à plus tard donc
chastain
sam, 07/22/2017 - 18:36
Ton code est plus clair c'est vrai....mais cela s'explique : au collège au programme nos systemes au moyen de blocs de scratch,appinventor et...ardublock. Ce dernier compile en fichier ino un programme qui nest pas franchement lisible en tout cas pas tes proches de ce que lon ferait directement sous arduino ide. Mais bon ce nest pas demandé à ce niveau là.
Ce qui m'as conduit ici ? Ma conscience professionnelle qui me pousse à rechercher les bonnes infos pour m'autoformer. Et parce que je suis motivé par le monde des makers. Alors quand tu tombes si un tel site avec le travail exceptionnel fournis par son auteur mais aussi sur quelques personnes comme toi qui n.hésitent pas à partager leurs compétences (comme je n'hésite pas à le faire de mon côté notamment sur mon site) .....