Attiny85 commande Serial

Bonsoir !

Alors voila, pour faire court, depuis 2 jours j'essaye simplement d'allumer une led en utilisant le moniteur série et un attiny85, l'objectif final étant de contrôler des relais en bluetooth.
J'ai trouvé de nombreux tutos tout fait sur internet, aucun ne fonctionne pour moi, donc j'essaye de repartir du début.

Avec le code ci-dessous, j'arrive parfaitement à recevoir les "messages" de l'attiny ("led on" / "led off") :

#include <SoftwareSerial.h>

SoftwareSerial monitor(5, 4);

void setup() {
  
Monitor.begin(9600); 
pinMode(0, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, INPUT);
}

void loop() {
  digitalWrite(0, HIGH);
  Monitor.println("LED on");
  delay(1000);
  digitalWrite(0, LOW);
  Monitor.println("LED off");
  delay(1000);
}

J'essaie donc maintenant de contrôler la led à partir du moniteur, et là aucune réponse (pas de bug de téléversement ou de compilation, le moniteur est bien sur 9600bauds, parseInt() à la place de read() ne fonctionne pas). Le code ci-dessous fonctionne pourtant parfaitement sur une UNO classique. Quelqu'un aurait - il une suggestion?

#include <SoftwareSerial.h>

SoftwareSerial Monitor(5, 4);
int led = 0;

void setup() {
  
Monitor.begin(9600); 
pinMode(led, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, INPUT);
}

void loop() {
int t = Monitor.read();
 if(t == '0'){ 
  digitalWrite(led, HIGH);
  Monitor.println("LED on");
 }
 else if(t == "0"){ 
  digitalWrite(led, HIGH);
  Monitor.println("LED on");
 }
 if(t == '1'){ 
  digitalWrite(led, LOW);
  Monitor.println("LED off");
 }
 else if(t == "1"){ 
  digitalWrite(led, LOW);
  Monitor.println("LED off");
 }
 
}

Merci d'avance, je sèche complètement !

Bonjour,

Essaies de renvoyer le caractère reçu en écho pour voir si ta liaison fonctionne dans les deux sens

void loop()
{
  if (Monitor.available())
    Monitor.write(Monitor.read());
}

Ca c'est inutile

  pinMode(4, OUTPUT);
  pinMode(5, INPUT);

Ca c'est faux: tu compares un caractère à une chaine (c'est à dire à une adresse)

  else if (t == "0") {

Le compilateur devrait donner une erreur ou au minimum un warning.

Merci pour cette réponse si rapide!

Ah oui en effet le "0" était une tentative désespérée (et visiblement pas malin)

#include <SoftwareSerial.h>

SoftwareSerial Monitor(5, 4);
int led = 0;

void setup() {
  
Monitor.begin(9600); 
pinMode(led, OUTPUT);
}


void loop()
{
  if (Monitor.available())
    Monitor.write(Monitor.read());
}

J'ai testé l'écho, aucune réponse, je ne comprend vraiment pas...

Tu es sur du brochage?
Tu utilises quoi comme interface serie-usb?

Je suppose que le brochage est bon puisqu'il marche pour lorsque l'attiny émet avec mon premier code (mais je peux me tromper, je met un rapide schema en PJ)

Pour ce qui est de l'interface, j'utilise une arduino uno avec le moniteur de l'IDE

Je vois que tu utilises la pin reset. Tu as programmé les fuses pour que reset soit utilisé comme une pin e/s?

Ah non je ne sais pas du tout comment faire ça !

Du coup, j'ai changé de pin, mais en utilisant les pins 3 et 4 à la place de 4 et 5, toujours aucune communication avec le port série (alors qu'encore une fois, le 1er code fonctionne)

Question:
à quoi sert SoftwareSerial si tu utilise dans ton schema les pin 0 et 1 ?

savoriano:
Question:
à quoi sert SoftwareSerial si tu utilise dans ton schema les pin 0 et 1 ?

