Skip to content

Instantly share code, notes, and snippets.

@radames
Last active December 17, 2015 10:29
Show Gist options
  • Select an option

  • Save radames/4cbce09601f13c96bd40 to your computer and use it in GitHub Desktop.

Select an option

Save radames/4cbce09601f13c96bd40 to your computer and use it in GitHub Desktop.
/*
programa no python
import serial
s = serial.Serial("/dev/tty.usbmodemfd121",19200)
//liga led botao
s.write("1P")
//apaga led botao
s.write("0P")
//pulsa led botao
s.write("2P")
*/
#define NUM_LEDS 15
//pinos dos leds historias
const int ledHpins[NUM_LEDS] ={
22,24,26,28,30,32,34,36,38,40,42,44,46,48,50};
//pinos dos leds TImer
const int ledTpins[NUM_LEDS] ={
23,25,27,29,31,32,35,37,39,41,43,45,47,49,51};
//estados dos leds,0 apagado, 1 ligado, 2 piscante
int ledsStates[NUM_LEDS];
//pino do led do botao com PWM
const int buttonPin = 12;
long lastTime=0;
boolean pisca = false;
long lastPulse = 0;
// estado do botao
int bState = 0;
float a = 0;
//marca tempo para o timer
long lastTimerCount = 0;
int startTimer =-1;
int v = 0;
int cmd;
void setup(){
Serial.begin(19200);
Serial.println("starting....");
for(int i=0; i< NUM_LEDS; i++){
pinMode(ledHpins[i],OUTPUT);
pinMode(ledTpins[i],OUTPUT);
ledsStates[i] = 0;
}
}
void loop() {
int c;
if(Serial.available()){
c = Serial.read();
if ((c>='0') && (c<='9')) {
v = 10*v + c - '0';
}
else {
if (c=='S'){
//seta o led em alto, de 0 a 14
ledsStates[v] = 1;
digitalWrite(ledHpins[v],HIGH);
}
else if (c=='U') {
//deslita um led de 0 a 14
//unset led v
ledsStates[v] = 0;
digitalWrite(ledHpins[v],LOW);
}
else if (c=='B') {
// set o led de 0 a 14 para piscar a cada 250 ms
//blink led v
ledsStates[v] = 2;
}
else if(c=='P'){
//seta estado do botao
// 0 desligado, 1 ligado, 2 pulsando
bState = v;
analogWrite(buttonPin, v==1?255:0);
}
else if(c=='T'){
//liga um decrementador para os leds
//se statTimer > 0 decrementa a cada 1 segundo apagando os leds em sequencia
//a partir da posicao enviada
startTimer = v; //de 1 a 15
lastTimerCount = 0;
}
else if(c=='R'){
reset();
}
v = 0;
}
}
blink();
//se pulsa chama funcao timer para pulsos
if(bState == 2){
pulse();
}
if(startTimer >=0){
countDown();
for(int i=0;i<NUM_LEDS;i++){
Serial.print(digitalRead(ledTpins[i]));
}
Serial.println();
}
}
void reset(){
for(int i =0 ; i<NUM_LEDS;i++){
ledsStates[i] = 0;
digitalWrite(ledHpins[i],LOW);
}
startTimer = -1;
lastTimerCount = 0;
bState = 0;
analogWrite(buttonPin,0);
}
void countDown(){
for(int i=0;i<startTimer;i++){
digitalWrite(ledTpins[i],HIGH);
}
if(millis()-lastTimerCount > 1000){
for(int i=startTimer; i<NUM_LEDS; i++){
digitalWrite(ledTpins[i],LOW);
}
startTimer--;
lastTimerCount = millis();
}
}
void blink(){
if(millis()-lastTime > 250){
pisca =!pisca;
for(int i=0; i<NUM_LEDS; i++){
if(ledsStates[i] == 2){
//Serial.print(pisca,DEC);
digitalWrite(ledHpins[i],pisca);
}
}
///Serial.println();
lastTime = millis();
}
}
void pulse() {
if(millis() - lastPulse > 5){
a+=2*PI/(360);
if(a>=2*PI){
a = 0;
}
float s = sin(a)*sin(a);
int i = s*255;
analogWrite(buttonPin, i);
lastPulse = millis();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment