Étape 3: Programmer le micro-contrôleur
Programmer le microcontrôleur. Je vais pas entrer dans les détails sur la façon de programmer un ATtiny85, puisque c’est en fait très bien dans beaucoup d’autres endroits, tels que celui-ci. Mais voici le code que j’ai utilisé.
#include < avr/sleep.h > const int buzzerPin = 3 ; void setup() sillage Sub ()
const int button1Pin = 1 ;
const int button2Pin = 2 ;
const int button3Pin = 4 ;
myTone int = 0 ;
unsigned long lastWake ;
{
pinMode (buzzerPin, sortie) ;
pinMode (button1Pin, entrée) ;
pinMode (button2Pin, entrée) ;
pinMode (button3Pin, entrée) ;
lastWake = millis() ;
digitalWrite (2, haut) ; activez les pull-up
}
{
annuler le sommeil par mesure de précaution
sleep_disable() ;
doit le faire car la broche restera probablement faible pendant un certain temps
detachInterrupt (0) ;
lastWake = millis() ;
} / / fin de wake
void loop()
{
int button1State = digitalRead(button1Pin) ;
int button2State = digitalRead(button2Pin) ;
int button3State = digitalRead(button3Pin) ;
Si ((button1State == faible) & & (button2State == faible) & & (button3State == faible)) {}
myTone = 100 ;
}
ElseIf ((button1State == faible) & & (button2State == faible)) {}
myTone = 150 ;
}
ElseIf ((button1State == faible) & & (button3State == faible)) {}
myTone = 200 ;
}
ElseIf ((button2State == faible) & & (button3State == faible)) {}
myTone = 300 ;
}
ElseIf (button1State == faible) {}
myTone = 400 ;
}
ElseIf (button2State == faible) {}
myTone = 800 ;
}
ElseIf (button3State == faible) {}
myTone = 2400 ;
}
Si (myTone > 0) {}
lastWake = millis() ;
ton (buzzerPin, myTone, 80) ;
Delay(40) ;
}
else {}
S’il n’y a eu aucune activité pendant 10 secondes, aller dormir.
Si (millis() - lastWake > 10000) {}
désactiver l’ADC
ADCSRA = 0 ;
set_sleep_mode (SLEEP_MODE_PWR_DOWN) ;
sleep_enable() ;
N’interrompez pas avant d’aller dormir, ou le
ISR se détachera des interruptions, et nous ne se réveiller.
noInterrupts () ;
est appelée lorsque la broche D2 va faible
attachInterrupt (0, réveillez-vous, faible) ;
désactiver activer brown-out dans le logiciel
comme le processeur exécute l’instruction suivante après
interruptions sont activées.
interruptions () ; un cycle
sleep_cpu () ; un cycle
}
}
myTone = 0 ;
}
Le code génère une tonalité continue, selon qui les touche ou combinaison de touches, est pressé. Mais il est certainement possible de modifier le code comme vous voulez. Par exemple, vous pourriez coder pour faire des impulsions ou alternant tons, ou même des chansons. À noter que dans la liste des pièces, je comprend une prise DIP pour le ATtiny85, donc même après que le projet sera terminé, vous pouvez retirer la puce et re-programmer pour changer le comportement de l’appareil.