Relis bien le sujet

Salut Savoriano, j'utilise SoftwareSerial parce c'était ce qui me paraissait le plus simple pour communiquer avec l'attiny !

Et merci Kamill pour tes messages !

Visiblement l'émission depuis l'ATtiny fonctionne, je ne comprend pas pourquoi la réception ne fonctionne pas

J'ai toujours utilisé une liaison série sur l'attiny pour afficher des messages de debug. Je ne me souviens pas d'avoir utilisé en réception.
Si j'ai le temps j'essayerai demain SoftwareSerial en réception.

Antttoine:
Ah non je ne sais pas du tout comment faire ça !

Du coup, j'ai changé de pin, mais en utilisant les pins 3 et 4 à la place de 4 et 5, toujours aucune communication avec le port série (alors qu'encore une fois, le 1er code fonctionne)

Donc t'a mis
SoftwareSerial Monitor(3, 4);

?
Le Pin 3 connecté au pin 1 de l'arduino et pin 4 au pin 0 de l'arduino?

Bon, je viens d'essayer avec SoftwareSerial Monitor(3, 4); et ça fonctionne.
Par contre j'utilise une interface série-usb prolific et non une carte uno.

En mettant le Monitor(3, 4) j'ai (normalement) bien branché le Pin3 attiny au pin1 arduino et le 4 attiny au 0 arduino.
Après, dans le désespoir j'ai tenté d'inverser les cablages mais évidemment sans résultat non plus.

Merci Kamill pour ton test, il va peu-être falloir que "j'investisse" dans ce type de matos, ce qui me désespère c'est que je pensais commander l'ATtiny via bluetooth, mais pas sûr que ça fonctionne du coup

Qu'est ce que tu appelles pin 3 et 4? C'est la numérotation arduino ou la pin physique?
Il faut relier la pin 2 du boitier (pin physique) à la pin 0 de l'arduino et la pin 3 du boituer à la pin 1 de l'arduino.

Je viens d'essayer avec une carte uno comme interface usb-serie et ça fonctionne également. Bien sur il faut mettre dans la carte uno un programme qui n'initialise pas la liaison série (programme vide par exemple).

Autre chose: SoftwareSerial ne peut pas émettre et recevoir en même temps, donc le programme qui renvoie le caratère reçu fonctionne bien si on envoie caractère par caractère, mais perd des caractères si on envoie une chaine de plusieurs caractères.

Pour les numéros de pins, je me base sur la numérotation Arduino, pin 3 et 4 pour moi correspondent au pb3 et pb4 (sur l'image jointe), est-ce une erreur?

J'ai d'ailleurs aussi essayé avec les pb0 et pb1, je reçois parfaitement avec le premier code, mais rien du tout avec le second ou avec l'écho.

Dans la Uno j'ai le programme BareMinimum,
Merci pour ton test !! Ca confirme que c'est possible, le problème vient donc soit de mon matos... soit de moi^^

Info intéressante ! Mais même en envoyant une lettre ou un chiffre unique via le serial monitor, impossible d'avoir un écho

attiny-pinout.png

Si tu utilises la numérotation arduino, je pense que tu as inversé
c'est
attiny85 uno
pin 3 -> pin0
pin 4 -> pin 1

J'ai vérifié, malheureusement même en inversant aucune réponse, et pourtant quand je vérifie avec mon 1er code ça marche sans soucis

Tu peux nous donner ton dernier code car ce problème m’intéresse.
J'ai acheté 2 Attiny85 mais je les aurai pas tout de suite!

Savoriano j'aurais pas accès à mon ordi avant lundi donc je ne peux pas t'envoyer le code maintenant, mais en gros, j'ai corrigé le 2nd code de mon premier message en suivant les conseils de Kamill!

Sinon je suis par hasard tombé sur un post du forum international qui disait qu'il y avait 1000000 sujets parlant de problème de communication avec attiny85...